Chan_Dongle completo e total

A Tempo:

Depois de muitas vagabundagens de gente vendendo o que nosso amigo Giovanni Bosa deixou de graça, resolvi postar aqui para que fique fácil do pessoal achar a melhor referencia de chan_dongle brasileira
agradescendo ao grande amigo #Chokitopx.

Introdução

O chan_dongle é um channel driver por Asterisk utilizar modem Huawei UMTS/3G USB (datacard) como gateway de VOZ e SMS

Neste momento som compatíveis só os modem originais Huawei (ver requisitos) e os recursos suportados são:

  • Chamadas de voz, discagem por nome do modem, grupos, round robin, nome da operadora, IMEI or IMSI.
  • Chamada em pausa e espera
  • Conferências
  • Enviar SMS com CLI, asterisk manager e dialplan
  • Receber SMS (caracteres latinos e multilinha)
  • Enviar USSD
  • Receber USSD (caracteres latinos e multilinha)
  • Enviar DTMF (excluindo letras A,B,C,D por não ser suportadas pela Huawei)
  • Receber DTMF
    Requisitos e limitações 

Nota: Alguns usuários relatam a qualidade de voz ruim usando Centos 5 (ex. Elastix). Então por favor, tenham cuidado com os kernels antigos.

Lista Modem testados no Brasil:

  • E153
  • E1550 Precisa ativar voz (Euro 4 DC-Unlocker)
  • E156 Precisa instalar novo firmware- As vez precisa habilitar VOZ (Euro 4 DC-Unlocker)
  • E160 Precisa instalar novo firmware – As vez precisa habilitar VOZ (Euro 4 DC-Unlocker)
  • E173 Coitado funciona só com firmware 11.xx
  • E303 Tem muitos firmwares diferentes, algum vem prontos e outros precisa ativar voz (Euro 4)

Alimentação USB
De acordo com as especificas do produtor os modem 3G utilizam 5V/500mA ou seja 2.5W máximos. Quase todo os computadores tem portas USB onde você; pode conectar dispositivos como Pen-Drives, Bluetooth, discos rígidos portáteis, etc. modems 3G também pode ser conectado, mas a fonte de energia (5V) pode ser uma limitação seria. Se o seu computador tem varias portas USB, você; deve verificar se sua placa mãe pode alimentar todo os seus dispositivos para trabalhar ao mesmo tempo. Normalmente, as portas USB podem entregar apenas 500 mA, por isso, se você; tiver mais de um modem (ou outros dispositivos) ligado, é possível ficar preso com problemas estranhos pois se conectar mais de um modem 3G os 500 mA de corrente não são mais suficientes. Neste caso, o utilizo de hub USB 2.0 com fonte auxiliar é recomendado para evitar um comportamento estranho. Tenham cuidado, não é qualquer modelo de HUB USB que preste por esta tarefa, alguns tens sérios problemas com interferências de RF do lado GSM, tornando impossível usar chan_dongle.

HUB USB: Importante o uso de HUB USB 2.0!
Preparação dos modem

Como desbloquear um modem?
Modems são frequentemente comprados a partir de operadoras de telefonia móvel e as vezes tem o bloqueio para impedir o uso de cartões SIM de outras operadoras ou tem o recurso de voz desativado ou não suportado..

Tem diferentes maneiras de desbloquear:

  • Com o código de desbloqueio usando esta calculadora, uma vez que você; tem o código digite-o manualmente com programas como Putty, Terminal ou Minicom usando o comando
    AT^CardLock = "code"
  • Usando ferramentas como o dc-unlocker ou outra ferramenta semelhante (custo EUR4)
  • Pedindo ajuda neste Forum
  • Procurando em Google

Como atualizar o firmware?
A principal fonte de arquivos firmware estão em DC-Files. Você pode escolher o seu modelo e baixar atualização de firmware (normalmente zip contendo o arquivo exe.). Para a atualização, precisa um computador windows (XP, Vista, 7, 8), o processo é muito simples, só executar o arquivo exe e siga as indicações.

Em algum caso o procedimento de atualização peça um código ‘Flash’ (senha), use sempre a calculadora para gerar o código ‘Flash’. Após o processo de atualização, execute o programa dc-unlocker para verificar se a voz é ativada.

Como verificar o recurso de voz?
Existe uma grande quantidade de diferentes modelos de Huawei. Principalmente são utilizados para trafegar dados de Internet, mas alguns são capazes de trafegar também a voz. Isto significa que se pode fazer chamadas utilizando o software compatível, pode baixar esta versão do Mobile Partner com recurso de voz para utilizar em sistemas Windows.

Para saber antes se o seu modem tem suporte a voz, você pode usar este sistemas:

  • Software Dc-Unlocker – Baixar versão mais recente (somente para Windows) e verifique se o seu modem tem
  • Encontre DDSETEX e sequencia CVOICE – Ir para http://www.dc-files.com, fazer download do firmware coreto para o seu modelo. Deve editar o arquivo .exe (use qualquer editor de texto como o Bloco de Notas ou nano) e procure DDSETEX e sequencia CVOICE. Se encontrados significa que o seu modem é capaz de voz.
  • Pedindo ajuda neste Forum
  • Procurando em Google

Como ativar o recurso de voz?
Se seu modem tem o recuso de voz desabilitado (Disabled) pode usar estes sistemas:

  • Sempre utilizando o software DC-Unlocker e pagando 4 créditos (4 Euros)
  • Tentando encontrar um firwmare, para o mesmo modelo, que tenha este recurso ativado de padrão
  • Pedindo ajuda neste Forum
  • Procurando em Google

 

Instalação Asterisk e Chan_Dongle

Quote

Quem quer instalar um sistema de teste completo com debian 7, Asterisk 11 e chan_dongle (atualizado e modificado por mim) pode seguir este trés tutoriais:

01 – Instalar Servidor Debian Wheezy 7.1.x
02 – Instalar Asterisk, Dahdi E Libpri
03 – Instalar Chan_Dongle No Asterisk 11

Ao final terão um sistema minimo ‘já pronto’ para testar chan_dongle

Lembrando que este documento visa a tradução do Wiki original: Chan_dongle pode ser executado somente no Asterisk 1.6/1.8 e existe uma versão adaptada por Asterisk 11.x que não é oficial.

Pré-requisitos
Tenha cuidado com iptables e SELinux. Se necessário, edite o arquivo /etc/selinux/config verificando se:

SELINUX=disabled
SELINUXTYPE=targeted

Em seguida, desative iptables (ou configure iptables para permitir SIP e RTP):

iptables -F
iptables-save
/etc/iptables.up.rules

Atualize o sistema:

apt-get update
apt-get upgrade

Instalar pacotes necessários para a compilação de Asterisk:

apt-get install linux-headers-`uname -r` gcc g++ make libnewt-dev libncurses5-dev openssl libssl-dev zlib1g-dev

Instalar Asterisk
Baixar arquivos de origem (explicando só o Asterisk 1.8 (outras versões som similares):

http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz
tar zxvf asterisk-1.8-current.tar.gz
cd asterisk-1.8

make clean
./configure --disable-xmldocs 
make
make install
make config

Se necessário:

make samples

Instalar chan_dongle
Se você instalou o Asterisk como descrito vá em frente. Enfim, confira algumas dependências como automake e autoconf. Também deve dispor de fontes asterisco e ferramentas de desenvolvimento, como make, gcc e assim por diante.

Pacote compactado:

Baixar pacote em https://code.google.com/p/asterisk-chan-dongle/downloads

tar -zxvf chan_dongle_1.1.r14.tgz
cd chan_dongle_1.1

aclocal
autoconf
automake -a

Usando SVN:

svn checkout http://asterisk-chan-dongle.googlecode.com/svn/trunk/ dongle-svn

cd dongle-svn
aclocal
autoconf
automake -a

Definir as opções de compilação:

./configure
--enable-debug
--disable-debug
--enable-manager
--disable-manager
--enable-apps
--disable-apps
--with-asterisk=/path_to_source/asterisk.h

variáveis ​​de ambiente uteis:

DESTDIR
CFLAGS
LDFLAGS

Exemplos:

DESTDIR=”/usr/lib/asterisk/modules” ./configure
./configure –with-asterisk=/usr/src/asterisk-1.6.2.13/include
CFLAGS=”-I /usr/src/asterisk-1.6.2.13/include” ./configure
./configure --enable-debug
./configure --disable-apps --disable-manager
CFLAGS=”-O0 -g” ./configure
CFLAGS=”-Os” ./configure

Padrão:

./configure --disable-debug --enable-apps --enable-manager

DESTDIR busca nas pastas /usr/lib/asterisk/modules /usr/local/lib/asterisk/modules /opt/local/lib/asterisk/modules
asterisk.h busca nas pastas ../include /usr/include /usr/local/include /opt/local/include
Compilação:

make
make install

Configuração do modulo: copiar o arquivo dongle.conf em /etc/asterisk/, configurar como da manual e reinicializar Asterisk.

Comandos para carregar modulo:

CLI: module load chan_dongle.so
CLI: module unload chan_dongle.so
CLI: module reload chan_dongle.so

 

Configuração dongle.conf

Todas as informações necessárias por chan_dongle som armazenadas em /etc/asterisk/dongle.conf

dongle.conf original:

[general]


interval=15                           ; Number of seconds between trying to connect to devices


;------------------------------ JITTER BUFFER CONFIGURATION --------------------------
;jbenable = yes  ; Enables the use of a jitterbuffer on the receiving side of a
                 ; Dongle channel. Defaults to "no". An enabled jitterbuffer will
                 ; be used only if the sending side can create and the receiving
                 ; side can not accept jitter. The Dongle channel can't accept jitter,
                 ; thus an enabled jitterbuffer on the receive Dongle side will always
                 ; be used if the sending side can create jitter.


;jbforce = no    ; Forces the use of a jitterbuffer on the receive side of a Dongle
                 ; channel. Defaults to "no".


;jbmaxsize = 200            ; Max length of the jitterbuffer in milliseconds.
;jbresyncthreshold = 1000   ; Jump in the frame timestamps over which the jitterbuffer is
                            ; resynchronized. Useful to improve the quality of the voice, with
                            ; big jumps in/broken timestamps, usually sent from exotic devices
                            ; and programs. Defaults to 1000.

;jbimpl = fixed   ;Jitterbuffer implementation, used on the receiving side of a Dongle
                  ; channel. Two implementations are currently available - "fixed"
                  ; (with size always equals to jbmaxsize) and "adaptive" (with
                  ; variable size, actually the new jb of IAX2). Defaults to fixed.


;jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set.
                    ; The option represents the number of milliseconds by which the new jitter buffer
                    ; will pad its size. the default is 40, so without modification, the new
                    ; jitter buffer will set its size to the jitter value plus 40 milliseconds.
                    ; increasing this value may help if your network normally has low jitter,
                    ; but occasionally has spikes.


;jblog = no         ; Enables jitterbuffer frame logging. Defaults to "no".
;-----------------------------------------------------------------------------------


[defaults]
; now you can set here any not required device settings as template
; sure you can overwrite in any [device] section this default values


context=default         ; context for incoming calls, SMS and USSD
group=0                 ; calling group
rxgain=0                ; increase the incoming volume; may be negative
txgain=0                ; increase the outgoint volume; may be negative
autodeletesms=yes       ; auto delete incoming sms
resetdongle=yes         ; reset dongle during initialization with ATZ command
u2diag=-1               ; set ^U2DIAG parameter on device (0 = disable everything except modem function) 
                        ; -1 not use ^U2DIAG command
usecallingpres=yes      ; use the caller ID presentation or not
callingpres=allowed_passed_screen ; set caller ID presentation. By default use default network settings
                        ; see http://www.the-asterisk-book.com/unstable/applikationen-setcallerpres.html
disablesms=no           ; disable of SMS reading from device when received. Enable this option to disable 
                        ; sms reception. Use smsaspdu=yes to avoid problem when SMS is too long in TEXT mode.
smsaspdu=yes            ; if 'yes' send SMS in PDU mode.
language=en             ; set channel default language
mindtmfgap=45           ; minimal interval from end of previews DTMF from begining of next in ms
mindtmfduration=80      ; minimal DTMF tone duration in ms
mindtmfinterval=200     ; minimal interval between ends of DTMF of same digits in ms


callwaiting=auto        ; if 'yes' allow incoming calls waiting; by default use network settings
                        ; if 'no' waiting calls just ignored
disable=no              ; if 'yes' no load this device and just ignore this section
exten=+1234567890       ; exten for start incoming calls, only in case of Subscriber Number not available!,
                        ; also set to CALLERID(dnid)

dtmf=relax              ; control of incoming DTMF detection, possible values:
                        ;  off    - off DTMF tone detection, voice data passed to asterisk unaltered
                        ;use this value for gateways or if you do not use IVR in diaplan
                        ;   inband - do DTMF tones detection
                        ;   relax  - like inband but with relaxdtmf option
                        ;   default is 'relax' for backward compatibility


; dongle required settings
[dongle0]
audio=/dev/ttyUSB1      ; tty port for audio connection;        
data=/dev/ttyUSB2       ; tty port for AT commands; 


; or you can omit both audio and data parameters and use imei=123456789012345 and/or imsi=612849384756451
; imei and imsi must contain exactly 15 digits !
;  imei/imsi discovery is available on Linux only


imei=123456789012345
imsi=612849384756451


; if you set audio and data parameter together with imei and/or imsi, audio and data is used.
; you can use both imei and imsi together. In this case exact match by imei and imsi is required. 

 

Exemplos dialplan – extensions.conf

; this is chunks of Asterisk extensions.conf file for show some chan_dongle features
[general]

[dongle-incoming]
; example of ussd receive
exten => ussd,1,Set(type=${USSD_TYPE})
        ; values from 0 till 5
        ;  0 - USSD Notify
        ;  1 - USSD Request
        ;  2 - USSD Terminated by network
        ;  3 - Other local client has responded
        ;  4 - Operation not supported
        ;  5 - Network time out

exten => ussd,n,Set(typestr=${USSD_TYPE_STR})
        ; type in string, see above

exten => ussd,n,Set(ussd=${USSD})
        ; USSD text, but may be truncated by first \n

exten => ussd,n,Set(ussd_multiline=${BASE64_DECODE(${USSD_BASE64})})
        ; USSD text, may be multiline
; Note:  this exten run in Local channel not attached to anything, also all CALLERID() is empty


; example of sms receive
exten => sms,1,Set(sms=${SMS})
        ; SMS text, but may be truncated by first \n

exten => sms,1,Set(sms_multiline=${BASE64_DECODE(${SMS_BASE64})})
        ; SMS text, may be multiline

; Note:  this exten run in Local channel not attached to anything, also CALLERID(num) is address of SMS originator


; example of begining context execution from not default exten
exten => +12345678901,1,Verbose(This exten executed if Subscriber Number is available and equal +12345678901 or exten setting value is +12345678901)


; example of channel variables setting by chan_dongle
exten => s,1,Set(NAME_OF_DEVICE=${DONGLENAME})
    ; for example 'dongle0' or 'dongle1' see dongle.conf

exten => s,n,Set(NAME_OF_PROVIDE=${DONGLEPROVIDER})
    ; for example see output of cli 'dongle show devices' column "Provider Name"

exten => s,n,Set(IMEI_OF_DEVICE=${DONGLEIMEI})
    ; for example see output of cli 'dongle show devices' column "IMEI"

exten => s,n,Set(IMSI_OF_SIMCARD=${DONGLEIMSI})
    ; for example see output of cli 'dongle show devices' column "IMSI"

exten => s,n,Set(CNUM_NUMBER=${DONGLENUMBER})
    ; Subscriber Number example see output of cli 'dongle show devices' column "Number"
    ;   may be empty, use for save in SIM commands AT+CPBS="ON" and  AT+CPBW=1,"+123456789",145

exten => s,n,Set(CNUM_NUMBER=${CALLERID(dnid)})
    ; Set to Subscriber Number if available


; applications of chan_DONGLE

exten => s,n,DongleStatus(dongle0,DONGLE0_STATUS)
    ; get status of device and store result in variable
    ; possible values of ${DONGLE0_STATUS}
    ;   -1 invalid argument
    ;    1 device not found
    ;    2 device connected
    ;    3 device connected and in use

exten => s,n,DongleSendSMS(dongle0, "+18004005422", Hello how are you, Danila?, 1440, yes)
    ; send SMS on selected device and to specified number
    ;   device                name of Dongle device
    ;   destination number    in International format with leading '+' or w/o leading '+'
    ;   message              maximum 70 UCS-2 symbols
    ;   validity period      in minutes, will be round up to nearest possible value, optional default is 3 days
    ;   report request        if true report for this SMS is required, optional default is not


; functions of chan_dongle

exten => s,n,GotoIf($["${CHANNEL(callstate)}" == "waiting"]?waiting-call)
    ; now we provide channel function argument callstate
    ;   possible values
    ;          active         ; enjoy and speek
    ;          held         ; this call is held
    ;          dialing       ; for outgoing calls
    ;          alerting     ; for outgoing calls, number dialed and called party ringing
    ;          incoming     ; for incoming calls
    ;          waiting       ; for incoming waiting calls;
    ;                             if callwaiting=no channels for waiting calls never created

    ;          initialize     ; never appear
    ;          released     ; never appear

    ; Answer on waiting call activate this call and place any other active calls
    ;   on hold, but execution of dialplan for these calls not break stopped or frozen
    ;   When active call terminated one of held becomes active.

exten => s,n,Set(CHANNEL(callstate)=active)
    ; if callstate is 'held' you can assign new value 'active'
    ;   its mean activate this call and place on hold all other active calls but
    ;   execution of dialplan for these calls not break stopped or frozen




exten => s,n,Dial(Dongle/g1/holdother:+79139131234)
exten => s,n,Dial(Dongle/r1/holdother:+79139131234)
exten => s,n,Dial(Dongle/p:PROVIDER NAME/holdother:+79139131234)
exten => s,n,Dial(Dongle/i:123456789012345/holdother:+79139131234)
exten => s,n,Dial(Dongle/s:25099/holdother:+79139131234)
    ; now we add option 'holdother' for dialing
    ;    this option do
    ;           1) When looking for available devices by group, provider IMEI,
    ;                   IMSI prefix not ignore devices with whose state does not
    ;                   prohibit a new outgoing call when other call place on hold
    ;
    ;           2) Before actual dialing place active calls on hold
    ;                  but execution of dialplan for these calls not break stopped or frozen
    ;           3) This call will be active if succesfully answered
