我想找出一个聪明的方法来延迟200 ok的sip握手,直到"请输入您的电话卡代码"之后,我的voip系统将传输到传入呼叫。
有什么想法吗?我必须承认,我现在只是从概念上看待这个问题,有点幼稚……
提前感谢!
至少如果你计划支持标准的SIP设备,你将无法做到。
您可以将早期媒体发送到设备,例如您的"请输入.."音频,带有183会话进度响应,但我看不出这有多大用处,因为SIP呼叫设备不会向服务器发送任何DTMF音调,直到呼叫被应答,这需要200 Ok响应。
尽管如此,我怀疑你可能看错了东西。来自Asterisk的200 Ok用于调用者和Asterisk服务器之间的呼叫,以获取DTMF音调并确定下一个呼叫分支是否被授权。只有在电话卡代码被接受后,下一个呼叫段才开始。听起来您的问题是用户注意到可计费通话时间包括他们输入电话卡密码所花费的时间。摆弄200ok响应并不是解决这个问题的方法。尝试让Asterisk为第二个呼叫段生成一个新的CDR将是一个更好的方法。被叫方:
[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:即使行不在上,也读取数字。
然而,正如我所说,这将只在理论上工作。