Asterisk 服务器 - 无法连续拨打外拨电话

Asterisk 服务器 - 无法连续拨打外拨电话

我现在遇到的一个问题是,如果我连续多次呼叫星号服务器使用同一部手机,可能会断开连接。Asterisk 会记录以下消息:

[Aug 14 10:24:56] NOTICE[20537]: chan_sip.c:19477 handle_request_invite: Failed to authenticate device <sip:[email protected]:5070>;tag=781ab8fb-co19342-INS016

就像世界上任何一部电话只能拨打一次 Aterisk 服务器。然后我需要做一个

> sip reload

从 Asterisk 终端让他们再次呼入。

我也可以像这样执行 shell 命令来重新加载 sip

星号-rx‘sip重新加载’

但是当我将此命令添加到 crontab 中每分钟运行一次时,它不起作用。只有我手动运行它,shell 命令才有效。

有人能告诉我如何让呼叫者多次呼叫我的星号服务器吗?这是我的 sip.conf 和 extensions.conf(所有其他文件均未动)。

配置文件

[general]
register => mysipuser:mysippass@localhost:5071
context=default

[mysipuser]
type=friend
secret=mysippass
username=mysipuser
host=111.111.111.111
port=5071
fromuser=mysipuser
canreinvite=no
insecure=very
qualify=2000
dtmfmode=inband
nat=no
context=default

扩展配置文件

[default]
exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,Playback(vm-extension)
exten => s,n,WaitExten()

exten => 0011,1,Goto(outbound,s,1)

exten => 11,1,Dial(SIP/mysipuser/5555555555) ;calls 555-555-5555
exten => 11,n,Hangup ; this line never gets executed

exten => 77,1,Dial(SIP/mysipuser/1111111111) ;calls 111-111-1111
exten => 77,n,Hangup ; this line never gets executed


[outbound]
exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,Playback(vm-extension)
exten => s,n,WaitExten()

exten => _NXXNXXNXXX,1,Dial(SIP/mysipuser/${EXTEN})
exten => _NXXNXXNXXX,n,Hangup

额外细节 我注意到,每次我在 extensions.conf 中执行 Dial() 命令时,即使双方都挂断电话,它后面的任何一行都不会被触发。例如:

exten => 11,1,Dial(SIP/mysipuser/5555555555)
exten => 11,n,System(echo 'hello world'>test.txt) ; this line and any line below do not fire
exten => 11,n,Hangup

代码在 Dial() 命令之后停止执行...这也许可以解释为什么我不能连续呼叫...是因为线路仍然处于活动状态?

答案1

这是我的新 extensions.conf,它似乎已经解决了这个问题

[default]
exten => s,1,System(asterisk -rx 'sip reload') ; hack to force sip reload
exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,Playback(vm-extension)
exten => s,n,WaitExten()

exten => 0011,1,Goto(outbound,s,1)

exten => 11,1,Dial(SIP/mysipuser/5555555555,30,g) ;calls 555-555-5555
exten => 11,n,Goto(closechannel,s,1)

exten => 77,1,Dial(SIP/mysipuser/1111111111,30,g) ;calls 111-111-1111
exten => 77,n,Goto(closechannel,s,1)


[outbound]
exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,Playback(vm-extension)
exten => s,n,WaitExten()

exten => _NXXNXXNXXX,1,Dial(SIP/mysipuser/${EXTEN})
exten => _NXXNXXNXXX,n,Hangup

[closechannel]
exten => s,1,System(asterisk -rx 'sip reload')
exten => s,n,Hangup()

因此,我所做的三项更改是添加了语句exten => s,1,System(asterisk -rx 'sip reload')[closechannel]上下文和,30,gDial() 命令。每次有人尝试呼叫时,System 命令都会强制重新加载 sip。该,g标志告诉 asterisk 在呼叫方断开连接后继续执行代码。

这似乎在“大多数”时候都有效。

相关内容