; BUG !!!
;  tested for call waiting and hold features Huawei E1550 has a next bug:
;    When local side hangup any call including held call ALL other calls LOST sound
;    When remove side hangup active call ALL other calls LOST sound
; Please double check true this for you or not
;  If true reduce usage of this useful features


exten => s,n,Dial(Dongle/g1/conference:+79139131234)
exten => s,n,Dial(Dongle/r1/conference:+79139131234)
exten => s,n,Dial(Dongle/p:PROVIDER NAME/conference:+79139131234)
exten => s,n,Dial(Dongle/i:123456789012345/conference:+79139131234)
exten => s,n,Dial(Dongle/s:25099/conference:+79139131234)
    ; and also option 'conference' added
    ;    this option do
    ;           1) When looking for available devices by group, provider IMEI,
    ;                   IMSI prefix not ignore devices with whose state does not
    ;                   prohibit a new outgoing call when other call place on hold
    ;
    ;           2) Before actual dialing place active calls on hold
    ;                  but execution of dialplan for these calls not break stopped or frozen
    ;           3) If answered attach hold calls to conrefence (in term of GSM)
    ; Also if created outgoing channel place call on same device that incoming channel
    ;  both incoming and outgoing channels become readonly to avoid the voice loop.
    ;
    ; see also BUG !!! note above

 

Usando chan_dongle

Gerenciamento do modulo em Asterisk
Para o gerenciamento manual dos módulo pode usar os seguintes comandos no CLI de Asterisk:

  • module load chan_dongle.so
    Carregar o módulo em Asterisk. Configuração é em /etc/asterisk/dongle.conf
  • module unload chan_dongle.so
    Remover o modulo da Asterisk. Todos os modem serão desconectados.
  • module reload chan_dongle.so
    Atualizar configuração do arquivo de configuração. Se qualquer alteração for feita desde a última carga, vai ser aplicada agora.

CLI: comandos chan_dongle
chan_dongle oferece os seguintes comandos CLI:

  • dongle cmd <device> <at_command>
    Envia o comando AT <at_command> na porta serial do modem especificado como <device>
  • dongle reset <device>
    Envia o comando de reinicializar (AT+CFUN=1,1) ao modem indicado <device>
  • dongle stop gracefully <device>
    Para o <device> graciosamente. Impede novas chamadas/SMS/USSD mas permite que chamadas/SMS/USSD em andamento continuem. Quando todas as chamadas/SMS/USSD terminar, o <device> para
  • dongle stop now <device>
    para o <device> imediatamente. Para o <device> e fecha qualquer chamada/SMS/USSD em andamento imediatamente
  • dongle stop when convenient <device>
    Para o <device> quando conveniente. Aguarda até o <device> não ter chamadas/SMS/USSD em andamento, e, em seguida, ele para o <device>. Isso não impede que novas chamadas/SMS/USSD sejam realizadas no <device>.
  • dongle show device settings <device>
    Mostra as configurações do <device>
  • dongle show device state <device>
    Mostra estado detalhado do <device>
  • dongle show device statistics <device>
    Mostra Estatísticas do <device>
  • dongle show devices
    Visualiza o estado resumido de todos os dispositivos
  • dongle show version
    Mostra versão do modulo
  • dongle sms <device> <number> <message>
    Envia um SMS para o <number> com o <message> usando <device>
  • dongle pdu <device> <pdu>
    Enviar PDU usando <device>
  • dongle ussd <device> <ussd>
    Envia comando USSD <ussd> usando o <device>
  • dongle start <device>
    Inicializa o <device> se não for removido antes.
  • dongle restart gracefully <device>
    Impede novas chamadas/SMS/USSD em entrada e saída no <device> permitindo as chamadas/SMS/USSD em andamento de continuar. Quando as chamadas/SMS/USSD foi concluída o <device> será reiniciado. Reiniciar significa, primeiro parar dispositivo e segundo reabrir e inicializar.
  • dongle restart now <device>
    Reinicia o <device> imediatamente, acabando com todas as chamadas/SMS/USSD em andamento.
  • dongle restart when convenient <device>
    Aguarda até o <device> não ter chamadas/SMS/USSD em andamento e então reinicia o <device>. Isso não impede que novas chamadas/SMS/USSD de entrar no <device>
  • dongle remove gracefully <device>
    Impede novas chamadas/SMS/USSD em entrada e saída do <device> e mas permite chamadas/SMS/USSD em andamento continuar. Quando chamadas/SMS/USSD terminar, <device> parar e removido módulo.
  • dongle remove now <device>
    Remover <device> do Asterisk imediatamente.
  • dongle remove when convenient <device>
    Aguarda até o <device> não ter chamadas/SMS/USSD em andamento e em seguida remove o <device>. Isso não impede que novas chamadas/SMS/USSD de entrar no <device>.
  • dongle reload gracefully
    Recarrega a configuração do chan_dongle graciosamente
  • dongle reload now
    Recarrega a configuração chan_dongle agora
  • dongle reload when convenient
    Recarrega a configuração chan_dongle quando conveniente.

    BUG: complete removed devices from dongle.conf not removed from module after reload.
    Use disable = yes como solução alternativa.

Dialplan: Aplicações
Os seguintes aplicativos são fornecidos por chan_dongle:

  • DongleStatus(<Resource>, <Variable>)
  • DongleSendSMS(<Device>, <Destination> [,Message [, Validity [, Report]]])

Dialplan: Funções
As seguintes funções são fornecidas por chan_dongle:

CHANNEL(callstate)

A leitura pode ter estes valores:

  • active
  • held
  • dialing
  • alerting
  • incoming
  • waiting
  • initialize
  • released
  • unknown

Por exemplo, você pode separar as chamadas recebidas a partir de espera:

[dongle-incoming]
exten => s,1,GotoIf($["${CHANNEL(callstate)}" = "waiting"]?waiting-call)

Além disso, você pode atribuir a esta função também, mas este é útil apenas quando o estado da chamada mudou de ‘held‘ para ‘active‘ e significa colocar em ‘held’ outras chamadas deste dispositivo e ativar a chamada ligada ao canal Asterisk atual. Por exemplo:

exten => s,n,Set(CHANNEL(callstate)=active)

Mas lembre-se que colocar em espera as chamadas GSM não causa a terminação ou congelamento da execução dialplan para os canais Asterisk vinculados.

Channel variables
Para cada canal de Asterisk criado por chan_dongle (todas, entrada e saída) as seguintes variáveis de canal são definidas:

  • DONGLENAME
    nome do nome do dispositivo
  • DONGLEPROVIDER
    mesma coluna de ‘Provider Name’ do comando CLI ‘dongle show devices’
  • DONGLEIMEI
    mesma coluna de ‘IMEI’ do comando CLI ‘dongle show devices’
  • DONGLEIMSI
    mesma coluna de ‘IMSI’ do comando CLI ‘dongle show devices’
  • DONGLENUMBER
    mesma coluna de ‘Number’ do comando CLI ‘dongle show devices’

