VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Asterisk 13 - не работает attended transfer

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Htwor
Сообщения: 51
Зарегистрирован: 23 дек 2015, 13:13

Asterisk 13 - не работает attended transfer

Сообщение Htwor »

Пришлось обновить Asterisk до версии 13 ради ARI. После обновления частично перестал работать attended transfer. А именно: у секретаря работает, а у менеджеров - нет. При нажатии комбинации клавиш слишим "Transfer" (то-есть, успешно входим в режим трансфера), а при последующем наборе внутреннего номера слышим "not valid extension". Такое впечатление, что это связано то ли с контекстом, то ли с путём поступления входящего звонка, который мы пытаемся перевести. Дело в том, что секретарь получает звонки напрямую, командой Dial. А менеджеры цепочкой команд Local/${EXTEN}@context и Queue. То-есть менеджеры вызываются через очередь. В логах никаких ошибок не появляется (verbose=5 установлено), full-лог тоже ошибок не показывает. Странно ещё вот что: менеджер успешно переводит звонок средствами телефона (по кнопке tranfer на телефоне). То-есть с контекстом всё в порядке.
Неужели глюк трансфера в 13-ю версию закрался?

Ниже привожу конфигурационные файлы. Переключать входящие средствами астериска может только абонент 660, остальные не могут.

===============SIP.CONF================
[general]
context=public
allowoverlap=no
udpbindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
transport=udp
srvlookup=yes
callcounter=yes
allowsubscribe=yes
limitonpeers=yes

register => 9999999:password@11.22.33.44/9999999
register => 5555555:password@11.22.33.44/5555555
register => 6666666:password@11.22.33.44/6666666
register => 2222222:password@11.22.33.44/2222222

register => 0965555555:password@10.1.1.6/0965555555
register => 0735555555:password@10.1.1.6/0735555555

[authentication]

[local-emarket](!)
context=local-emarket
type=friend
directmedia=yes
disallow=all
allow=alaw,ulaw
pickupgroup=6
callgroup=6
subscribecontext=BLF-emarket
notifyringing=yes
notifyhold=yes
notifycid = yes

[sitel-emarket](!)
type=friend
host=11.22.33.44
insecure=invite,port
directmedia=no
qualify=yes
context=incoming-emarket
disallow=all
allow=alaw,ulaw
fromdomain=13.13.13.13

[voipgsm-emarket](!)
type=friend
host=10.1.1.6
insecure=invite,port
directmedia=no
qualify=yes
context=incoming-emarket
disallow=all
allow=alaw,ulaw
fromdomain=10.1.1.120
secret=password

[660](local-emarket)
host=dynamic
secret=password
qualify=yes
[661](local-emarket)
host=10.1.1.161
defaultip=10.1.1.161
[662](local-emarket)
host=10.1.1.162
defaultip=10.1.1.162
[663](local-emarket)
host=10.1.1.163
defaultip=10.1.1.163
[664](local-emarket)
host=10.1.1.164
defaultip=10.1.1.164
[665](local-emarket)
host=10.1.1.165
defaultip=10.1.1.165
[666](local-emarket)
host=10.1.1.166
defaultip=10.1.1.166
[0965555555](voipgsm-emarket)
defaultuser=0965555555
fromuser=0965555555
[0735555555](voipgsm-emarket)
defaultuser=0735555555
fromuser=0735555555
[9999999](sitel-emarket)
defaultuser=9999999
fromuser=9999999
secret=password
[5555555](sitel-emarket)
defaultuser=5555555
fromuser=5555555
secret=password
[6666666](sitel-emarket)
defaultuser=6666666
fromuser=6666666
secret=password
[2222222](sitel-emarket)
defaultuser=2222222
fromuser=2222222
secret=password

===========EXTENSIONS.CONF=============
[internal-emarket]
exten => _6xx,1,Dial(Sip/${EXTEN},,tT)
same => n,Hangup
exten => h,1,ExecIf($[${REGEX("^SIP/6" ${CDR(dstchannel)})}]?System(some_script))

