AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Подмена CALLERID с подвывертом

Asterisk IP PBX 8 сообщений -
#1

День добрый, не могу сообразить, помогите решить задачку. Есть АТС ходящая по PRI на астер с кучей телефонов, по сути являющаяся просто FXS шлюзом. Маршрутизация настроена по принципу приходящего номера т.е.

Код:

[macro-access]
;сотовые урфо
exten => s/543,1,Goto(phones_urfosot,${ARG1},1)
exten => s/566,1,Goto(phones_urfosot,${ARG1},1)
;межгород
exten => s/147,1,Goto(phones_far,${ARG1},1)
exten => s/516,1,Goto(phones_far,${ARG1},1)
exten => s/550,1,Goto(phones_far,${ARG1},1)


Встала задача сделать пару телефонов "параллельными", т.е. при звонке на определенный номер, звонят два аппарата, при звонке с этих аппаратаов определяется одинаковый номер, вроде всё просто во входящем контексте

Код:
exten => 549,1,Dial(DAHDI/g0/${EXTEN}&DAHDI/g0/762,,t)


а вот с исходящим проблема... думал просто подменить CALLERID у 762, но т.к. диалплан завязан на номере звонящего то после смены этого CALLERID сессия рвётся Sad т.е.
Код:
exten => s/762,1,Set(CALLERID(num)=549)
exten => s/762,n,Goto(phones_town,${ARG1},1)


Код:

Executing [999@incoming:1] Macro("DAHDI/i1/762-cd5a", "access,999") in new stack
-- Executing [s@macro-access:1] Set("DAHDI/i1/762-cd5a", "CALLERID(num)=549") in new stack
-- Auto fallthrough, channel 'DAHDI/i1/762-cd5a' status is 'UNKNOWN'
-- Hungup 'DAHDI/i1/762-cd5a'


и вот с какого боку тут подайти пока опыта не хватает.
#2

Код:
[tests]
exten => 14/6010,1,NoOp(6010)

[users]
exten => 15,1,Set(CALLERID(num)=6010)
exten => 15,n,Goto(tests,14,1)

Цитата:
-- Executing [15@users:1] Set("SIP/6003-0000581d", "CALLERID(num)=6010") in new stack
-- Executing [15@users:2] Goto("SIP/6003-0000581d", "tests,14,1") in new stack
-- Goto (tests,14,1)
-- Executing [14@tests:1] NoOp("SIP/6003-0000581d", "6010") in new stack

Код:
[macro-testCID]
exten => s/6010,1,NoOp(6010)
[users]
exten => 15,1,Set(CALLERID(num)=6010).
exten => 15,n,Macro(testCID)

Цитата:
-- Executing [15@users:1] Set("SIP/6003-00005822", "CALLERID(num)=6010") in new stack
-- Executing [15@users:2] Macro("SIP/6003-00005822", "testCID") in new stack
-- Executing [s@macro-testCID:1] NoOp("SIP/6003-00005822", "6010") in new stack

Иными словами все работает. Asterisk 1.8

Судя по
Цитата:
-- Executing [s@macro-access:1] Set("DAHDI/i1/762-cd5a", "CALLERID(num)=549") in new stack

если ваш диалплан действительно такой как вы привели. то вы выставляете CALLERID в самом макро, а надо ДО вызова вашего macro-access.

Так же всегда есть возможность изобразить с GotoIf:
Код:
exten => s,n,GotoIf($["${CALLERID(num)}" = "762"]?pass:drop)

_________________
mega-net.ru - IT аутсорсинг
#3

так а в чем разница то в макросе это делать или до? Мне же всё равно надо как то выбрать номер звонящего, а не подменять все CALLERID подряд. т.е. для вашего примера это дожно будет выглядеть как

Код:


[macro-testCID]
exten => s/6010,1,NoOp(6010)
[users]
exten => 15/555,1,Set(CALLERID(num)=6010).
exten => 15/555,n,Macro(testCID)



что в итоге приведет к тем же проблемам.
#4

а вот идея с проверкой CALLERID через gotoif решила вопрос! спасибо!
#5

Разница в том, что CID нужно выставить ДО того как диалплан дойдет до места где этот самый CID будет проверяться. И не надо менять всем подряд, меняйте тем кому это необходимо.
Я вам наглядно на тестах показал что все работает, о каких проблемах вы говорите мне не совсем понятно.

ещё один вариант для gotoif без смены CID`а это проверять наличие/отсутствие/значение некой переменной на канале, а эту переменную добавлять нужным пирам в sip.conf:
Код:
[hostTest](locuser)
callerid="Test"
...skiped..
setvar=myVar=1
...skiped..

[hostTest2](locuser)
callerid="Test2"
...skiped..
setvar=myVar=2
...skiped..

Ну и в диалплане:
Код:
exten => s,n,GotoIf($["${myVar}" > "0"]?step1:cancel)

или
Код:
exten => s,n,GotoIf($["${myVar}" = "1"]?step2:cancel)
exten => s,n,GotoIf($["${myVar}" = "2"]?step3:cancel)

Тогда и CID менять не надо, основываясь на значении и сравнении значения можно накалякать какие угодно права доступа к выходу в ТФоП.

_________________
mega-net.ru - IT аутсорсинг
#6

Цитата:
Разница в том, что CID нужно выставить ДО того как диалплан дойдет до места где этот самый CID будет проверяться.


По CID я фильтрую доступные звонящему направления, если его выставлять ДО момента где он проверяется, то я лишаюсь возможности его отфильтровать.


проблема была в том что при структуре

exten => _./CID смена CID - всё разваливалось, т.к. менялся экстеншен, а вот с вариантом gotoif всё нормально, проблема решена.
#7

nsdonner писал(а):
то я лишаюсь возможности его отфильтровать

Либо вы меня не понимаете, либо я вас. Вообщем выше, в своих тестах, я привел, то как это должно и может работать.

_________________
mega-net.ru - IT аутсорсинг
#8

"С подвывертом" люблю женщин, понимающих толк в Subj Smile
_________________
http://mh.otx.ru SIP/E1 шлюзы Alvis, Добавь E1 к Asterisk, Проапгрейди Заказчику TDA/LDK!
NEW! Alvis-GW-2E1-L по 29500р, спеши! цены