Я работаю над тем, чтобы LCR (маршрутизация с наименьшей стоимостью) работала с Freeswitch. Использование mod_lcr в Freeswitch 1.4.9. Я его настроил, и он работает. Моя установка на самом деле является экземпляром FusionPBX, но это не должно иметь значения для следующего обсуждения.
Проблема в том, что я хочу установить идентификатор вызывающего абонента для определенных маршрутов (т.е. цифр), и я использую регулярные выражения в столбце cid таблицы LCR в соответствии с документацией.
Он работает, поскольку я вижу в выходных данных и журналах, что это устанавливает переменную "origination_caller_id_number". Однако на телефоне назначения этот идентификатор вызывающего абонента не отображается.
Также, если я устанавливаю эту переменную "origination_caller_id_number" в схеме набора без LCR, она, по-видимому, не используется, и вызываемый абонент никогда ее не видит.
Если я установил «имя_файлового_вызывателя», то вызываемый его увидит.
Затем я попробовал: использовать LCR в плане набора в качестве приложения, затем установить Effective_caller_id_name = $ {origination_caller_id_number}, который должен был быть установлен приложением LCR, затем вызвать BRIDGE с переменной «auto_lcr_route».
См. XML здесь:
<extension name="LCR.Route.1" >
<condition field="destination_number" expression="^300(\d{9,17})$" >
<action application="set" data="sip_h_X-accountcode=${accountcode}" />
<action application="set" data="sip_h_X-Tag=" />
<action application="set" data="call_direction=outbound" />
<action application="set" data="hangup_after_bridge=true" />
<action application="set" data="inherit_codec=true" />
<action application="set" data="continue_on_fail=true" />
<action application="lcr" data="$1" />
<action application="set" data="effective_caller_id_name=${origination_caller_id_number}" />
<action application="bridge" data="${lcr_auto_route}" />
</condition>
</extension>
Вызов завершается успешно, но он вообще не устанавливает "имя_фактора_эффективного_вызывателя".
Данные FusionPBX CDR «Раздел журнала приложений» показывают
Application Log
Name Data
set call_direction=outbound
set call_direction=outbound
set hangup_after_bridge=true
set inherit_codec=true
set continue_on_fail=true
lcr xxxxxxxx
set effective_caller_id_name= <--------- nothing set here. Phone shows SIP "FROM" user.
bridge [lcr_carrier=carrier1,lcr_rate=0.15552,origination_caller_id_number=
99999999]sofia/gateway/cae1e311-8cbc-4ae9-af28-1e2d9706779a/xxxxxxx|
[lcr_carrier=carrier2,lcr_rate=0.90625,origination_caller_id_number=
99999999]sofia/gateway/09266491-caee-4e67-920e-a30c2610a84c/xxxxxxxx
Как видно из этого журнала, "origin_caller_id_number" ДОЛЖЕН быть установлен после запуска приложения LCR.
Кажется, что когда LCR устанавливает "origination_caller_id_number", он находится в другой области и не может быть получен из диалплана?
Итак, есть два вопроса:
Скорее всего, принимающий телефонный провайдер может не понимать, что отправляется, или, возможно, использует только "..._ name" вместо "..._ number", но mod_lcr устанавливает только эту одну переменную, что подводит меня ко второму вопросу:
и
Я разобрался сам.
Чтобы ответить на вопросы:
Отображается ли номер как идентификатор вызывающего абонента на удаленном телефоне, зависит от поставщика услуг / оператора связи (в основном, на стороне отправителя).
Нет, приложение LCR не устанавливает переменные канала. Он устанавливает несколько собственных переменных, наиболее известной из которых является «auto_lcr_route». Он содержит значение результата вызова LCR. Только при вызове "BRIDGE" будут установлены переменные канала.
Ответ на этот вопрос дан в (2) - на этом этапе не было задано никаких переменных, кроме «lcr_auto_route». Так что, в конце концов, это не проблема масштабирования.
Я решил это путем извлечения значения "origination_caller_id_number" из lcr_auto_route значение переменной с регулярным выражением, например:
<action application="lcr" data="$1" />
<action application="set" data="effective_caller_id_name=${regex(m:~${lcr_auto_route}~^(.*)origination_caller_id_number=(.*?)](.*)$~%2)}" />
<action application="bridge" data="${lcr_auto_route}" />
Обратите внимание, что вам нужно использовать символ ~ и префикс регулярного выражения с «m:» (а не обычный «|»), потому что auto_lcr_route может содержать несколько маршрутов вызова, разделенных знаком "|" персонаж.