我想要构建的调用流程:
问题
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调用来获取结果。
这是我们建立的:
但是这个调用流程中的问题是包装器必须将请求/响应对保留在内存中,如果在步骤2中调用丢失等,则必须进行大量的内容保存。
问题
所以在拨号方案中有一种方法可以同时播放提示和做一个卷曲请求。
PS:使用astersik 13.18.3
答案 0 :(得分:0)
可以推荐你读书,例如ORelly" Asterisk电话的未来"
可能的解决方案:
1)使用拨号和本地频道,并使用' m'举行音乐的param。在您拨打卷曲的本地环境中
2)使用AGI和" SET MUSIC ON / OFF"
3)在后台线程中使用curl。
4)使用Background app。
顺便说一下,如果在调用curl请求时调用drop,你会得到不可预知的结果。你自己关心(交易,确认等)