[local-emarket]
exten => _6xx,1,Goto(internal-emarket,${EXTEN},1)
exten => _1xx,1,Dial(Sip/5555555/${EXTEN})
same => n,Hangup
exten => _[2-58]xxxxxx,1,Dial(Sip/5555555/${EXTEN})
same => n,Hangup
exten => _0ZXXXXXXXX,1,ExecIf($[${REGEX("^067|^068|^096|^097|^098" ${EXTEN})} & $[${DEVICE_STATE(Sip/0965555555)} = NOT_INUSE]]?Dial(Sip/0965555555/${EXTEN}):Dial(Sip/5555555/${EXTEN}))
same => n,Hangup
exten => h,1,ExecIf($[${DIALSTATUS} = ANSWER]?System(some_script))
same => n,ExecIf($[${DIALSTATUS} != ANSWER]?System(some_script))

[BLF-emarket]
exten => _6xx,hint,SIP/${EXTEN}

[webmanagers]
exten => _XXXXXX.,1,ExecIf(${secFree}?Wait(4))
same => n,Queue(webmanagers)
same => n,Hangup
exten => _6xx,1,Dial(Sip/${EXTEN},,tT)
same => n,Hangup
exten => h,1,GotoIf($[${CDR(disposition)} != ANSWERED]?3)
same => 2,ExecIf($[${REGEX("^SIP/6" ${CDR(dstchannel)})}]?System(some_script))
same => 3,NoOp()

[incoming-emarket]
exten => _XXXXXX.,1,Answer()
same => n,System(some_script)
same => n,ExecIf($[${DEVICE_STATE(Sip/660)} = NOT_INUSE]?Set(_secFree=1):Set(_secFree=0))
same => n,Set(_dialed=${CDR(dst)})
same => n,Dial(Sip/660&Local/${EXTEN}@webmanagers,,mtT)
same => n,Hangup
exten => _6xx,1,Dial(Sip/${EXTEN},,tT)
same => n,Hangup
exten => h,1,GotoIf($[${CDR(disposition)} != ANSWERED]?3)
same => 2,ExecIf($[${REGEX("^SIP/6" ${CDR(dstchannel)})}]?System(some_script))
same => 3,NoOp()

=============QUEUES.CONF==============
[general]

[webmanagers]
context=webmanagers
strategy = ringall
timeout = 60
autofill = yes
joinempty = yes
ringinuse = no
member => SIP/660
member => SIP/661
member => SIP/662
member => SIP/663
member => SIP/664
member => SIP/665
member => SIP/666
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk 13 - не работает attended transfer

Сообщение ded »

Пожалуйста, смотрите в консоль, когда делаете трансфер. Там будет понятней, почему "not valid extension".
Ваше сообщение В логах никаких ошибок не появляется неинформативно. В логе появляется как минимум Playback invalid "not valid extension"
и видно что вызывается и в каком контексте.
Этот контекст можно рассмотреть отдельно
dialplan show имя_контекста

Это будет продуктивно.
Htwor
Сообщения: 51
Зарегистрирован: 23 дек 2015, 13:13

Re: Asterisk 13 - не работает attended transfer

Сообщение Htwor »

Видимо у меня есть пробел в знании Asterisk, потому что я чесное слово не видел вообще никакой реакции в логах в момент нажатия комбинации трансфера и номера абонента. Ни Playback, ничего вообще! Verbose выставлен в 5. Только когда включал дебаг командой sip set debug on, были видны подробнейшие события нажатий кнопок и никаких ошибок! Все события, связанные с выполнением звонков, а также с _успешным_ выполнением трансфера, отображаются в CLI очень подробно. Может я не туда смотрю? Подскажите, пожалуйста, куда смотреть, чтобы увидеть ошибки попыток трансфера средствами астериска (речь идёт о фиче atxfer, которая указывается в features.conf).
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk 13 - не работает attended transfer

Сообщение ded »

1) трансфер средствами астериска делается посылкой DTMF сервисного кода, так?
Чтобы увидеть посылку кода - включите логиррование dtmf (Google => как включить дебаг dtmf)
Если Вы вообще ничего не увидите, то вероятно ваш телефон не посылает сигналы DTMF, он может быть вообще в пульсовом режиме.

2) *CLI> features show
покажет какие феатуры имеются по дефолту и текущие (Current)
Htwor
Сообщения: 51
Зарегистрирован: 23 дек 2015, 13:13

