星号/ SIP - 在输入电话卡之前延迟200 OK

时间:2016-11-15 20:11:42

标签: asterisk sip

我试图想出一个聪明的方法来延迟200秒的啜饮,直到"请输入您的电话卡代码"我的voip系统将传输到来电..

对此的任何想法......我必须承认,我在这一点上从概念上看这个并且有点幼稚......

提前致谢!

2 个答案:

答案 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:即使线路未启动也要读取数字。

然而正如我所说,这只会在理论上有效。