Добрый день. Стоит 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
Задан: 2019-06-20 15:35:01 +0400
Просмотрен: 1,215 раз
Обновлен: Sep 15 '19
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
и где лог/дебаг?
Out ( 2019-06-20 15:44:37 +0400 )редактироватьЗато asterisk новее. Классно же.
zzuz ( 2019-06-20 17:17:54 +0400 )редактироватьДобавил лог звонка, Переделал на from-internal-custom - звонки заработали между внутренними, завтра утром проверим будет ли передаваться аон. Хотелось бы узнать почему в текущем контексте перестало работать после обновления
cooller51190 ( 2019-06-21 00:00:28 +0400 )редактироватьАОН не передается при переводе через *2
cooller51190 ( 2019-06-21 11:47:35 +0400 )редактироватьпометьте мой ответ правильным. ну и гуглите насчет *2 __TRANSFER_CONTEXT до прояснения)
Zavr2008 ( 2019-06-21 12:43:58 +0400 )редактироватьЕсли сейчас реализовать всё как в шапке, то перестает работать фолов ме, но работает передача аона
cooller51190 ( 2019-06-21 16:53:41 +0400 )редактироватьа from-trunk сам зачем трогаем? так тоже делать нельзя.
Zavr2008 ( 2019-06-21 19:29:48 +0400 )редактироватьfrom-trunk для записи в переменную,
cooller51190 ( 2019-06-24 22:50:48 +0400 )редактироватьКто знает? Как решить данную проблему?
cooller51190 ( 2019-06-25 11:40:48 +0400 )редактироватьКонечно знаем. Идёте в технический отдел к системному администратору. Даете ему печенек и просите посмотреть логи. Он быстро находит проблему выполнения диалплана , гуглит и говорит , что поправить. Опережая ваше замечание о наличии лога в вашем запросе замечу , что ваш лог не соответствует представленному диалплану . Прочтите лог и диалплан построчно и станет понятно.
zzuz ( 2019-06-25 14:30:59 +0400 )редактироватьПро несоответствие лога знаю, его убрал... Если необходимо могу текущий снять и выложить. Так же знаю, что в контексте перехода на фолов ми у меня нигде нет, но как поправить увы в гугле не нашел. Если кто знает правильный путь, а не торканье носом в ошибки, буду очень благодарен. И вот почему без exten => _[1-5]XX,n,Dial(SIP/${EXTEN},,tT) - в новой версии системы звонки по внутренним номерам не работают, но звонки с города работают корректно, кроме переводов по внутренним - это вот основной вопрос. Так как данный контекст в старых версиях работал великолепно.
cooller51190 ( 2019-06-26 12:23:53 +0400 )редактироватьЛог обновлен и соответствует представленному диалпдану. Прошу помощи в решение проблемы. Звонок сейчас идёт с 101 на 336 и должен уходить на мобильный по Follow ME
cooller51190 ( 2019-06-26 12:52:15 +0400 )редактироватьЕсли вместо exten => _[1-5]XX,n,Dial(SIP/${EXTEN},,tT) поставить exten => _[1-5]XX,n,Goto(from-internal-additional,${EXTEN},1) - то звонки работают, FollowME работает, а вот передача аона нет
cooller51190 ( 2019-06-26 12:58:38 +0400 )редактироватьВо-первых, нет на вашем сервере такого слова , как "аон" , есть слово "callerid" - номер звонящего. Во-вторых , Вы сами делаете Dial(SIP/${EXTEN},,tT) , что и отображается в логе. В-третьих, если нужно настроить работу followme , то и логи нужно смотреть выполнения вызова при followme.
zzuz ( 2019-06-26 14:59:20 +0400 )редактироватьРешил вопрос удалением строки exten => _[1-5]XX,n,Dial(SIP/${EXTEN},,tT) и добавлением exten => _[1-5]XX,n,Goto(from-internal-additional,${EXTEN},1),$(CID). На телефонах заработало, но если подключаем 1С Рарус Софтфон, все перестаёт работать, кто знает как он может влиять? Номер передается только после снятия трубки в софтфон, а необходимо сразу.
cooller51190 ( 2019-06-26 15:22:07 +0400 )редактировать