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

Set(DYNAMIC_FEATURES=) для одного плеча - как?

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

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

Аватара пользователя
postscripter
Сообщения: 93
Зарегистрирован: 16 сен 2015, 15:24

Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение postscripter »

Первоначально DYNAMIC_FEATURES = apprecord#MyFeature1 (global_custom.conf). Звонок приходит from trunk, выполняется следующий код:

[from-pstn-custom]
exten => _X.,1,Set(DYNAMIC_FEATURES=)
или
exten => _X.,1,Set(__DYNAMIC_FEATURES=)


Переменная устанавливается для входящего канала, но горячие клавиши отваливаются у обоих (кроме ##, она работает). Почему так? Как сделать правильно? И как запретить горячие клавиши удалённому абоненту, когда звонок наоборот, выходит в мир?
помучился сам - дай помучиться другим
gosha
Сообщения: 375
Зарегистрирован: 06 сен 2010, 17:41
Контактная информация:

Re: Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение gosha »

посмотреть в features.conf настройки вашей фичи:

<ActivateOn>[/<ActivatedBy>]
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

Re: Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение awsswa »

платный суппорт по мере возможностей
Аватара пользователя
postscripter
Сообщения: 93
Зарегистрирован: 16 сен 2015, 15:24

Re: Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение postscripter »

ActivateOn/ActivatedBy
*0,self/both, активировать могут оба, выполнение на стороне активировавшего, так и задумано.
Хочется изменить поведение именно в случае звонков извне, т.е. прибить все хоткеи для того плеча, которое - транк.


awsswa, у вас читаю:
peer/both, ... Опция both - Играет обеим сторонам
Хотя на самом деле
both - means that the application can be performed by both caller and callee
Вводите в заблуждение :) Но проблема не в этом, конечно....
помучился сам - дай помучиться другим
Аватара пользователя
postscripter
Сообщения: 93
Зарегистрирован: 16 сен 2015, 15:24

Re: Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение postscripter »

А, вкурил.. Вы предлагаете сделать две feature, чтобы при звонке с транка каждый раз ставить в dynamic_features ту, которая "self/callee", а при звонке на транк -- "self/caller"? Мутно конечно, но можно попробовать.
помучился сам - дай помучиться другим
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение virus_net »

Ещё можно просто GotoIf`ом обойтись в Macro фичи.
Проверять или по длине номера или по наличию собственной переменной, которую указать у нужных внутренних номеров в sip.conf.
По длине номера:

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

exten => s,1,Verbose(1,Run feature ${CHANNEL})
exten => s,n,GotoIf($["${LEN(${CALLERID(num)})}" > "10"]?step1:cancel)
exten => s,n(step1),n,....
exten => s,n(cancel),Verbose(1, Cancel)
exten => s,n,MacroExit()
По переменной:

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

[111](locuser)
...
setvar=myConstant=1

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

exten => s,n,GotoIf($["${myConstant}" = "1"]?step1:cancel)
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
Аватара пользователя
postscripter
Сообщения: 93
Зарегистрирован: 16 сен 2015, 15:24

Re: Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение postscripter »

Проверять или по длине номера
Для исходящих не получится, CALLERID(num) заменяется на внешний номер транка при звонке.
Для входящих... А SIP-оператор разве не может передать какой-нибудь левый номер?

Про setvar любопытно, я думал то же самое макросом сделать. Но
setvar = variable=value : Channel variable to be set for all calls from this peer/user.
Т.е. для входящих не сработает. И есть подозрения, что первый же трансфер эту переменную сбросит (и правильно сделает).

Пока есть такая идея:


[macro-check-devinfo-context]
exten => s,1,Noop(Who am I?)
same => n,Macro(dumpvars)
same => n,Gotoif(${devinfo_context}?the_end)
same => n,Set(devinfo_context=${ODBC_CHECK_CONTEXT(${CALLERID(num)})})
same => n(the_end),MacroExit()


Вызывать этот макрос при совершении любого звонка, а также непосредственно в тех местах, где нужно идентифицировать абонента. Чисто по прикидкам:
1) При звонке с номера 123 переменная получает его контекст из базы.
2) При выходе в транк callerid меняется, но переменная остаётся.
3) При трансфере переменная обнуляется, но и callerid восстанавливается, а значит, следующий вызов макроса восстановит переменную.

Но надо тестить. И ещё беспокоит честность провайдера. Ведь если придёт вызов с callerid=100 (служба поддержки, например), будет неприятно.
Ещё можно просто GotoIf`ом обойтись в Macro фичи.
Если фича самописная, а если стандартная типа *1 = начать запись, опять переписывать на свою? Должен быть более правильный способ, чем переопределять все стандартные фичи, имхо.
помучился сам - дай помучиться другим
Аватара пользователя
postscripter
Сообщения: 93
Зарегистрирован: 16 сен 2015, 15:24

Re: Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение postscripter »

Так-с... Макрос работает неплохо, но я его включаю так:

[AnyUsers]
exten => s,n,Macro(check-devinfo-context)
exten => _X.,1,Macro(check-devinfo-context)

И получаю опять паузу при наборе, от которой так долго избавлялся, т.к. _X. - это любой номер....
помучился сам - дай помучиться другим
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение virus_net »

postscripter писал(а):Для исходящих не получится, CALLERID(num) заменяется на внешний номер транка при звонке.
postscripter, это был пример идеи как это можно реализовать. Что проверять, номер или не номер и на соответствие чему - это дело ваше.
postscripter писал(а):А SIP-оператор разве не может передать какой-нибудь левый номер?
если вы ему это позволяете, не проверяете по шаблону на входе, то безусловно ответ "ДА"
postscripter писал(а):Т.е. для входящих не сработает
а) если не выставлять в соответствующем пире для входящих, то нет.
б) так вам же это и нужно, чтобы при вызове извне не работало
postscripter писал(а):И есть подозрения, что первый же трансфер эту переменную сбросит
Есть поговорка: "Когда кажется - креститься надо" ;) Переменная не сбросится. Проверить это можно за несколько минут.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
Аватара пользователя
postscripter
Сообщения: 93
Зарегистрирован: 16 сен 2015, 15:24

Re: Set(DYNAMIC_FEATURES=) для одного плеча - как?

Сообщение postscripter »

это был пример идеи как это можно реализовать
Почему, пример. Это единственный и очевидный вариант, кроме $Caller id и $Ampuser других переменных-то нет. Можно установить свои, я это пытаюсь сделать макросом, но получаю вышеописанную проблему.
если вы ему это позволяете, не проверяете по шаблону на входе
Согласен :)
так вам же это и нужно, чтобы при вызове извне не работало
Согласен :)))

Меня немножко напрягает прописывать в sip_custom.conf одно и то же для каждого абонента (шаблонов freepbx не делает). Плюс есть ещё dahdi. Можно ввести маркер как-то по-другому?
помучился сам - дай помучиться другим
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH