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

Asterisk\FreePBX действие до совершения исходящего вызова?

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

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

skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

Asterisk\FreePBX действие до совершения исходящего вызова?

Сообщение skynetyar »

Добрый день!
Задумка определять группу вызова Outbound Routes до совершения вызова.
В каком макросе,файле нужно внедриться что бы совершить действие ДО начала звонка?
Пробую в extensions_additional.conf при помощи макроса [macro-dialout-trunk-predial-hook] но почему то там звонок уже с определенным транком исходящим!
но в него уже прилетает вызов уже с определенным транком =(

Подскажите пожалуйста где могу внедриться и послать звнок куда надо
same => n,Goto(${outrt-11},${OUTNUM},1)
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
Аватара пользователя
Zavr2008
Сообщения: 2215
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Asterisk\FreePBX действие до совершения исходящего вызов

Сообщение Zavr2008 »

"определяет маршрут" тот паттерн, по которому матчинг совпадает маршрута. Также есть маршруты с условиями, например по календарю.
"вклиниваться" в predial hook - бесполезно.

Опишите более подробно что Вы пытаетесь создать, наверное стоит подумать о другом механизме.
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

Re: Asterisk\FreePBX действие до совершения исходящего вызов

Сообщение skynetyar »

Задумака через AGI в стороннем сервисе я определяю принадлежность номера к провайдеру, МТС\Мегафон,Билайн, в зависмости от провайдера я хочу совершать вызов через нжную мне (Outbound Routes) группу вызова в которой уже по приоритетам размещены транки. Для этого я считал что могу возвращать эти данные из AGI в [macro-dialout-trunk-predial-hook] но тут как оказалось уже определен ${DIAL_TRUNK}в вызове и совершить same => n,Goto(${outrt-11},${OUTNUM},1) такой переход уже не могу

Своял чтио т отипа такого

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

;[macro-dialout-trunk-predial-hook] 
;exten => s,1,Verbose(0, -----ASR-ASR-ASR-ASR-ASR---------)
;same => n,Noop(${DIAL_TRUNK},${OUTNUM},${CALLERID(number)})
;same => n,AGI(trunk_hook.php,${OUTNUM},${CALLERID(number)})
;same => n,Set(var_trunk_operator=${trunk_operator})
;same => n,Set(var_trunk_region=${trunk_region})
;same => n,Set(var_trunk_operatorID=${trunk_operatorID})
;same => n,Set(var_trunk_outrt=${trunk_outrt})

;same => n,GotoIf($["${trunk_outrt}" = "pusto"]?pusto:gonext)
;same => n(pusto),MacroExit()

;same => n(gonext),Noop(${var_trunk_operator},${var_trunk_region},${var_trunk_operatorID},${var_trunk_outrt},${OUTNUM})
;same => n,Goto(${var_trunk_outrt},${OUTNUM},1) ; тут совершаю звонок по нужному мне из AGI outrt-x машруту
;same => n,MacroExit()
Вот ${CALLERID(number)} тот саймый уже определенный транк через который пойдет вызов а не тот который я захотел в Goto
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
Аватара пользователя
Zavr2008
Сообщения: 2215
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Asterisk\FreePBX действие до совершения исходящего вызов

Сообщение Zavr2008 »

Обычно решают "в лоб задачу" многие - просто вторая виртуалка, астер без FreePBX, там уже и разруливать.
Ну а между астерами лишь один транк постоянный.

Можно пойти и другим путем:
You can use an agi or in the dialplan like this:

Add in extensions_custom.conf

[distribute-pstn-trunks]
;pstn trunk are number 2 and 3
exten => _0XXXXXXXXX,1,Set(COUNT=${DB(test/count)})
;increment
exten => _0XXXXXXXXX,n,SetVar(COUNT=$[${COUNT} + 1])
exten => _0XXXXXXXXX,n,SetVar(COUNT=${IF($[ ${COUNT} = 4]?2:${COUNT})})
exten => _0XXXXXXXXX,n,Set(DB(test/count)=${COUNT})
exten => _0XXXXXXXXX,n,NoOp(Number dialed is ${EXTEN} by trunk pstn ${COUNT})
exten => _0XXXXXXXXX,n,Macro(dialout-trunk,${COUNT},${EXTEN},,)
exten => _0XXXXXXXXX,n,Macro(outisbusy,)

Adapt it to your config.

Then create a custom trunk : Local/$OUTNUM$@distribute-pstn-trunks

Use the custom trunk in your outbound routes…
Done.
Поменять логику балансировки в примере на нужную через запрос по AGI.

https://community.freepbx.org/t/is-it-p ... -pstn/4035
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
ded
Сообщения: 15631
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk\FreePBX действие до совершения исходящего вызов

Сообщение ded »

Обрабатывать именно в macro-dialout-trunk-predial-hook
Вы не обратили внимания, что он у вас был пустой, в нём только
's' => 1. MacroExit()

Предполагается, что вы напишете там предобработку, с передачей в него аргумента - набираемый номер, а возвращать он будет в макрос macro-dialout-trunk значение BYPASS
и уход на метку
'bypass' => 1. Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)
и подставлять значение транка ${outrt-11} не будет.
Но вот использовать свои переменные там конечно можно, но лучше бы придерживаться существующих, чтобы не множить сущности.
Не сооружать кастомные Goto(${var_trunk_outrt},${OUTNUM},1)

А передавать на метку gocall в основной макрос macro-dialout-trunk, где
Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM}${OUT_${DIAL_TRUNK}_SUFFIX},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
будут наполнены заданными в macro-dialout-trunk-predial-hook переменными.
skynetyar писал(а):Вот ${CALLERID(number)} тот саймый уже определенный транк через который пойдет вызов
При чём тут CALLERID?
CALLERID - это кто звонит, а ${OUTNUM} - куда звоним, ${OUT_${DIAL_TRUNK}} - через какой транк.
skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

Re: Asterisk\FreePBX действие до совершения исходящего вызов

Сообщение skynetyar »

Спасибо за ответы!
Тоесть могу оперировать только ${DIAL_TRUNK} не смогу использовать исхзодящие группы ?
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
ded
Сообщения: 15631
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk\FreePBX действие до совершения исходящего вызов

Сообщение ded »

Как вы представляете себе исходящую группу?

Допустим вам надо звонить на номер +79012345678 и макрос возвращает вам три транка для выполнения этого вызова.
Вы инициируете вызов стразу пот трём? Или последовательно по каждому?
skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

Re: Asterisk\FreePBX действие до совершения исходящего вызов

Сообщение skynetyar »

Судя по данному контексту

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

[outbound-allroutes]
include => outbound-allroutes-custom
include => outrt-9 ;
include => outrt-16 ; 
include => outrt-8 ; 
include => outrt-5 ; 
include => outrt-11 ; 
include => outrt-10 ; 
include => outrt-12 ; 
include => outrt-13 ; 
include => outrt-17 ; 
exten => foo,1,Noop(bar)
Я предпологал что могу запулить вызов в нужный outrt-X путем
same => n,Goto(outrt-9,${OUTNUM},1) к примеру
Неужели нельзя найти проще метод кастомизировать вызов?
На одном из форумов http://asterisk-support.ru/forum/topics/5650/?page=1
Вы подсказали такой метод

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

[from-internal-custom]
exten _X.,1,Macro(dialout-trunk-custom,outbound-allroutes,${EXTEN})
Тут не прокатит так?
Простите, возможно в этих дебрях множества направлений я запутался =\
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
ded
Сообщения: 15631
Зарегистрирован: 26 авг 2010, 19:00

Re: Asterisk\FreePBX действие до совершения исходящего вызов

Сообщение ded »

Так тоже пойдёт. Можно запулить
same => n,Goto(outrt-9,${OUTNUM},1) если перед этим из predial-hook запросом в AGI например получен ответ outrt-9.

Тогда строка в диал-плане должна выглядить так
same => n,Goto(${DIAL_TRUNK},${OUTNUM},1) предполагая, что переменная ${DIAL_TRUNK} принимает значение outrt-9 из вашего AGI или ещё какое то.

Неверный термин выбрали говоря о группах.
Что такое [outbound-allroutes] ? Это таблица маршрутизации из FreePBX, описанная в OUtbound routes.
По маске шаблона номера она пробивается сверху вниз. Пример

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

[from-internal-custom]
exten _X.,1,Macro(dialout-trunk-custom,outbound-allroutes,${EXTEN})
некорректный, это обход всех правил внутреннего диал-плана
from-internal сразу на выход, кастомная оригинация в мир.

Если вы знаете через какой транк кинуть вызов, то нет смысла пробивать всю таблицу типа
same => n,Goto(outbound-allroutes,${OUTNUM},1) в поиске подходящего под шаблон транка, а пулить прямо в этот транк
same => n,Goto(outrt-9,${OUTNUM},1)
skynetyar
Сообщения: 439
Зарегистрирован: 18 авг 2016, 13:25

Re: Asterisk\FreePBX действие до совершения исходящего вызов

Сообщение skynetyar »

Спасибо за ответ! Да именно так я в таком случае и дулал..
В extensions_override_freepbx.conf оверрайдил через [macro-dialout-trunk-predial-hook] как во втором моем сообщении из AGI брал направление и присваивал его переменной, получлось именно так

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

В AGI $trunk_outrt=outrt-9 

same => n,Set(var_trunk_outrt=${trunk_outrt})
same => n,Goto(${var_trunk_outrt},${OUTNUM},1)
В итоге в диалплане в [macro-dialout-trunk-predial-hook] это выглядело так

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

same => n,Goto(${outrt-9 ,79066358080,1)
В AGI я логировал все переменные и

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

same => n,AGI(trunk_hook.php,${OUTNUM},${CALLERID(number)})
${CALLERID(number)} у меня оказывался при некоторых звонках CID исходящего транка
И вся моя схема не работала несмотря на то что я указывал исходящую группу...

Иногда в консоли такое выплывало и звонок не проходил вовсе

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

WARNING[21747][C-00027834]: pbx.c:4467 __ast_pbx_run: Channel 'PJSIP/703-00042a78' sent to invalid extension but no invalid handler: context,exten,priority=outrt-10,79066358080,2

Либо я все же что то не въехал =\
Всё знают и всё понимают только дураки да шарлатаны.(с)А.П Чехов.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH