Пришлось обновить 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