Одна из проблем, с которыми я сейчас сталкиваюсь, заключается в том, что если я последовательно обращаюсь к серверу asterisk с того же телефона, он может отключиться. Asterisk регистрирует следующее сообщение:
[Aug 14 10:24:56] NOTICE[20537]: chan_sip.c:19477 handle_request_invite: Failed to authenticate device <sip:4165559999@222.222.222.222:5070>;tag=781ab8fb-co19342-INS016
Как будто любой телефон в мире может только один раз позвонить на сервер asterisk. Тогда мне нужно сделать
> sip reload
с терминала Asterisk, чтобы они снова позвонили.
Я также могу выполнить команду оболочки, чтобы перезагрузить sip
звездочка -rx 'sip reload'
Но когда я добавляю эту команду в crontab для запуска каждую минуту, она не работает. Команда оболочки работает, только если я запускаю ее вручную.
Может ли кто-нибудь сказать мне, как я могу разрешить вызывающим абонентам звонить на мой сервер asterisk более одного раза? Вот мои sip.conf и extensions.conf (все остальные файлы не затронуты).
sip.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
extension.conf
[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
дополнительные детали Я заметил, что каждый раз, когда я выполняю команду Dial () в файле extensions.conf, ни одна из строк после нее не запускается, даже если обе стороны вешают трубку. Так например:
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 () ... это может объяснить, почему я не могу звонить последовательно ... это потому, что линия все еще активна?
Это мой новый файл 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,g
к команде Dial (). Команда System вызывает перезагрузку sip каждый раз, когда кто-то пытается дозвониться. ,g
флаг сообщает asterisk продолжить выполнение кода после отключения вызывающих сторон.
Кажется, что это работает "в большинстве" случаев.