我有一部IP电话,这似乎是所有的标准SIP,但是当您拿起接收器时,它将向服务器发送“ MESSAGE”。
如果接收到“ 200 OK”,它将继续正常工作,并使用有效的SIP进行显示,但是,如果接收到错误(Asterisk最终会产生该错误,因为它不是一个有效的序列,则使其响应) “ 406不可接受”),它根本无法工作。
是否可以通过某种方式更改Asterisk以针对特定用户为“ MESSAGE”响应“ 200 OK”,而无需从源中重建Asterisk本身,也无需在两者之间添加任何类型的代理?
答案 0 :(得分:1)
我可以建议以下选项
1)尝试设置消息的上下文 sip.conf
accept_outofcall_message = yes
outofcall_message_context = messages
auth_message_requests = no
extensions.conf
[messages]
exten => _XXX,1,Hangup
2)在星号之前将kamailio设置为代理,在kamailio上创建消息循环,在kamailio上注册设备。
答案 1 :(得分:0)
虽然@arheops的回复没有用,但这肯定有助于指出正确的方向。
电话发送的MESSAGE
几乎没有任何内容,甚至没有Content-Type。
<--- SIP read from UDP:<Phone External IP>:5060 --->
MESSAGE sip:1014@<Server Internal IP>:5060;user=phone SIP/2.0
Via: SIP/2.0/UDP <Phone Internal IP>:5060;branch=z9hG4bK2621781087c1096064fa949
From: "1014" <sip:1014@<Server Internal IP>:5060;user=phone>;tag=2621781087c1096064fa949;fjline-hunt=ML-141
To: <sip:1014@<Server Internal IP>:5060;user=phone>
CSeq: 1 MESSAGE
Call-ID: 00062621781087c1096064fa94900@<Phone Internal IP>
Content-Length: 0
Max-Forwards: 70
User-Agent: Fujitsu SS-170A/B/C V02L001C06
<------------->
--- (9 headers 0 lines) ---
最后我发现了这个问题:Asterisk incoming message gives: 415 unsupported media type
其中指出,没有内容类型的文本/纯文本,Asterisk会立即拒绝消息。
当然,正确的方法是确实克隆Asterisk并从源代码重建它,但是考虑到时间限制(和惰性),我只是使用Hopper在“ text / plain”之后找到字符串文字的偏移量,并且使它以200 OK
(末尾的空格)作为响应。
现在我可以轻松地通过此电话呼叫任何人!
但是,来电不起作用:它以OK响应通知,但不执行任何操作,Asterisk将呼叫重定向到语音邮件。
我也无法检查语音邮件,因为它不会在带内或带外发送DTMF。
长话短说:不要仅仅因为价格便宜,看起来很酷,卖方特定的协议就可以成为PITA,而不必在阴暗的二手电子产品销售中购买SIP电话。