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

asterisk обработка DIAL, g, h

0

Привет! Не нашел ответа как себя должен вести asterisk (или как правильно).

Делаем

same => n,Dial(SIP/XXX,,g)

флаг g говорит что после завершения вызова asterisk должен продолжить выполнение скрипта

например дальше

same => n,NoOp(${DIALSTATUS})

C другой стороны есть экстеншн h...

Разъясните пожалуйста

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

спросил 2016-04-12 17:26:24 +0400

vitalikus Gravatar vitalikus
69 7 5

1 Ответ

1

Сторона А(caller) звонит стороне Б(callee).

Дальше есть есть G и Б(callee) ложит трубку, звонок переходит на следующий за dial приоритет

g: Proceed with dialplan execution at the next priority in the current
extension if the destination channel hangs up.

кроме того есть F(если А(caller) ложит трубку), только с 1.8+

 F([[context^]exten^]priority): When the caller hangs up, transfer
    the *called* party to the specified destination and *start* execution
    at that location.
    NOTE: Any channel variables you want the called channel to inherit
    from the caller channel must be prefixed with one or two underbars ('_').

    F: When the caller hangs up, transfer the *called* party to the next
    priority of the current extension and *start* execution at that location.
    NOTE: Any channel variables you want the called channel to inherit
    from the caller channel must be prefixed with one or two underbars ('_').
    NOTE: Using this option from a Macro() or GoSub() might not make
    sense as there would be no return points.

Екстеншен h вызывается после завершения звонка(при отсутвии F,g или после полного выполнения диалплана). В екстеншене h вы уже не можете сделать проигрывания файлов,wait или чегото другого похожего(поскольку оба абонента УЖЕ откулючены). Также очень не рекомендуется выполнять какието операции длящиеся больше секунды в этом екстеншене, поскольку это может привести к зависанию астериска. Если надо длительные операции - маркируете в базе необходимость и выполняете внешним скриптом.

Екстеншен h выполняется в том контексте, в который пришел звонок или в который было сделано goto, НЕ работает если контекст включен include.

Все три опции - костыли внесенные людьми, которые не могли сделать без них(особенно h).

Есть нативная(не такая костыльная) опция hangup handler. Позволяет запустить несколько обработчиков одновременно и не заморачиваться последствиями от переходов по диалплану.

https://wiki.asterisk.org/wiki/display/AST/Hangup+Handlers

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

ответил 2016-04-13 06:42:14 +0400

meral Gravatar meral flag of Ukraine
21228 23 18 169
http://pro-sip.net/

Comments

meral, подскажите пожалуйста, если вызов был сделан по след сценарию: А звонит B; B отвечает; A делает attended transfer(средствами телефона) на С. Как поймать окончание разговора между B и C? hangup handler срабатывает после того как A положит трубку.

eyt5297 ( 2016-04-13 12:37:10 +0400 )редактировать

в контексте трансфера чтото еще переназначить. это все костыли. не надо ничего ловить, анализируйте cdr записи.

meral ( 2016-04-13 22:00:05 +0400 )редактировать

в контексте трансфера hangup handler то же срабатывает после того как A положит трубку. Использовать h ну совсем не хочется. Обрабатывать CDR для запуска скрипта то же не вариант.

eyt5297 ( 2016-04-14 06:25:11 +0400 )редактировать

Ипользуйте Local/exten@context/n обертку перед звонком. Она не слаживается при трансфере. Вообще складывается впечатление, что вы взяли задачу вам не по плечу. Иожет стоит почитать как это в том же freepbx реализовано?

meral ( 2016-04-14 07:02:44 +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 ленту новостей

Статистика

Задан: 2016-04-12 17:26:24 +0400

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

Обновлен: Apr 13

Похожие вопросы:

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