Este post tem por objetivo demonstrar como realizar a identificação de chamadas através do Asterisk usando uma placa analógica FXO.
A maioria das operadoras no Brasil utiliza sinalização Padrão do Asterisk, porem a Net, VIVO e a OI utilizam outro tipo de sinalização. A boa notícia é que podemos realizar essa identificação sem a necessidade de conversor DTMF para FXS como muitos fóruns sugerem.
Ambiente
- Asterisk 1.8.26;
- DAHDI 2.9.2;
- Placa FXO X100P;
- NetFone Arris TG862
Troubleshooting
No Asterisk o módulo responsável pela identificação do CALLERID é o chan_dahdi e normalmente o seu arquivo de configuração está localizado em /etc/asterisk/chan_dahdi.conf e detém 3 variáveis que controlam o funcionamento dessa identificação:
- usecallerid: Define se o Asterisk deve ou não o caller ID, "yes" ou "no" são as unicas opções disponíveis
- cidsignalling: Determina o tipo de sinalização usada para o caller ID. As sinalizações suportadas pelo Asterisk são:
bell: bell202 usada nos Estados Unidos (padrão do Asterisk)
v23: v23 usada no Reino Unido
v23_jp: v23 usado no Japão
dtmf: DTMF usado por Dinamarca, Suécia, Holanda e por algumas operadoras aqui no Brasil (NET, VIVO e OI) - cidstart: Determina o sinal de início do caller ID. As opções suportadas pelo Asterisk São:
ring: O início é ao início sinal ring (padrão do Asterisk)
polarity: A inversão de polaridade sinaliza o início
polarity_IN: A inversão de polaridade sinaliza o início, a detecção de tom de discagem DTMF na Índia
dtmf: O caller ID é recebido através de tons dtml que ocorrem antes do sinal ring.
Se o cidstart for configurado como dtmf, o nível do sinal da linha precisa ser ajustado para a correta identificação dos tons DTMF. Este ajuste ocorre através do parâmetro dtmfcidlevel. O padrão deste padâmetro é 256, porém pode ser ajustado conforme sua necessidade, quanto maior o valor menor será a detecção de falsos tons DTMF.
Segue abaixo um exemplo dessa configuração no arquivo /etc/asterisk/chan_dahdi.conf.
[sourcecode language="shell"][channels]
...
usecallerid=yes
cidsignalling=bell
cidstart=ring
...
[/sourcecode]
Nota: "..." indica outras configurações não relacionadas a identificação do caller ID.
Identificando o caller ID em NetFone, VIVO e OI
Segue abaixo o trecho de parâmetros do arquivo o /etc/asterisk/chan_dahdi.conf para que ocorra a identificação correta do caller ID
[sourcecode language="shell"][channels]
...
usecallerid=yes
cidsignalling=dtmf
cidstart=dtmf
dtmfcidlevel=7640
...
[/sourcecode]
Exemplo de configuração, e log na console do Asterisk
Segue abaixo um trecho do arquivo extensions.conf
[sourcecode language="shell"]exten = s,1,NoOP(Chamada entrando ${CALLERID(num)})
exten = s,n,Dial(SIP/2000,15,r)
[/sourcecode]
Saída em tela ao entrar a ligação. Nível verbose do asterisk definido como 4.
[sourcecode language="shell"] == Starting DTMF CID detection on channel 1
-- Starting simple switch on 'DAHDI/1-1'
-- Executing [s@default:1] NoOp("DAHDI/1-1", "Chamada entrando 04198xxxxxx") in new stack
-- Executing [s@default:2] Dial("DAHDI/1-1", "SIP/2000,15,r") in new stack
[/sourcecode]
Fonte para Troubleshooting
http://kb.digium.com/articles/Configuration/Troubleshooting-missing-caller-ID-on-Analog-calls