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

Macro-stdexten и переадресация

0

Всем привет!

Использую стандартный макрос stdexten, но есть проблема при трансферах вызова:
1) Приходит звонок из PSTN и попадает на абонента А через макрос
2) Абонент А делает трансфер на абонента В (вызов также уходит через макрос)
3) Абонент В не поднимает трубку
4) Через 20 секунд вызов попадает в войсмейл абонента А, хотя по логике должен попасть в ящик В

Как я понимаю, тут происходит вложение макросов и когда абонент А выпадает из разговора, то что-то происходит с макросом абонента В.
Видимо, Goto(s-${DIALSTATUS},1) перебрасывает во внешний макрос....

Кто-то может уже решал подобную задачу?

[macro-stdexten]
exten => s,1,Dial(${ARG2},20)
exten => s,2,Goto(s-${DIALSTATUS},1)

exten => s-NOANSWER,1,Voicemail(u${ARG1})

Дополнение:

1) Модифицировал Макрос:

exten => s,1,NoOp(~~~~~MACRO~~~~~~~)
same => n,NoOp(MACROCONTEXT=${MACROCONTEXT})
same => n,NoOp( ARG1=${ARG1})
same => n,NoOp( ARG2=${ARG2})
same => n,Dial(${ARG2},20,r)

same => n,NoOp(~~~~~AFTER DIAL~~~~~~~)
same => n,NoOp( ARG1=${ARG1})
same => n,NoOp( ARG2=${ARG2})
same => n,Goto(call-${DIALSTATUS})

same => n(call-NOANSWER),NoOp(~~~~~NOANSWER~~~~~~~)
same => n,NoOp(MACROCONTEXT=${MACROCONTEXT})
same => n,NoOp( ARG1=${ARG1})
same => n,NoOp( ARG2=${ARG2})
same => n,Voicemail(${ARG1},u)
same => n,HangUp()

Фрагмент дайлплана:

exten => 9991,1,Answer()
same = n,Macro(stdexten,9991@NWFH,SIP/9991)

Также и для 9992

2) PSTN: 2385, A: 9991, B: 9992

Что интересно, после того как В не поднял трубку ( Dial(${ARG2},20,r) ), то вызов вернулся в родительский макрос ( и переменные стали ARG1=9991@NWFH и ARG2=SIP/9991 )

-- Nobody picked up in 20000 ms
-- Executing [s@macro-stdexten:6] NoOp("SIP/SIPGWTEST-00000000", "~~~~~AFTER DIAL~~~~~~~") in new stack
-- Executing [s@macro-stdexten:7] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:8] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack

Весь лог:
-- Executing [2385@incoming:1] Answer("SIP/SIPGWTEST-00000000", "") in new stack
-- Executing [2385@incoming:2] Goto("SIP/SIPGWTEST-00000000", "NWFH-int,9991,1") in new stack
-- Goto (NWFH-int,9991,1)
-- Executing [9991@NWFH-int:1] Answer("SIP/SIPGWTEST-00000000", "") in new stack
-- Executing [9991@NWFH-int:2] Macro("SIP/SIPGWTEST-00000000", "stdexten,9991@NWFH,SIP/9991") in new stack
-- Executing [s@macro-stdexten:1] NoOp("SIP/SIPGWTEST-00000000", "~~~~~MACRO~~~~~~~") in new stack
-- Executing [s@macro-stdexten:2] NoOp("SIP/SIPGWTEST-00000000", "MACROCONTEXT=NWFH-int") in new stack
-- Executing [s@macro-stdexten:3] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:4] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack
-- Executing [s@macro-stdexten:5] Dial("SIP/SIPGWTEST-00000000", "SIP/9991,20,r") in new stack
== Using SIP RTP CoS mark 5
-- Called SIP/9991
-- SIP/9991-00000001 is ringing
-- SIP/9991-00000001 answered SIP/SIPGWTEST-00000000
-- Started music on hold, class 'default', on channel 'SIP/SIPGWTEST-00000000'
-- Executing [9992@NWFH-int:1] Answer("SIP/9991-00000002", "") in new stack
-- Executing [9992@NWFH-int:2] Macro("SIP/9991-00000002", "stdexten,9992@NWFH,SIP/9992") in new stack
-- Executing [s@macro-stdexten:1] NoOp("SIP/9991-00000002", "~~~~~MACRO~~~~~~~") in new stack
-- Executing [s@macro-stdexten:2] NoOp("SIP/9991-00000002", "MACRO
CONTEXT=NWFH-int") in new stack
-- Executing [s@macro-stdexten:3] NoOp("SIP/9991-00000002", " ARG1=9992@NWFH") in new stack
-- Executing [s@macro-stdexten:4] NoOp("SIP/9991-00000002", " ARG2=SIP/9992") in new stack
-- Executing [s@macro-stdexten:5] Dial("SIP/9991-00000002", "SIP/9992,20,r") in new stack
-- Called SIP/9992
-- SIP/9992-00000003 is ringing

Locally RTP bridged 'SIP/SIPGWTEST-00000000' and 'SIP/9991-00000001' in stack
-- Stopped music on hold on SIP/SIPGWTEST-00000000
== Spawn extension (macro-stdexten, s, 5) exited non-zero on 'SIP/9991-00000002' in macro 'stdexten'
== Spawn extension (NWFH-int, 9991, 2) exited non-zero on 'SIP/9991-00000002'
-- Nobody picked up in 20000 ms
-- Executing [s@macro-stdexten:6] NoOp("SIP/SIPGWTEST-00000000", "~~~~~AFTER DIAL~~~~~~~") in new stack
-- Executing [s@macro-stdexten:7] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:8] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack
-- Executing [s@macro-stdexten:9] Goto("SIP/SIPGWTEST-00000000", "call-NOANSWER") in new stack
-- Goto (macro-stdexten,s,10)
-- Executing [s@macro-stdexten:10] NoOp("SIP/SIPGWTEST-00000000", "~~~~~NOANSWER~~~~~~~") in new stack
-- Executing [s@macro-stdexten:11] NoOp("SIP/SIPGWTEST-00000000", "MACRO_CONTEXT=NWFH-int") in new stack
-- Executing [s@macro-stdexten:12] NoOp("SIP/SIPGWTEST-00000000", " ARG1=9991@NWFH") in new stack
-- Executing [s@macro-stdexten:13] NoOp("SIP/SIPGWTEST-00000000", " ARG2=SIP/9991") in new stack
-- Executing [s@macro-stdexten:14] VoiceMail("SIP/SIPGWTEST-00000000", "9991@NWFH,u") in new stack

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

