[英]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.