Para extensão ‘USSD ” do contexto de entrada as próximas variáveis são definidas:

  • USSD
    Conteúdo da Resposta USSD
  • USSD_BASE64
    Conteúdo da Resposta USSD codificado em Base64, útil quando USSD é multilinha

Para extensão ‘SMS” do contexto de entrada as próximas variáveis são definidas:

  • SMS
    Conteúdo do SMS
  • SMS_BASE64
    Conteúdo do SMS codificado em Base64, útil quando o SMS é multilinha
  • CMGR
    Resposta CMGR do dongle

Chamadas recebidas
Na chamadas em entrada chan_dongle tenta encontrar extensão correspondente no contexto definido (ver dongle.conf). Há três extensão diferente de pesquisar, na seguinte ordem:

  • Número telefônico armazenado na SIM
  • Número definido em variável ‘exten‘ no dongle.conf
  • extensão ‘s’

Para salvar o número do telefone você pode gravar uma entrada para o armazenamento de números pessoais no SIM. Por exemplo, no CLI Asterisk digitar:

dongle cmd dongle0 AT+CPBS=\"ON\"
dongle cmd dongle0 AT+CPBW=1,\"+5511985856600\",145

Depois de reiniciar dongle0,

dongle restart now dongle0

as chamadas recebidas começarão da extensão do dialplan:

exten => +5511985856600,1,Noop()

também variável callerID (DNID) será definido como +5511985856600

Se o número telefônico é desconhecido, então você pode definir isso em em dongle.conf

exten = +5511985856600

Se o número do telefone é desconhecido e não há entrada de extensão em dongle.conf, a extensão ‘s’ será utilizada como ponto de partida no dialpan.

Receber SMS and USSD
Você pode receber SMS e USSD usando respectivamente a extensão SMS e USSD.

Exemplo por receber SMS:

[dongle-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}' &amp;gt;&amp;gt; /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()

Exemplo por receber USSD:

[dongle-incoming-ussd]
exten => ussd,1,Noop(Incoming USSD: ${BASE64_DECODE(${USSD_BASE64})})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' &amp;gt;&amp;gt; /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()

Além disso, observe que a execução desta extensão ocorre em um canal “Local”.

Definir sempre as extensão SMS e USSD para o contexto das chamadas recebidas com o dispositivo dongle! Caso contrário, ao receber SMS ou USSD será executada um chamada de voz com resultados imprevisíveis.

[dongle-incoming]
include => dongle-incoming-sms
include => dongle-incoming-ussd

Além disso, observe que a extensão ‘h’ é executada por SMS/USSD pouco antes do canal local ser fechado.

Asterisk Manager: comandos
Chan_dongle pode fornecer os seguintes comandos Manager:

  • DongleShowDevices
  • DongleSendUSSD
  • DongleSendSMS
  • DongleSendPDU
  • DongleSetCCWA
  • DongleReset
  • DongleRestart
  • DongleStop
  • DongleStart
  • DongleRemove
  • DongleReload

Asterisk Manager: eventos
Chan_dongle pode fornecer os seguintes eventos no Manager:

  • DongleDeviceEntry
  • DongleShowDevicesComplete
  • DongleUSSDStatus
  • DongleSMSStatus
  • DongleNewCUSD
  • DongleNewUSSD
  • DongleNewUSSDBase64
  • DongleCEND
  • DongleCallStateChange
  • DongleStatus
  • DongleNewCMGR
  • DongleNewSMS
  • DongleNewSMSBase64
  • DonglePortFail

Enviar comandos AT pela Console CLI
Você pode enviar comandos AT para qualquer modem usando

CLI: dongle cmd <device> <AT_command>

Alguns comandos AT util:

Comando AT         Descrição
AT+CCWA=0,0,1            Desabilita chamada em espera
AT+CFUN=1,1            Reinicializa modem
AT^CARDLOCK="<code>"       Envia o código de desbloqueio
AT^SYSCFG=13,0,3FFFFFFF,0,3     Modem só em 2G, busca frequência automática, não roaming
AT^SYSCFG=2,0,3FFFFFFF,2,4      Todas as frequências
AT^SYSCFG=13,1,3FFFFFFF,2,4     Só 2G
AT^SYSCFG=14,2,3FFFFFFF,2,4     Só 3G
AT^SYSCFG=2,1,3FFFFFFF,2,4      2G preferido
AT^SYSCFG=2,2,3FFFFFFF,2,4      3G preferido
AT^U2DIAG=0              Habilita função só modem
ATI             Visualiza informações relevantes do modem
ATZ             Reset configurações do modem
AT+CIMI               Visualiza IMSI
AT+CLCK="SC",0,"<pin>"     Desabilita verifica PIN

Fonte: Chokitopx / Giovanni Bosa (R.I.P)

8 comentários sobre “Chan_Dongle completo e total

      1. Valeu, e conseguimos controlar os disparos, por esse sistema, digo controlar qtos sms irão passar num chip?

  1. Pessoal boa noite, efetuei a instalação e quase tudo funciona, porem quando eu faço ligações apenas escuto quem fala mais não quem eu ligo não me escuta. alguem poderia me dar uma luz sobre o assunto ? obrigado

Os comentários estão desativados.