спросил 2017-02-01 14:31:58 +0400

den-p Gravatar den-p
1 2 1

обновил 2017-02-02 14:49:58 +0400

Comments

конструкция exten => s-NOANSWER в макросе недопустимая . В макросе используйте экстеншен s . И вообще , поменьше макросов , не злоупотребляйте .

zzuz ( 2017-02-01 15:54:02 +0400 )редактировать

пример взял вот здесь: http://www.voip-info.org/wiki/view/Asterisk+cmd+Macro

den-p ( 2017-02-01 19:08:08 +0400 )редактировать

Ну разбирайтесь . Вам домашнее задание.

zzuz ( 2017-02-01 19:29:49 +0400 )редактировать

ем. вообщето допустима. я часто использую.

meral ( 2017-02-01 20:06:57 +0400 )редактировать

Да я к тому , чтобы человек начинал с более понятных вещей .

zzuz ( 2017-02-02 00:51:01 +0400 )редактировать

macro будут деприкейтнуты. так что лучше начинать привыкать к gosub

У вас Dial идет на ARG2, а Voicemail на ARG1. И Чему вы удивляетесь ?

Срочно читать книжку.

virus_net ( 2017-02-02 10:23:09 +0400 )редактировать

Они устаревают уже с 1.6 , но ничего , все еще работают. ARG1=1234,ARG2=SIP/1234 . Это по примеру с ссылке.

zzuz ( 2017-02-02 10:47:10 +0400 )редактировать

они не будет depricated пока жива куча кода под названием freepbx. Потому как никому не надо сделать ее нерабочей.

meral ( 2017-02-02 12:02:36 +0400 )редактировать

" У вас Dial идет на ARG2, а Voicemail на ARG1. " -все верно, но при переадресации опять макрос вызывается и ARG1/2 уже указывают на 9992, но неуспешный Dial разрушает вложенность. Дополнил основной текст логами.

den-p ( 2017-02-02 14:53:12 +0400 )редактировать

У вас нет проблемы. Два исходящих вызова , каждый на своем макросе.

zzuz ( 2017-02-02 15:18:04 +0400 )редактировать

Про перевод можете не рассказывать . Он выполнен телефоном , а не сервером , так что это просто два исходящих вызова.

zzuz ( 2017-02-02 15:19:03 +0400 )редактировать

Согласен, есть 2 звонка: PSTN - A и A - B. Сторона B поднимает трубку и А делает REFER, и A выпадает с разговора.

Если В берет трубку, то все ок:разговор PSTN - B .

Если В не берет труку, то вызов сваливается в войсмейл А

В дайлплан добавил Answer, но не помогло:

exten => 9992,1,Answer()

same = n,Macro(stdexten,9992@NWFH,SIP/9992)

den-p ( 2017-02-02 15:35:03 +0400 )редактировать

Перевод делайте средствами сервера и определите TRANSFER_CONTEXT .

zzuz ( 2017-02-02 16:23:44 +0400 )редактировать

Да, средствами Астериска работает как надо.

Спасибо!

den-p ( 2017-02-02 18:50:43 +0400 )редактировать

1 Ответ

0

смотрим. http://asterisk-support.ru/question/38386/kak-poniat-chto-proiskhodit-na-asteriske/

скорее всего у вас таки войсмейл от А.

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

ответил 2017-02-01 20:08:09 +0400

meral Gravatar meral flag of Ukraine
22917 24 20 173
http://pro-sip.net/

Ваш ответ

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 ленту новостей

Статистика

Задан: 2017-02-01 14:31:58 +0400

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

Обновлен: Feb 02 '17

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