LINUX.ORG.RU

Вопрос по dialplan'у asterisk'а

 


2

3

Переходим на IP-телефонию, купил книгу O'Reilly, купил сервер, купил кучу телефонов, в т.ч. один с пристяжной клавиатурой с BLF-клавишами. Завёл всё (на Asterisk 13.13.1), что хотел, но одну фичу - никак. Не могу завести direct call pickup на этой клавиатуре. Т.е. call pickup по стандартному *8 работает, а хочется, чтобы можно было перехватить секретарю заданный звонок по нажатию на моргающую BLF-клавишу во время звонка. Внутренние звонки перехватываются, звонок извне - никак. Строчка - стандартнейшая:

exten => _**XXX,1,Pickup(${EXTEN:2}&${EXTEN:2})
, dialplan для теста сократил до 2х контекстов (internal и from_sipprovider)

в консольке при попытке перехватить входящий на 123 «из города» звонок с помощью **123:

app_directed_pickup.c:367 pickup_exec: No target channel found for 123@internal.
app_directed_pickup.c:367 pickup_exec: No target channel found for 123@from_sipprovider.
Кручения переменной PICKUPMARK приводят к абсолютно тому же результату. Ставить FreePBX и прочие надстройки - не хочется, хочется самому разобраться. Что я пропустил?

Deleted

Последнее исправление: Deleted (всего исправлений: 3)
Ответ на: комментарий от upcFrost

Я гугл замучал до капчи. По этой ссылке был 100500 раз уже, не помогает, то же самое:

app_directed_pickup.c:367 pickup_exec: No target channel found for 123@PICKUPMARK. 

Строчки в dialplan'е:

exten => _**XXX,1,Set(__PICKUPMARK=${EXTEN:2})
same => n,Pickup(${EXTEN:2}@PICKUPMARK)

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

ок, а что за телефоны?

exten => _**XXX,1,Set(__PICKUPMARK=${EXTEN:2})

а если вместо наследуемого значения ставить global? и в extensions.conf поставить clearglobalvars=no

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 2)
Ответ на: комментарий от upcFrost

ок, а что за телефоны?

Yealink T19P E2, T21P E2, T29G + EXP20, прошивки последние на данный момент, да и не в них дело.

Проверяю с CSipSimple и со всех телефонов - ситуация одинаковая.

Если сменить на GLOBAL, то ERROR:

  == Extension Changed 103[blf_g] new state InUse for Notify User 101 
    -- Executing [**110@internal:1] Set("SIP/103-00000017", "GLOBAL(PICKUPMARK)=110") in new stack
[Dec 12 22:09:29] ERROR[21153][C-0000000f]: pbx_functions.c:699 ast_func_write: Function GLOBAL not registered
    -- Executing [**110@internal:2] Pickup("SIP/103-00000017", "110@PICKUPMARK") in new stack
[Dec 12 22:09:29] NOTICE[21153][C-0000000f]: app_directed_pickup.c:367 pickup_exec: No target channel found for 110@PICKUPMARK.
    -- Auto fallthrough, channel 'SIP/103-00000017' status is 'UNKNOWN'
  == Extension Changed 103[blf_g] new state Idle for Notify User 101 (queued)

101 - телефон с BLF, извне звонок приходит на 110, пытаюсь перехватить со 103.

Deleted
()
Ответ на: комментарий от Deleted

Function GLOBAL not registered

о какие дела. а если просто Set как был с наследованием? и еще - а если вместо Pickup(${EXTEN:2}@PICKUPMARK заюзать просто Pickup(${EXTEN:2}@internal?

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

о какие дела. а если просто Set как был с наследованием?

Не распарсил.

и еще - а если вместо Pickup(${EXTEN:2}@PICKUPMARK заюзать просто Pickup(${EXTEN:2}@internal?

    -- Executing [**110@internal:1] Pickup("SIP/103-0000001d", "110") in new stack
[Dec 12 23:30:05] NOTICE[21280][C-00000013]: app_directed_pickup.c:367 pickup_exec: No target channel found for 110@internal.
    -- Auto fallthrough, channel 'SIP/103-0000001d' status is 'UNKNOWN'
  == Extension Changed 103[blf_g] new state Idle for Notify User 101 (queued)

Ещё какая мысль родилась - у меня

autoload=no
load => pbx_config.so
load => chan_sip.so
load => codec_alaw.so
load => codec_ulaw.so
load => codec_g722.so
load => app_dial.so
load => res_rtp_asterisk.so
load => func_callerid.so
load => bridge_simple.so
load => app_directed_pickup.so

Может, чего-то не хватает?

Deleted
()
Ответ на: комментарий от upcFrost

Таак, я был прав, подгрузил func_global.so и ошибка «Function GLOBAL not registered» пропала. Правда, «No target channel found for» осталась :)

Deleted
()
Ответ на: комментарий от Deleted

ну так что будет-то если поставить set pickupmark перед dial в контексте вызова, а не перед pickup?

upcFrost ★★★★★
()
Ответ на: комментарий от upcFrost
[internal]
exten => _XXX,1,Dial(SIP/${EXTEN})

exten => _XXX.,1,Dial(${PROVIDER_LINE1}/${EXTEN})
exten => _**XXX,1,Pickup(${EXTEN:2}@PICKUPMARK)

[from_sipprovider]
exten => 8495xxxxxxx,1,Set(__PICKUPMARK=8495xxxxxxx)
same => 2,Dial(${MY_LINE1},,tTr)

При попытке перехвата

    -- Executing [**110@internal:1] Pickup("SIP/103-00000025", "110@PICKUPMARK") in new stack
[Dec 12 23:43:45] NOTICE[21367][C-00000018]: app_directed_pickup.c:367 pickup_exec: No target channel found for 110@PICKUPMARK.
    -- Auto fallthrough, channel 'SIP/103-00000025' status is 'UNKNOWN'

Deleted
()
Ответ на: комментарий от Deleted

эх, ща если не слишком долго будет попробую в виртуалке астер поднять. я пытаюсь следовать тому примеру что на voip-info.

кхе, блин, центось 7 минималка - 680 метров?! да они там что, озверели?

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Да там неважен blf ;) Там важно то, что для входящих не работает direct call puckup непонятно для меня почему.

Deleted
()
Ответ на: комментарий от Deleted

ок, завтра проверю. чую там какой-нибудь подвох с pickupmark

upcFrost ★★★★★
()
Ответ на: комментарий от Deleted

короче вот, ставил из твоих пакетов, модули как у тебя включал, для внутренних работает. сценарий - 101 звонит 102, в этот момент 103 набирает **102 и перехватывает вызов на себя.

[internal]
exten => _XXX,1,Set(_PICKUPMARK=${EXTEN})
exten => _XXX,n,Dial(SIP/${EXTEN})
exten => _**XXX,1,Pickup(${EXTEN:2}@PICKUPMARK)

в двух словах - pickupmark надо ставить до Dial в контект вызова и на тот экстеншен, куда ляжет звонок без пикапа. а в пикапе - ну, пикапить только.

через провайдера не проверял, у меня есть только мой домашний, и если я попытаюсь его заюзать - надо будет вертеться чтоб на международный тариф не влететь ;) но в целом могу попытаться если вообще никак будет.

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 2)
Ответ на: комментарий от upcFrost

для внутренних работает. сценарий - 101 звонит 102, в этот момент 103 набирает **102 и перехватывает вызов на себя.

Я же говорю - у меня это работает сразу, даже без PICKUPMARK, одной строчкой :)

exten => _**XXX,1,Pickup(${EXTEN:2})

А вот для входящих - ни под каким соусом, хотя даже tT стоит.

Deleted
()
Ответ на: комментарий от upcFrost

Блин, а я не могу пока проверить, у провайдера час назад огромную дуру из 100500 волокон порвали коммунальщики :(

Я могу тебе на любой номер (только на платный телефон не переводи :)) позвонить для проверки, чтобы не тратить твои деньги.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

Я могу тебе на любой номер (только на платный телефон не переводи :)) позвонить для проверки, чтобы не тратить твои деньги

лучше отправь смс со словом «пикап» на номер 8888 %) щютка

короче, получилось абсолютно аналогично. да, признаю, я схалтурил с провайдером и просто поднял рядом с астером yate на соседнем порту т.к. не смог петлей зацепить свой номер на три точки сразу (он же еще и домой подключен). но транк - он и в африке транк.

сценарий аналогичный - с провайдера (yate) поступает звонок в контекст from-provider, который падает на условного секретаря 101. Секретарь 103, видя что 101 пошел курить бамбук, жмет **101 и перехватывает вызов.

код следующий

[internal]
exten => _XXX,1,Set(_PICKUPMARK=${EXTEN})
exten => _XXX,n,Dial(SIP/${EXTEN})
exten => _**XXX,1,Pickup(${EXTEN:2}@PICKUPMARK)

[from-provider]
exten => _74991234567,1,Set(_PICKUPMARK=101)
exten => _74991234567,n,Dial(SIP/101)

как я и описал суть - где и как ты выставляешь PICKUPMARK. ее надо ставить прямо перед Dial в контексте вызова, и она должна соответствовать экстеншену на который приземляется вызов. могу глянуть как выставить несколько pickupmark, но чую либо циклом, либо через &.

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Чорт, вот в чём дело. Я не допетрил, что в PICKUPMARK надо локальный экстеншн писать. И я не понял, почему то Set(_PICKUPMARK), то Set(__PICKUPMARK) используется? Что ставить правильно?

Скорее бы оптику сварили, черти :(

Deleted
()
Ответ на: комментарий от Deleted

И я не понял, почему то Set(_PICKUPMARK), то Set(__PICKUPMARK) используется? Что ставить правильно?

это глубина наследования параметра. __ - бесконечная. в целом пофиг

upcFrost ★★★★★
()
Ответ на: комментарий от Deleted

нзч, отметь как решенную если все збс :) виртуалку пока не удаляю на всякий случай

upcFrost ★★★★★
()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от Deleted

?

Не, штука неплохая но имхо астер лучше. У yate есть нифиговый плюс что она нормально умеет h.323, юзал её как sip-h.323 гейт

upcFrost ★★★★★
()
Ответ на: комментарий от Deleted

Ну знание альтернатив всегда лучше, чем незнание. За это и спасибо :)

а, в этом плане. ну, yate по моему опыту довольно занятная штука, правда у нас был принцип «гуй везде где можно» (не все нормально умели консоль, да и проще сказать куда ткнуть чем диктовать что набрать, особенно когда отпуск), потому юзали исключительно как шлюз до H.323. Там станция капризная была, а у астера реализация h.323 такая что лучше б ее вообще не было. Yate завелась за два часа, с астером две недели сношались и в итоге хрен.

upcFrost ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.