Re: Asterisk 13 - не работает attended transfer

Сообщение Htwor »

1) трансфер делается посылкой DTMF кода. Но я выше писал, что астериск распознает DTMF код без проблем (в трубке слышим женский голос, говорящий "Transfer"). Дальше астериск ожидает набор номера, на который нужно трасферить. При нажатии первой же цифры слышим в трубке "Not valid extension".
2) по поводу фичей, имеющихся по дефолту, тоже всё в порядке, ибо трансфер с секретарского номера этим же DTMF-кодом выполняется нормально. Разница между секретарским телефоном и остальными только в способе поступления входящего звонка (который мы пытаемся трансферить). Первый идёт напрямую командой Dial, а второй - через очереди, командой Queue. Тем более, что с идентичными конфигами asterisk 11 работал нормально.
FBSDServer*CLI> features show
Builtin Feature Default Current
--------------- ------- -------
Pickup *8 *
Blind Transfer #
Attended Transfer #
One Touch Monitor
Disconnect Call * *
Park Call
One Touch MixMonitor

Dynamic Feature Default Current
--------------- ------- -------
(none)

Feature Groups:
---------------
(none)
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk 13 - не работает attended transfer

Сообщение ded »

Что я увидел:

Код: Выделить всё

FBSDServer*CLI> features show
Builtin Feature    Default Current
--------------- -       ------    -------
Pickup                *8        *
Blind Transfer       #
Attended Transfer #
One Touch Monitor
Disconnect Call     *        *
Park Call
One Touch MixMonitor
Дефолтные комбинации для Blind Transfer и Attended Transfer - почему одинаковые?
Текущих - Current, вообще нету. :(
Разве у вас в 11-м так же?

Смотрите в CLI при трансфере, будет видно что и как. Должно быть видно что происходит после голоса Transfer
postscripter писал(а):Слепой перевод выполняется в контексте peer, а с уведомлением - в контексте self.
И ни в одном гребаном мануале про это ни слова.
http://forum.asterisk.ru/posting.php?mo ... =3&p=63940
Аватара пользователя
postscripter
Сообщения: 93
Зарегистрирован: 16 сен 2015, 15:24

Re: Asterisk 13 - не работает attended transfer

Сообщение postscripter »

слышим в трубке "Not valid extension"
Так случается, если определить переменную TRANSFER_CONTEXT = blabla и забыть создать этот самый blabla, или оставить его пустым.
помучился сам - дай помучиться другим
Htwor
Сообщения: 51
Зарегистрирован: 23 дек 2015, 13:13

Re: Asterisk 13 - не работает attended transfer

Сообщение Htwor »

Переменная TRANSFER_CONTEXT нигде в конфигурационных файлах не указана. Значит мне её указать в диалплане?
Аватара пользователя
postscripter
Сообщения: 93
Зарегистрирован: 16 сен 2015, 15:24

Re: Asterisk 13 - не работает attended transfer

Сообщение postscripter »

Можно указать, для отладки, или насовсем. Тогда после фразы Transfer вводимый номер пойдёт в указанный контекст:

http://forum.asterisk.ru/viewtopic.php? ... =20#p63954
помучился сам - дай помучиться другим
Htwor
Сообщения: 51
Зарегистрирован: 23 дек 2015, 13:13

Re: Asterisk 13 - не работает attended transfer

Сообщение Htwor »

Фух! Разобрался. Оказывается всего-то навсего нужно было разрешить трансфер в команде Queue!
same => n,Queue(webmanagers,tT)
- вот так работает!

Но теперь другая проблема: после того как сделан трансфер, и трубку на том конце никто не взял (по-умолчанию 15 секунд), звонок вроде возвращается (как и должно быть), но звонит всего секунду, может меньше, и сразу переходит в фазу ожидания: звонивший клиент слышит фоновую музыку, а я даже не успеваю взять трубку - мой телефон уже молчит. Затем следует вторая попытка дозвона до конечного абонента (клиент слышит гудки). И когда она не удалась (снова никто не взял трубку), тогда звонок возвращается уже нормально.
Никто не сталкивался?
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH