簡體   English   中英

星號擴展,條件執行?

[英]Asterisk extension, conditional execution?

我在文件 /etc/asterisk/extensions_custom.conf 中有一個擴展名:

    exten => _XXXX,1,NoOp("-- from internal custom --")
    exten => _XXXX,n,Set(CURL_RESULT=${CURL(https://your.domain.com/sip_webhook?callid=${EXTEN}&sourceid=${CALLERID(num)})})
    exten => _XXXX,n,Wait(3)
    exten => _XXXX,n,Dial(PJSIP/${EXTEN},60)
    exten => _XXXX,n,Hangup() 

第二行向我服務器中的 webhook 發送請求並將響應存儲在 CURL_RESULT

我只想在CURL_RESULT成功的情況下執行Dial有沒有辦法實現擴展的條件執行? 就像是:

if(CURL_RESULT=="OK")
exten => _XXXX,n,Dial(PJSIP/${EXTEN},60)
else
exten => _XXXX,n,Hangup()

是的,正如 arheops 所指出的,這實際上是撥號方案中一個常見的內置概念:條件執行和條件分支。

有很多方法可以做到這一點 - 給你一些想法:

#1:如果為真則條件執行

exten => _XXXX,1,ExecIf($["${CURL_RESULT}" = "OK" ]?Dial(PJSIP/${EXTEN},60))
   same => n,Hangup()

#2:如果為假,則條件分支

exten => _XXXX,1,ExecIf($["${CURL_RESULT}" != "OK" ]?exit)
   same => n,Dial(PJSIP/${EXTEN},60)
   same => n(exit),Hangup()

#3:如果真/假,條件分支:

exten => _XXXX,1,ExecIf($["${CURL_RESULT}" = "OK" ]?dial:exit)
   same => n(dial),Dial(PJSIP/${EXTEN},60)
   same => n(exit),Hangup()

在這種情況下,最后一個示例沒有添加任何內容,但提供真假 label 通常很有用。

如果你想在 Asterisk 中創建一個真正的 If/Else 應用程序,它的工作方式類似於傳統編程語言,你可以使用 If 模塊: https://github.com/InterLinked1/phreakscript/blob/master/apps/app_if.c

它目前不包含在主線 Asterisk 中,因此您需要將其放入源代碼中,編譯並重新安裝。

有了它,您可以執行以下操作:

   same => n,If($["${CURL_RESULT}" = "OK" ])
       same => n,Dial(PJSIP/${EXTEN},60)
       same => n,NoOp(${DIALSTATUS})
   same => n,Else()
       same => n,Playback(goodbye) ; do something else
   same => n,EndIf()
   same => n,Hangup() ; something after both

在特定情況下,每種類型的條件語法往往比其他一些類型的條件語法稍好一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM