Estou trabalhando para que o LCR (Least Cost Routing) funcione com o Freeswitch.
Usando mod_lcr no Freeswitch 1.4.9. Eu configurei e está funcionando.
Minha instalação é na verdade uma instância do FusionPBX, mas isso não importa para a discussão a seguir.
O problema é - eu quero definir o identificador de chamadas para rotas específicas (ou seja, dígitos) e estou usando regexes na coluna cid da tabela LCR, conforme a documentação.
Está funcionando, pois eu posso ver na saída e registra que isso define a variável "origination_caller_id_number". No entanto, o telefone de destino não mostra esse identificador de chamadas.
Além disso, se eu definir essa variável "origination_caller_id_number" no plano de discagem sem LCR, ela não será usada de maneira aparentemente aparente e o destinatário nunca a verá.
Se eu definir "effective_caller_id_name", o candidato a verá.
Em seguida, tentei: usar LCR no plano de discagem como aplicativo e, em seguida, definir effective_caller_id_name = $ {origination_caller_id_number}, que deveria ter sido definido pelo aplicativo LCR, depois chamar BRIDGE com a variável "auto_lcr_route".
Veja o XML aqui:
<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>
A chamada é completada com sucesso, mas não define o "effective_caller_id_name".
A seção "Log do aplicativo" dos dados do CDR do FusionPBX mostra
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
Como você pode ver neste log, o "origination_caller_id_number" DEVE ter sido definido após a execução do aplicativo LCR.
Parece que quando a LCR define "origination_caller_id_number", ela está em outro escopo e não pode ser recuperada do plano de discagem?
Então, há duas perguntas:
- Por que o identificador de chamadas não é exibido quando o aplicativo de ponte usa a variável "origination_caller_id_number"?
As chances são de que o provedor de telefone receptor pode não entender o que está sendo enviado, ou talvez use apenas "..._ nome" em vez de "..._ número" - mas mod_lcr só define essa variável - o que me leva ao segundo pergunta:
- A variável está realmente sendo definida executando o aplicativo LCR ou isso acontece apenas na execução de BRIDGE?
e
- Por que não consigo definir "effective_caller_id_name" recuperando o valor de "origination_caller_id_number"?
aparentemente, o valor está sendo definido pelo aplicativo LCR, mas não consigo recuperá-lo do plano de discagem. A documentação do Freeswitch é muito nebulosa sobre questões de escopo - então isso é normal? Posso fazer algo para chegar a esse valor?