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

Я работаю над тем, чтобы LCR (Least Cost Routing) работал с Freeswitch. Использование mod_lcr в Freeswitch 1.4.9. Я настроил это, и это работает. Моя установка на самом деле является экземпляром FusionPBX, но это не должно иметь значения для следующего обсуждения.

Проблема в том, что я хочу установить идентификатор вызывающего абонента для определенных маршрутов (то есть цифр), и я использую регулярные выражения в столбце cid таблицы LCR, как указано в документации.

Это работает, поскольку я могу видеть в выходных данных и журналах, что это устанавливает переменную "origination_caller_id_number". Однако телефон получателя не показывает этот идентификатор вызывающего абонента.

Также, если я установлю эту переменную "origination_caller_id_number" в абонентской группе без LCR, она, казалось бы, не привыкнет, и вызываемый никогда ее не увидит.

Если я установлю "имя_пользователя_пользователя", то вызываемый абонент увидит его.

Затем я попытался: использовать LCR в плане набора номеров в качестве приложения, затем установить значение active_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

Как видно из этого журнала, "origination_caller_id_number" ДОЛЖЕН быть установлен после запуска приложения LCR.

Кажется, что, когда LCR устанавливает "origination_caller_id_number", он находится в другой области видимости и не может быть получен из плана набора?

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

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

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

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

а также

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

1 ответ

Я решил это сам.

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

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

Другие вопросы по тегам