You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asterisk拨号计划如何根据CURL返回结果实现条件执行?

Asterisk拨号计划条件执行实现方案

Asterisk拨号规则原生没有类编程语言的if/else代码块,通过内置的GotoIf()条件跳转应用即可实现你要的分支判断逻辑,修改后的完整可用配置如下:

exten => _XXXX,1,NoOp("-- from internal custom --")
same => n,Set(CURL_RESULT=${CURL(https://your.domain.com/sip_webhook?callid=${EXTEN}&sourceid=${CALLERID(num)})})
same => n,Wait(3)
; 校验CURL返回值,返回OK则走呼叫逻辑,否则直接挂断
same => n,GotoIf($["${CURL_RESULT}"="OK"]?do_dial:do_hangup)
same => n(do_dial),Dial(PJSIP/${EXTEN},60)
same => n(do_hangup),Hangup()

配置说明

  • 这里使用same => n是Asterisk拨号计划的标准简写,等价于重复写exten => _XXXX,n,可以简化配置写法
  • GotoIf()的语法为GotoIf(判断表达式?匹配成功跳转标签:匹配失败跳转标签),如果跳转目标是当前分机规则下的标签,可以直接写标签名,不需要写完整的上下文、分机、优先级路径
  • 判断表达式中给${CURL_RESULT}包裹双引号是必要写法,可以避免接口返回空值、特殊字符时导致拨号规则解析报错
  • 上述逻辑中,Dial指令执行完成后会自动顺序执行下一行的Hangup动作,不管呼叫是否接通、对方是否挂断,都能正常收尾,不存在逻辑漏洞

常见兼容优化

大部分webhook接口返回值可能携带首尾空格、换行符等不可见字符,容易导致字符串匹配失败,可以在条件判断前增加一行变量修剪逻辑,提前清理无效字符:

; 去除CURL返回值首尾的空格、换行、制表符
same => n,Set(CURL_RESULT=${TRIM(${CURL_RESULT})})

把这行加在Wait(3)和GotoIf行之间即可。

内容的提问来源于stack exchange,提问作者Andres Sosa Martinez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:48:25