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

Обрыв выполнения диалплана

0

Приветствую вас, коллеги!

Объясните мне, непонятливому, почему происходит и как это решить?

Ситуация:

Версия ПО: Asterisk 1.8.11.0 ОС: CentOS 6.2 x64

Есть контекст в котором описывается обработка вызова на определенный номер. По окончании команды Dial() проверяется статус вызова и в зависимости от него выполняются те или иные действия. Мы сейчас говорим о случае, когда вызываемый абонент ответил (снял трубку), т.е. статус ANSWER. При всех других состояниях всё ОК. Происходит разговор, вот он завершается и тут два варианта: 1 - первым трубку вешает тот, КОГО ВЫЗЫВАЛИ (вызываемый). 2 - первым трубку вешает тот, КТО ВЫЗЫВАЛ (звонящий).

Если первым положил трубку вызываемый абонент, то всё ОК, диалплан обрабатывается дальше. Если же первым опустил телефон звонящий, то выполнение диалплана заканчивается на приоритете команды Dial(), а в консоли пишется:

-- Executing [3838@landline:34] Dial("SIP/5077-00154f6c", "SIP/5860,15,tTg") in new stack == Spawn extension (landline, 3838, 34) exited non-zero on 'SIP/5077-00154f6c'

А мне надо, чтобы происходила дальнейшая обработка плана набора в данном контексте.

Вот что вы можете мне посоветовать? Всех заранее благодарю за подсказки.

P.S. Экстеншен "h" и опцию "g" для команды Dial() не упоминать. В моём случае они бессмыслены.

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

спросил 2012-09-26 17:30:30 +0400

guvijur Gravatar guvijur
1 2

1 Ответ

0

так и должно быть.

в вашем случае актульна другая опция

 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.
ссылка удалить спам редактировать

ответил 2012-09-26 17:50:19 +0400

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

Comments

Не срабатывает. Увы. Суть то в чём, у меня есть табличка, что-то вроде самописного CDR для нескольких телефонов отдела тех. поддержки. Требовалось организовать определённую логику обработки звонка в службу тех. поддержки и как на зло ни одна стратегия вызова для очередей, которые используются сейчас, не подходит. Свой CDR нужен для того, чтобы ввести систему баллов для сервис инженеров. Своего рода кнут и пряник. Ну чтобы видеть, отвечают они на вызовы или динамят. Но оказалась такая неприятность, что если звонивший вешает телефон первым, то дальнейшая обработка не происходит, в таблицу ни чего не пишется, балы не плюсуются. Вот и мучаюсь я сейчас вопросом "КАК обойти?".

guvijur ( 2012-09-26 18:01:57 +0400 )редактировать

дык чем g + h не подходят ?

komrad123 ( 2012-09-26 18:09:43 +0400 )редактировать

F должно стоять 1) не в макросе 2) в последнем вызове(из очереди). все работает. если у вас скила отладки не хватает, ставте userfield и анализируйте cdr. оно и более правильно кстати.

meral ( 2012-09-26 18:23:27 +0400 )редактировать

"g" не подходит по причине того, что оно относится к вызываемому абонениту. Оно у меня используется и работает. "h" не подходит потому, что данный контекст включён в целую цепочку вышестоящих контекстов, в которых экстена "h" нет. В итоге все вызовы вышестоящих контекстов находят h в этом и у меня начинается трэш в формировании своего самописного cdr. Правда я уже перед тем как заснуть одну мыслю в голове нашёл, которая мне сказала - "А поставь ка ты экстен h в том контексте, в который включён мой текущий, по которому я и спрашиваю вас сейчас. Это не позволит вызовам из высших контекстов скакать на h в этот." Либо в h мне надо будет написать несколько GotoIF() чтобы отбросить ненужные мне записи.

guvijur ( 2012-09-27 09:33:02 +0400 )редактировать

По поводу F. Оно у меня было не в сакросе и не в очереди. Просто тупо команда: same => n,Dial(SIP/${NUM1},${DT},tTgF) Что-то типа того. И всё, что я вижу при проверке: -- Executing [3838@landline:34] Dial("SIP/5077-00174a6b", "SIP/5860,15,tTgF") in new stack == Spawn extension (landline, 3838, 34) exited non-zero on 'SIP/5077-00174a6b'

guvijur ( 2012-09-27 09:36:11 +0400 )редактировать

Надо отметить, что параметр F заработал.... как-то внезапно заработал... Всем спасибо за подсказки. Я решил всё средствами perl. ПРосто проверяю количество переданных элементов и если хоть один не передан, то записи не производится. Реализовал через экстен h.

guvijur ( 2012-09-27 11:06:41 +0400 )редактировать

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

meral ( 2012-09-27 14:14:40 +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 ленту новостей

Статистика

Задан: 2012-09-26 17:30:30 +0400

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

Обновлен: Sep 26 '12

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

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