Назад | Перейти на главную страницу

Freeswitch настраивает идентификатор вызывающего абонента с помощью mod_lcr

Я работаю над тем, чтобы 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", он находится в другой области и не может быть получен из диалплана?

Итак, есть два вопроса:

  1. Почему идентификатор вызывающего абонента не отображается, когда приложение-мост использует переменную origination_caller_id_number?

Скорее всего, принимающий телефонный провайдер может не понимать, что отправляется, или, возможно, использует только "..._ name" вместо "..._ number", но mod_lcr устанавливает только эту одну переменную, что подводит меня ко второму вопросу:

  1. Действительно ли переменная устанавливается при запуске приложения LCR или это происходит только при выполнении BRIDGE?

и

  1. Почему я не могу установить «эффективный_идентификатор_компьютера», получив значение «origin_caller_id_number»? значение явно устанавливается приложением LCR, но я не могу получить его из диалплана. Документация Freeswitch очень туманна в отношении проблем с областью видимости - так это нормально? Могу ли я что-то сделать, чтобы достичь этого значения?

Я разобрался сам.

Чтобы ответить на вопросы:

  1. Отображается ли номер как идентификатор вызывающего абонента на удаленном телефоне, зависит от поставщика услуг / оператора связи (в основном, на стороне отправителя).

  2. Нет, приложение LCR не устанавливает переменные канала. Он устанавливает несколько собственных переменных, наиболее известной из которых является «auto_lcr_route». Он содержит значение результата вызова LCR. Только при вызове "BRIDGE" будут установлены переменные канала.

  3. Ответ на этот вопрос дан в (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 может содержать несколько маршрутов вызова, разделенных знаком "|" персонаж.