Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Как запикапить автоматически переключенный по тайм-ауту из IVR звонок? Asterisk 1.2 PickUp()

1

Есть Астериск 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'
удалить закрыть спам изменить тег редактировать

спросил 2011-01-24 13:39:05 +0400

Nubie Gravatar Nubie
46 1 1 4

обновил 2011-01-24 17:13:35 +0400

2 Ответа

2

вариант

  1. поднимать через (звездочку)8 или pickup без параметров(надо чтоб вы в одной группе были).
  2. написать вот так exten => t,1,goto(100,1)
  3. или вот так exten => _*8000,1,PickUp(t@incoming)

суть проблемы в том, что по таймауту делаеться неявный гото на t. после чего пикапить надо extension t, а не 100.

ссылка удалить спам редактировать

ответил 2011-01-25 13:21:42 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

обновил 2011-01-25 13:27:33 +0400

Comments

И придется добавить 100,1,Dial(SIP/100,60,tT), т. к. правило маршрутизации _1XX,1,Dial(SIP/${EXTEN},60,tT) уже не не подойдет при GoTo(100,1), верно? Nubie ( 2011-01-25 14:04:14 +0400 )редактировать
неверно. подойдет. в чем проблема то? будет рабоатть так же как если бы клиент набрал 100. когда клиент набирает 100 WaitExten делает неявный goto на oncoming,100,1. а 1xx это просто регексп в диалплане, чтоб не писать 100-199 отдельно. meral ( 2011-01-25 14:29:00 +0400 )редактировать
Спасибо за исчерпывающие ответы. Почему-то был уверен, что для GoTo() необходимо точное совпадение с элементом и что регулярки не парсятся в этом случае. Nubie ( 2011-01-25 18:37:31 +0400 )редактировать
это было бы сильно круто. вобоще неявный гото это самый используемый оператор ;) meral ( 2011-01-26 07:39:30 +0400 )редактировать
0

[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 14:19:28 +0400

amonra Gravatar amonra flag of Ukraine
2301 26 13 65
http://lantec.ua/

обновил 2011-01-24 22:39:51 +0400

Comments

Идею понял, не отправлять на timeout extension, попробую. А про суть проблемы не поясните? Nubie ( 2011-01-24 14:40:06 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2011-01-24 13:39:05 +0400

Просмотрен: 797 раз

Обновлен: Jan 25 '11

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.