Есть Астериск 1.2, заменить его на свежий по ряду причин ну никак невозможно. Для пикапа звонков используется комбинация *8, завязанная на Application PickUp().
Вот диалплан:
[incoming]
exten => s,1,Set(TIMEOUT(digit)=5)
exten => s,n,Set(TIMEOUT(response)=10)
exten => s,n,Answer()
exten => s,n,Wait(2)
exten => s,n,Background(privetstvie)
exten => s,n,WaitExten(7)
exten => 0,1,GoTo(incoming,s,1)
exten => t,1,Dial(SIP/100,60,tT)
exten => _1XX,1,Dial(SIP/${EXTEN},60,tT)
exten => 1234567,1,GoTo(incoming,s,1)
[internal]
include => outgoing
exten => _*8X.,1,PickUp(${EXTEN:2}@incoming)
exten => _1XX,1,Dial(SIP/${EXTEN},60,tT)
exten => _7XX,1,Dial(SIP/${EXTEN},60,tT)
Проблема следующая: звоним с города на номер 1234567, попадаем на IVR, где пользователю предлагают или ввести внутренний номер или подождать, после чего во втором случае он автоматически переадресуется на 100; так вот пикап безотказно работает, если пользователь руками набрал 100 (набираем *8100), но если его перекинуло по тайм-ауту ожидания ввода внутреннего номера, то забрать звонок никак не получается.
Контексты проверял, и в том и в том случае звонок находится в incoming.
Вот лог ошибочного пикапа.
-- Executing Goto("SIP/1.2.2.1-081c66f0", "incoming|s|1") in new stack
-- Goto (incoming,s,1)
-- Executing Set("SIP/1.2.2.1-081c66f0", "TIMEOUT(digit)=5") in new stack
-- Digit timeout set to 5
-- Executing Set("SIP/1.2.2.1-081c66f0", "TIMEOUT(response)=10") in new stack
-- Response timeout set to 10
-- Executing Answer("SIP/1.2.2.1-081c66f0", "") in new stack
-- Executing Wait("SIP/1.2.2.1-081c66f0", "2") in new stack
-- Executing BackGround("SIP/1.2.2.1-081c66f0", "privetstvie") in new stack
-- Playing 'privetstvie' (language 'en')
-- Executing WaitExten("SIP/1.2.2.1-081c66f0", "7") in new stack
-- Timeout on SIP/1.2.2.1-081c66f0, going to 't'
-- Executing Dial("SIP/1.2.2.1-081c66f0", "SIP/100|60|tT") in new stack
-- Called 100
-- SIP/100-081bbee8 is ringing
-- Executing Pickup("SIP/790-081b2eb8", "100@incoming") in new stack
== Spawn extension (internal, *8100, 1) exited non-zero on 'SIP/790-081b2eb8'
вариант
суть проблемы в том, что по таймауту делаеться неявный гото на t. после чего пикапить надо extension t, а не 100.
[incoming] exten => s,1,Set(TIMEOUT(digit)=5) exten => s,n,Set(TIMEOUT(response)=10) exten => s,n,Answer()exten => s,n,Wait(2) exten => s,n,Background(privetstvie) exten => s,n,WaitExten(7) exten => s,n,Dial(SIP/100,60,tT) exten => s,n,HengUp exten => _1XX,1,Dial(SIP/${EXTEN},60,tT) exten => 1234567,1,GoTo(incoming,s,1)
Сделай вот так и всё заработает....
Задан: 2011-01-24 13:39:05 +0400
Просмотрен: 801 раз
Обновлен: Jan 25 '11
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.