Добрый день. Стоит FreePBX 14.0.5.25. Возникла необходимость реализовать передачу АОН звонящего абонента при переводе звонков между внутренними номерами. Данная функция была реализована ранее на FreePBX 12. После обновления до 14 версии данный код выдает отбой при любом звонке по внутренним номерам. Протокол используется Chan_SIP
[from-trunk]
exten => НОМЕР,1,Set(__CID=${CALLERID(number)})
[from-internal-custom]
exten => _[1-5]XX,1,ExecIf($[ ${LEN(${BLINDTRANSFER})} > 0 ]?Set(TRANSFERUSER=${BLINDTRANSFER}) )
exten => _[1-5]XX,n,ExecIf($[ ${LEN(${TRANSFERERNAME})} > 0 ]?Set(TRANSFERUSER=${TRANSFERERNAME}) )
exten => _[1-5]XX,n,ExecIf($[ ${LEN(${TRANSFERUSER})} > 0 ]?Set(TRANSFERUSER=${CUT(TRANSFERUSER,-,1)}) )
exten => _[1-5]XX,n,ExecIf($[ ${LEN(${TRANSFERUSER})} > 0 ]?Set(TRANSFERUSER=${CUT(TRANSFERUSER,\/,2)}) )
exten => _[1-5]XX,n,ExecIf($[ "foo${TRANSFERUSER}" = "foo" ]?Set(__CID=${CALLERID(number)}) )
exten => _[1-5]XX,n,ExecIf($[ ${LEN(${TRANSFERUSER})} > 0 ]?Set(CALLERID(number)=${CID}-${TRANSFERUSER}) )
exten => _[1-5]XX,n,ExecIf($[ "foo${TRANSFERUSER}" != "foo" ]?Set(CALLERID(name)=${CID}) )
exten => _[1-5]XX,n,Dial(SIP/${EXTEN},,tT)
Перевод звонка с ответом, не слепой перевод.
Ниже ЛОГ ЗВОНКА
-- Executing [h@from-internal:1] Macro("SIP/101-00000135", "hangupcall") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("SIP/101-00000135", "1?theend") in new stack
-- Goto (macro-hangupcall,s,3)
-- Executing [s@macro-hangupcall:3] ExecIf("SIP/101-00000135", "0?Set(CDR(recordingfile)=)") in new stack
-- Executing [s@macro-hangupcall:4] NoOp("SIP/101-00000135", " monior file= ") in new stack
-- Executing [s@macro-hangupcall:5] AGI("SIP/101-00000135", "attendedtransfer-rec-restart.php,,") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/attendedtransfer-rec-restart.php
-- <SIP/101-00000135>AGI Script attendedtransfer-rec-restart.php completed, returning 0
-- Executing [s@macro-hangupcall:6] Hangup("SIP/101-00000135", "") in new stack
== Spawn extension (macro-hangupcall, s, 6) exited non-zero on 'SIP/101-00000135' in macro 'hangupcall'
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/101-00000135'
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
> 0x7f6910085ed0 -- Strict RTP learning after remote address set to: 192.168.0.128:40044
-- Executing [336@from-internal:1] ExecIf("SIP/101-00000137", "0?Set(TRANSFERUSER=) ") in new stack
-- Executing [336@from-internal:2] ExecIf("SIP/101-00000137", "0?Set(TRANSFERUSER=) ") in new stack
-- Executing [336@from-internal:3] ExecIf("SIP/101-00000137", "0?Set(TRANSFERUSER=) ") in new stack
-- Executing [336@from-internal:4] ExecIf("SIP/101-00000137", "0?Set(TRANSFERUSER=) ") in new stack
-- Executing [336@from-internal:5] ExecIf("SIP/101-00000137", "1?Set(__CID=101) ") in new stack
-- Executing [336@from-internal:6] ExecIf("SIP/101-00000137", "0?Set(CALLERID(number)=101) ") in new stack
-- Executing [336@from-internal:7] ExecIf("SIP/101-00000137", "0?Set(CALLERID(name)=101) ") in new stack
-- Executing [336@from-internal:8] Dial("SIP/101-00000137", "SIP/336,,tT") in new stack
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called SIP/336
-- SIP/336-00000138 is ringing
-- SIP/336-00000138 is ringing
-- SIP/336-00000138 is ringing
-- Got SIP response 486 "Busy Here" back from 192.168.0.128:51892
-- SIP/336-00000138 is busy
== Everyone is busy/congested at this time (1:1/0/0)
-- Executing [336@from-internal:9] Answer("SIP/101-00000137", "") in new stack
-- Auto fallthrough, channel 'SIP/101-00000137' status is 'BUSY'
Во-первых у Вас скорее всего Asterisk 13, просто GUI FreePBX 14)
Во-вторых - зачем курочить прямо [from-internal] - это точка основная исходящей маршрутизации во FreePBX. Там есть from-internal-custom , его и курочить.
Также для таких случаев удобно пиры регать в свой кастом контекст, и из него уже когда надо - либо в from-trunk, либо в from-internal.
АОН не передается при переводе через *2
LTS версия - 13.* собственно она работает на большинстве production серверов в данный момент.
Если вам не надо какие-то фишки которых нет в 13.* - откатитесь на LTS
А вообще надо смотреть в сторону sendrpid/trustrpid.
Доработайте до себя https://awsswa.livejournal.com/35179.html
https://forum.asterisk.ru/viewtopic.php?f=4&t=10030
Задан: Jun 20 '19
Просмотрен: 1,245 раз
Обновлен: Sep 15 '19
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
и где лог/дебаг?
Out (Jun 20 '19)editЗато asterisk новее. Классно же.
zzuz (Jun 20 '19)editДобавил лог звонка, Переделал на from-internal-custom - звонки заработали между внутренними, завтра утром проверим будет ли передаваться аон. Хотелось бы узнать почему в текущем контексте перестало работать после обновления
cooller51190 (Jun 20 '19)editАОН не передается при переводе через *2
cooller51190 (Jun 21 '19)editпометьте мой ответ правильным. ну и гуглите насчет *2 __TRANSFER_CONTEXT до прояснения)
Zavr2008 (Jun 21 '19)editЕсли сейчас реализовать всё как в шапке, то перестает работать фолов ме, но работает передача аона
cooller51190 (Jun 21 '19)editа from-trunk сам зачем трогаем? так тоже делать нельзя.
Zavr2008 (Jun 21 '19)editfrom-trunk для записи в переменную,
cooller51190 (Jun 24 '19)editКто знает? Как решить данную проблему?
cooller51190 (Jun 25 '19)editКонечно знаем. Идёте в технический отдел к системному администратору. Даете ему печенек и просите посмотреть логи. Он быстро находит проблему выполнения диалплана , гуглит и говорит , что поправить. Опережая ваше замечание о наличии лога в вашем запросе замечу , что ваш лог не соответствует представленному диалплану . Прочтите лог и диалплан построчно и станет понятно.
zzuz (Jun 25 '19)editПро несоответствие лога знаю, его убрал... Если необходимо могу текущий снять и выложить. Так же знаю, что в контексте перехода на фолов ми у меня нигде нет, но как поправить увы в гугле не нашел. Если кто знает правильный путь, а не торканье носом в ошибки, буду очень благодарен. И вот почему без exten => _[1-5]XX,n,Dial(SIP/${EXTEN},,tT) - в новой версии системы звонки по внутренним номерам не работают, но звонки с города работают корректно, кроме переводов по внутренним - это вот основной вопрос. Так как данный контекст в старых версиях работал великолепно.
cooller51190 (Jun 26 '19)editЛог обновлен и соответствует представленному диалпдану. Прошу помощи в решение проблемы. Звонок сейчас идёт с 101 на 336 и должен уходить на мобильный по Follow ME
cooller51190 (Jun 26 '19)editЕсли вместо exten => _[1-5]XX,n,Dial(SIP/${EXTEN},,tT) поставить exten => _[1-5]XX,n,Goto(from-internal-additional,${EXTEN},1) - то звонки работают, FollowME работает, а вот передача аона нет
cooller51190 (Jun 26 '19)editВо-первых, нет на вашем сервере такого слова , как "аон" , есть слово "callerid" - номер звонящего. Во-вторых , Вы сами делаете Dial(SIP/${EXTEN},,tT) , что и отображается в логе. В-третьих, если нужно настроить работу followme , то и логи нужно смотреть выполнения вызова при followme.
zzuz (Jun 26 '19)editРешил вопрос удалением строки exten => _[1-5]XX,n,Dial(SIP/${EXTEN},,tT) и добавлением exten => _[1-5]XX,n,Goto(from-internal-additional,${EXTEN},1),$(CID). На телефонах заработало, но если подключаем 1С Рарус Софтфон, все перестаёт работать, кто знает как он может влиять? Номер передается только после снятия трубки в софтфон, а необходимо сразу.
cooller51190 (Jun 26 '19)edit