Страница 2 из 2

Re: Возвращается ли ДТМФ по команде PlayDTMF в астериск

Добавлено: 22 июл 2015, 17:06
sasha2
Вот я и говорю почему бы не быть Action-у скажем таким:

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

Action: SendEventToDialplan
TypeEvent: DTMF
Param1: 110022
Ведь есть же Action: Command, выполняющий вообще любую команду CLI-консоли

Re: Возвращается ли ДТМФ по команде PlayDTMF в астериск

Добавлено: 23 июл 2015, 09:47
Wapo

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

SendEventToDialplan
Вы, собственно, ГДЕ видели такую команду? В диалплане есть UserEvent - т.е. ГЕНЕРАЦИЯ СООБЩЕНИЯ о СОБЫТИИ, но не АКТИВАЦИЯ чего-либо!!!!!!!
Еще раз поймите разницу - СОБЫТИЕ и КОМАНДА.

У вас есть в астере в некий момент АКТИВНЫЙ канал типа SIP/megafon-0000afg вот ловите его и УПРАВЛЯЙТЕ им!!! Например редирект его на некую точку в .... том де диалплане.
Вот, к примеру, тут можно почитать: http://wapo-spb.livejournal.com/7753.html

Re: Возвращается ли ДТМФ по команде PlayDTMF в астериск

Добавлено: 23 июл 2015, 13:35
sasha2
В качестве отступления, признаюсь, что с астериском я работал только по AMI, а про диалплан только слышал. И только сейчас пришлось начать изучать астериск более глубоко и с другой стороны, раз с наскока через AMI не получилось.

Теперь возвращаясь к теме:
Еще раз поймите разницу - СОБЫТИЕ и КОМАНДА.
Но ведь для астериска ДТМФ приходящее из сети - это именно событие. Да и вообще не важно как называть, главное что куда идёт. Вы видимо хотите сказать, что событием называется, то что уходит от астериска во вне (например моему клиенту по AMI), а командой то, что приходит в него из вне. В этом случае я просто не правильно назвал функцию - Нужно не SendEventToDialplan, а SendCommandToDialplan, но аргументы будут теже (в моём случае это CommandType_DTMF и строка с цифрами).

Вообще как ДТМФ поступает в диалплан? Я думаю, что есть 2 способа:
1) В диалплане есть что-то типа колбэков, (регистрируется нечто типа функции на получение внешних событий типа ДТМФ) который вызывается ядром при приходе ДТМФ из сети
2) В диалплане вызывается некая ф-я, например, WaitDTMF, на которой диалплан засыпает, а когда приходит из сети ДТМФ, происходит выход из ф-ии и в качестве результата эта ф-я возвращает этот самый ДТМФ

По другому эти 2 варианта можно назвать как асинхронный и синхронный. Но и в одном и другом случае вместо слова "сеть" может быть что угодно и теоретически можно реализовать возможность подсунуть требуемый ДТМФ ядру не по сети, а по другому интерфейсу, а ядро далее либо (1)вызовет колбэк, либо (2) выйдет из ф-ии.

Ещё можно пояснить так:
ядро (астериска) имеет несколько интерфейсов получения внешних событий
1) сокетовый интерфейс, получающий данные из сети
2) интерфейс командной строки
3) ...
И в 1-ом и во 2-м случает поидее ДТМФ можно дать астериску, вопрос в том реализовано ли это в астериске.

Re: Возвращается ли ДТМФ по команде PlayDTMF в астериск

Добавлено: 23 июл 2015, 13:53
sasha2
Вобщем у меня кое-что получилось. В исходниках астериска удалось найти посылку ДТМФ-а непосредственно в скрипты диалплана. Это делается в команде atxfer. Т.е. то, что находится в поле Extern посылается в виде ДТМФ. Но перед этими ДТМФ-ами посылается ещё несколько цифр, которые указывают на код команды. кроме того там делается ещё несколько действий, которые могут увести в другую сторону.
В общем решили добавить свою AMI команду, а за основу её реализации взять реализацию команды atxfer, восновном просто выбросив из неё не нужное.
пока сделано грубо - реализацию вставили прямо в ядро, более корректно оформить это отдельным модулем.
Конечно недостатки - это:
1) возможно придётся подправлять исходник этого модуля для разных версий астериска
2) в какой-то момент это вообще может перестать работать, если астерисковцы решат в atxfer посылать Extern не ДТМФ-ом, хотя тогда можно будет откопать внутреннюю посылку ДТМФ из другого места.

Так что, пока остаётся вопрос - почему нет уже готовой такой команды в астериск (и может быть всёже есть другие способы реализации помощника и без дублирования функционала на диалплане и AMI). Но если причин нет, то может быть когда-нибудь она в астериске появится.