如何播放完整提示并在后端执行CURL请求?

时间:2018-01-02 07:27:40

标签: asterisk dialplan

我想要构建的调用流程:

  1. 播放欢迎提示(5秒)
  2. 根据callerId编号
  3. 对API执行CURL请求
  4. 根据步骤2的响应,播放另一个提示或挂断电话
  5. 问题

    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. -do其余的事情 -
    5. 但是这个调用流程中的问题是包装器必须将请求/响应对保留在内存中,如果在步骤2中调用丢失等,则必须进行大量的内容保存。

      问题

      所以在拨号方案中有一种方法可以同时播放提示和做一个卷曲请求。

      PS:使用astersik 13.18.3

1 个答案:

答案 0 :(得分:0)

可以推荐你读书,例如ORelly" Asterisk电话的未来"

可能的解决方案:

1)使用拨号和本地频道,并使用' m'举行音乐的param。在您拨打卷曲的本地环境中

2)使用AGI和" SET MUSIC ON / OFF"

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

4)使用Background app。

顺便说一下,如果在调用curl请求时调用drop,你会得到不可预知的结果。你自己关心(交易,确认等)