我试图想出一个聪明的方法来延迟200秒的啜饮,直到"请输入您的电话卡代码"我的voip系统将传输到来电..
对此的任何想法......我必须承认,我在这一点上从概念上看这个并且有点幼稚......
提前致谢!
答案 0 :(得分:0)
至少如果您计划支持标准SIP设备,则无法实现。
您可以通过183会话进度响应将早期媒体发送到某个设备,例如“请输入...”音频,但由于SIP呼叫设备不会发送任何DTMF,因此我看不到它有多大用处拨打服务器直到通话响应,这需要200 Ok响应。
尽管我怀疑你可能会看错了。来自Asterisk的200 Ok用于呼叫者和Asterisk服务器之间的呼叫,以获得DTMF音调并确定下一个呼叫支路是否被授权。只有在接受了电话卡代码后,才会启动下一个呼叫支路。听起来您的问题是用户注意到可计费通话时间包括他们输入电话卡PIN的时间。摆弄200 Ok响应不是解决这个问题的方法。试图让Asterisk为第二个呼叫线路生成新的CDR将是一种更好的方法。
答案 1 :(得分:0)
对于被叫方:
[main_content]
exten => _X.,1,Dial(SIP/${NUM}@provider,,M(dialout-macro))
[macro-dialout-macro]
exten => s,1,Noop(here you should add detect of "please enter")
exten => s,n,Noop(some other commands go)
exten => s,n,MacroExit;we are ready to connect call.
对于主叫方 - 在回答之前,您需要所有提供商支持早期媒体和dtmf。它是支持早期媒体的有力的提供者,是的。但我不知道任何支持dtmf的系统在回答之前,抱歉。
拨号方案将是这样的
exten => _x.,1,Read(variable,filename,10,n,3)
注意:在该命令之前不应该回答,应该使用选项n
n:即使线路未启动也要读取数字。
然而正如我所说,这只会在理论上有效。