freeswitch dialplan學習總結


Dialplan 是freeswitch 對一個呼入電話的路由查詢。通過 show dialplan 命令可以查看到當前freeswitch可以支持的哪些 dialplan.

常用的 dialplan 有 XML、LUA、inline等。

XML Dialplan 主要由一系列xml配置文件組成,格式如下:

 

[html]  view plain  copy
 
  1. <context name="mydialplan">  
  2.     <extension name="ext1">  
  3.         <condition field="xxx" expression="xxx">  
  4.              <action application="app" data="args"/>  
  5.         </condition>  
  6.     </extension>  
  7. </context>  


更詳細的配置可以參考 conf/dialplan/default.xml 文件。

 

其中配置文件中的 name 字段是可以重復存在的, freeswitch並沒有對該屬性做檢查,freeswitch 只在找到匹配的extension時,將其 action 記錄到執行隊列。注意:在dialplan的匹配過程中,並不會執行 action(帶有inline屬性的action除外,該類型的action會立即執行,一般用來設置一個變量值),需要等到dialplan結束時,才會進入執行階段!

對於dialplan解析何時結束,這是可控的。

1、在extension 后面可以添加 continue 屬性

       continue = "true" :表示不管該extension中是否有condition匹配,都繼續執行dialplan

       continue = "false":表示如果該extension中有匹配的condition,那么就停止了dialplan。false是默認值

2、在condition 后面可以添加 break 屬性,break可以是下面幾個值

       "on-false"  :表示在第一次匹配失敗時停止(但繼續處理其他的extension),這是默認配置

       "on-true"    :表示在第一次匹配成功時停止,不成功則繼續路由該condition后面的其他 condition

       "always"    :不管是否匹配都停止該 extension 中的 condition 路由

       "never"       :不管是否匹配都繼續該 extension 中的 condition 路由

默認情況下,在沒有任何 continue、break屬性的時候,在找到 匹配后,就會結束dialplan.

從上面兩點可以看出,continue是用來限制是否繼續下一個 extension; break 是用來限制是否繼續下一個 condition

有點特殊地方就是 break="on-false"的時候,如果該 conditon 沒有被匹配,則結束后面的 condition, 然后跳到下一個 extension。看似 break 影響了 extension 的流程,其實這樣是可以理解的,因為 break="on-false" 表示沒有匹配到就退出,此時該extension 的最新匹配狀態被標示為不匹配,如果extension沒有被匹配,則默認會進入下一個extension.

這里的extension最新狀態特別說明一下,如下例子:

 

[html]  view plain  copy
 
  1.  <extension name="test_dialplan">  
  2.    <condition field="destination_number" expression="7777" break="never">  
  3.   <action application="info"/>  
  4. </condition>  
  5.    <condition field="destination_number" expression="8888" break="on-false">  
  6.   <action application="info"/>  
  7. </condition>  
  8. <condition field="destination_number" expression="9999">  
  9.   <action application="info"/>  
  10. </condition>  
  11.  </extension>  


當我們撥打 7777 時,第一個 condition 被匹配,但是 break='never" 則會繼續下一個 condition,此時extension被標示為匹配狀態。路由到第二個 condition時,發現不匹配,同時 break="on-false" 所以應該停止后面的 condition,結束該 extension, 並且將 extension 的匹配狀態標示為不匹配,extension的匹配狀態決定了是否進行下一個extension.

 

可以看出,extension 的 匹配狀態是最后一個 condition 的匹配狀態!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM