Добрый вечер всем! Для разделения звонков по EXT, приходящих через один транк, использую инструкции из сайта FreePBX.
Файл: extensions_custom.conf
[custom-get-did-from-sip]
;Get the DID of a SIP trunk when the provider doesnt send it
exten => s,1,Noop(Fixing DID using information from SIP TO header)
exten => s,n,Set(pseudodid=${SIP_HEADER(To)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,@,1)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,:,2)})
exten => s,n,Goto(from-trunk,${pseudodid},1)
Но не тут то было. Заметил, что Elastix сам создает на каждый транк Context типа: context=from-trunk-sip-ИмяТранка
Хорошо, нашел:
[from-trunk-sip-ИмяТранка]
include => from-trunk-sip-ИмяТранка-custom
exten => _.,1,Set(GROUP()=OUT_8)
exten => _.,n,Goto(from-trunk,${EXTEN},1)
и записал в файл extensions_custom.conf
[from-trunk-sip-ИмяТранка-custom]
exten => s,1,Noop(Fixing DID using information from SIP TO header)
exten => s,n,Set(pseudodid=${SIP_HEADER(To)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,@,1)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,:,2)})
exten => s,n,Goto(from-trunk,${pseudodid},1)
Не работает. Добавил то же в файл extensionsoverrideelastix.conf Не помогает.
Что я не так делаю? asterisk 1.8.11.0 + freepbx 2.8.1 + elastix 2.3.0
Olpag, сорри, не заметил сразу ответ. Действительно, неизвестно как он обрабатывает эти инклюды. Вроде уже все перепробовал. Работает только [from-pstn-custom], но при наборе своих номеров, зацикливается. В остальных вариантах просто не обрабатывает. Например, сейчас:
PBX*CLI> dialplan show from-trunk-sip-FreecoNet_(vensys) [ Context 'from-trunk-sip-FreecoNet_(vensys)' created by 'pbx_config' ]
'_.' => 1. Set(GROUP()=OUT_8) [pbx_config]
2. Goto(from-trunk,${EXTEN},1) [pbx_config]
Include => 'from-trunk-sip-FreecoNet_(vensys)-custom' [pbx_config]
-= 1 extension (2 priorities) in 1 context. =-
'[from-trunk-sip-FreecoNet(vensys)-custom]' находится в 'extensionsoverride_freepbx.conf'
PBX*CLI> dialplan show from-trunk-sip-FreecoNet_(vensys)-custom [ Context 'from-trunk-sip-FreecoNet_(vensys)-custom' created by 'pbx_config' ]
'_.' => 1. Noop(Fixing DID using information from SIP TO header) [pbx_config]
2. Set(pseudodid=${SIP_HEADER(To)}) [pbx_config]
3. Set(pseudodid=${CUT(pseudodid,@,1)}) [pbx_config]
4. Set(pseudodid=${CUT(pseudodid,:,2)}) [pbx_config]
5. Goto(from-trunk-sip-FreecoNet_(vensys),${pseudodid},1) [pbx_config]
-= 1 extension (5 priorities) in 1 context. =-
Но в результате получаю ту же картину. При записи в файл 'extensionscustom.conf' или изменении "." на "vensys" ничего не меняется:
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Executing [vensys@from-trunk-sip-FreecoNet_(vensys):1] Set("SIP/FreecoNet_(vensys)-00000001", "GROUP()=OUT_8") in new stack
-- Executing [vensys@from-trunk-sip-FreecoNet_(vensys):2] Goto("SIP/FreecoNet_(vensys)-00000001", "from-trunk,vensys,1") in new stack
-- Goto (from-trunk,vensys,1)
-- Executing [vensys@from-trunk:1] Set("SIP/FreecoNet_(vensys)-00000001", "__FROM_DID=vensys") in new stack
-- Executing [vensys@from-trunk:2] NoOp("SIP/FreecoNet_(vensys)-00000001", "Received an unknown call with DID set to vensys") in new stack
-- Executing [vensys@from-trunk:3] Goto("SIP/FreecoNet_(vensys)-00000001", "s,a2") in new stack
-- Goto (from-trunk,s,2)
-- Executing [s@from-trunk:2] Answer("SIP/FreecoNet_(vensys)-00000001", "") in new stack
-- Executing [s@from-trunk:3] Wait("SIP/FreecoNet_(vensys)-00000001", "2") in new stack
-- Executing [s@from-trunk:4] Playback("SIP/FreecoNet_(vensys)-00000001", "ss-noservice") in new stack
Это глюк у меня или у Elastix? и как с ним бороться?
И на этом спасибо. Действительно, только учусь.
Лог таков:
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Executing [vensys@from-trunk-sip-ИмяТранка:1] Set("SIP/ИмяТранка-00000000", "GROUP()=OUT_8") in new stack
-- Executing [vensys@from-trunk-sip-ИмяТранка:2] Goto("SIP/ИмяТранка-00000000", "from-trunk,vensys,1") in new stack
-- Goto (from-trunk,vensys,1)
-- Executing [vensys@from-trunk:1] Set("SIP/ИмяТранка-00000000", "__FROM_DID=vensys") in new stack
-- Executing [vensys@from-trunk:2] NoOp("SIP/ИмяТранка-00000000", "Received an unknown call with DID set to vensys") in new stack
-- Executing [vensys@from-trunk:3] Goto("SIP/ИмяТранка-00000000", "s,a2") in new stack
-- Goto (from-trunk,s,2)
-- Executing [s@from-trunk:2] Answer("SIP/ИмяТранка-00000000", "") in new stack
-- Executing [s@from-trunk:3] Wait("SIP/ИмяТранка-00000000", "2") in new stack
-- Executing [s@from-trunk:4] Playback("SIP/ИмяТранка-00000000", "ss-noservice") in new stack
-- <SIP/ИмяТранка-00000000> Playing 'ss-noservice.gsm' (language 'en')
есть куча вариантов.
самый простой - у вас звонок приходит не в s context как вы написали,а например на номер 123456. что с вашим диалпланом работаь не будет.
вообещ начните с общей книги по астериску. и посмотрите вывод на консоли
asterisk -vvvvr
Астериск, непонятно каким образом, делает инклюды... выполните команду:
dialplan show from-trunk-sip-ИмяТранка
Скорее всего у Вас будет такой вывод:
[ Context 'from-trunk-sip-ИмяТранка' created by 'pbx_config' ]
'_.' => 1. Set(GROUP()=OUT_8) [pbx_config]
2. Goto(from-trunk,${EXTEN},1) [pbx_config]
Include => 'from-trunk-sip-ИмяТранка-custom' [pbx_config]
Поэтому до выполнения вашего кастом контекста дело не дойдет. Ну и судя по логу, у вас _FROMDID=vensys, а не _FROMDID=s
meral Вам уже писал, что нажо заменить s,1 на vensys,1 и т.д. Перепишите контекст [from-trunk-sip-ИмяТранка] в extensions_override _freepbx.conf таким образом:
[from-trunk-sip-ИмяТранка]
exten => vensys,1,Noop(Fixing DID using information from SIP TO header)
exten => vensys,n,Set(pseudodid=${SIP_HEADER(To)})
exten => vensys,n,Set(pseudodid=${CUT(pseudodid,@,1)})
exten => vensys,n,Set(pseudodid=${CUT(pseudodid,:,2)})
exten => vensys,n,Goto(from-trunk-sip-ИмяТранка-original,${pseudodid},1)
[from-trunk-sip-ИмяТранка-original]
include => from-trunk-sip-ИмяТранка-custom
exten => _.,1,Set(GROUP()=OUT_8)
exten => _.,n,Goto(from-trunk,${EXTEN},1)
Оператор прислал инструкцию:
exten => _.,1,Set(TOHDR=${SIP_HEADER(To)})
exten => _.,2,Set(SWITCH=${REGEX("222502292" ${TOHDR})})
exten => _.,3,GotoIf($["${SWITCH}" = "1"]?from-internal,203,1)
Но вопрос с том, что не обрабатывается custom context. Согласно лога дальше
[from-trunk-sip-ИмяТранка]
include => from-trunk-sip-ИмяТранка-custom
exten => _.,1,Set(GROUP()=OUT_8)
exten => _.,n,Goto(from-trunk,${EXTEN},1)
не следует. Как сделать так, чтобы сначало выполнялся customs context из файла extensions_custom.conf
или на крайний случай из extensions_override_elastix.conf
.
Использую пока стандартную инсталляцию с ISO-диска без каких-либо изменений.
До этого использовал и пока использую железяку ZX50, которая внутри имеет Asterisk 1.4 и проблему решил созданием транка на каждый номер. Но это не выход, иметь 25 транков.
На специализированные форумы обращаются менее опытные, дабы получить помощь от более опытных. Вижу некоторые отвечающие или не владеют темой, или ищут доп. заработок, или им просто нечего делать. Посмеяться можно на сайте анекдот.ру.
Повторяю вопрос: Как заставить обрабатываться custom context из файла extensions_custom.conf в конфигурации asterisk 1.8.11.0 + freepbx 2.8.1 + elastix 2.3.0 в первую очередь? используется для извлечения DID номера из заголовка, поскольку оператор его не отправляет.
Я настраивал достаточно интегрированных систем, но в основном через GUI-интерфейс с минимальными правками конфиг. файлов. Заранее спасибо за конструктивную помощь.
bsa (May 15 '12)editСпасибо, уже близко. Буду очень благодарен, если поможете с правильным диалпланом. У меня нет сейчас from-pstn-custom. А что за строка, привожу без изменений...
Dla połączeń przychodzących należy wydobyć informacje o numerze z nagłówka "To:"
exten => _.,1,Set(TOHDR=${SIP_HEADER(To)}) ///(pobranie nagłówka)
exten => _.,2,Set(SWITCH=${REGEX("221234567" ${TOHDR})}) ///(badanie czy połączenie przyszło na numer np. 221234567)
Potem można skoczyć do odpowiedniego kontekstu i extension dla tego numeru:
exten => _.,3,GotoIf($["${SWITCH}" = "1"]?kontekst,extension,1) ///(przekazanie do kontekstu, extena na priorytet 1)
Dla połączeń wychodzących trzeba odpowiednio ustawić prezentacje (w panelu musi być "- użyj z bramki -"):
exten => _.,1,Set(CALLERID(number)=48221234567)
Но мне больше понравилась инструкция:
<a href="http://www.freepbx.org/support/documentation/howtos/how-to-get-the-did-of-a-sip-trunk-when-the-provider-doesnt-send-it-and-">http://www.freepbx.org/support/documentation/howtos/how-to-get-the-did-of-a-sip-trunk-when-the-provider-doesnt-send-it-and-</a>
bsa (May 16 '12)editТот же вопрос: 'http://asteriskforum.ru/viewtopic.php?printertopic=1&t=9431&start=0&postdays=0&postorder=asc&vote=viewresult"
Отзовитесь, кто знает ответ.
Или куда вставить custom context, чтобы он обрабатывался перед 'from-trunk'?
bsa (May 16 '12)editПутем проб и ошибок добавил в extensions_custom.conf:
[from-pstn-custom]
exten => _.,1,NoOp(Fixing DID using information from SIP TO header)
exten => _.,n,NoOp(Original CallerID = ${CALLERID(num)})
exten => _.,n,NoOp(Original TOHDR = ${TOHDR})
exten => _.,n,Set(pseudodid=${SIP_HEADER(To)})
exten => _.,n,Set(pseudodid=${CUT(pseudodid,@,1)})
exten => _.,n,Set(pseudodid=${CUT(pseudodid,:,2)})
exten => _.,n,Set(CALLERID(num)=48${pseudodid:1})
exten => _.,n,NoOp(Original CallerID = ${CALLERID(num)})
exten => _.,n,Goto(ext-did,${CALLERID(num)},1)
теперь работает. Тестирую
bsa (May 17 '12)editЗадан: May 14 '12
Просмотрен: 9,922 раз
Обновлен: May 19 '12
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
Что значит "Не работает"? Что пишет в консоли? dialplan reload делали? И отформатируйте код, смотреть невозможно.
Aven (May 14 '12)edit