0

我要构建的调用流:

  1. 播放欢迎提示(5 秒)
  2. 根据 callerId 号码向 API 发出 CURL 请求
  3. 根据步骤 2 的响应,播放另一个提示或挂断电话

问题

Curl 请求可能需要长达 3 秒的延迟,我想播放提示并想同时进行 CURL 请求,我尝试过 MOH,但 MOH 的问题是它在收到 CURL 响应时停止播放提示。实际调用流程是:

exten => 1002,1,Progress()
exten => 1002,n,StartMusicOnHold(T1)
exten => 1002,n,Set(CURL_RESULT=${CURL(http://192.168.0.38/test.php?aparty=${CALLERID(num)})})
exten => 1002,n,NoOp(isSubscriber:${CURL_RESULT})
exten => 1002,n,GotoIf($["${CURL_RESULT}"!="0"]?lbl_call_hangup:)
exten => 1002,n,StopMusicOnHold(T1)
exten => 1002,n,Playback(welcome)
exten => 1002,n,Read(DTMF,,0,n,1,10)
exten => 1002,n,Hangup

我想要的是播放完整的提示,并在播放提示时,在后端执行 curl 请求。我们尝试了另一种解决方案,即为此 API 调用编写一个包装器,该调用立即返回,另一个 API 调用来获取结果。

这是我们构建的:

  1. 对立即返回的包装器执行 CURL 请求
  2. 播放欢迎提示
  3. 执行 CURL 请求以获取在步骤 1 中完成的初始请求的响应
  4. -做剩下的事情-

但是这个调用流程中的问题是,包装器必须将请求/响应对保存在内存中,必须做大量的内务处理,以防在步骤 2 期间调用中断等。

问题

那么在拨号方案中有没有一种方法可以同时实现提示的播放和卷曲请求。

PS:使用astersik 13.18.3

4

1 回答 1

0

可以推荐您阅读书籍,例如 ORelly 的“Asterisk the future of telephony”

可能的解决方案:

1) 使用带有“m”参数的拨号和本地频道来保持音乐。在您拨打的本地上下文中做 curl

2)使用AGI和“设置音乐开/关”

3) 在后台线程中使用 curl。

4)使用后台应用程序。

顺便说一句,如果在执行 curl 请求时呼叫中断,您会得到不可预测的结果。你自己关心那个(交易,确认等)

于 2018-01-02T13:39:09.353 回答