Um dos objectivos do Kannel é funcionar como gateway de SMS para redes GSM, podendo assim receber e enviar SMS. Está será a funcionalidade por nós implementada e aqui explicada.
O seguinte diagrama pretende definir a arquitectura do Kannel:

Figura 1: Arquitectura.
Esta arquitectura consiste no seguinte: o telemóvel envia uma SMS para o número da placa GSM do Kannel (no nosso caso, por exemplo a pedir uma factura relativa a uma compra num café). O Kannel processa a mensagem de texto e reencaminha para o servidor o conteúdo pretendido. O SMSC envia a resposta com o conteúdo que o Kannel.
Nesta pequeno tutorial que a seguir apresentamos foi usada uma pen TMN ZTE MF190J.
1. Instalar o Kannel.
O primeiro passo, obviamente, pela instalação com o seguinte comando:
sudo apt-get install Kannel
2. Configuração da smsbox.
Alterar o ficheiro que está em /etc/default/Kannel para descomentar a parte do ficheiro que irá permitir a troca de SMS.
START_WAPBOX = 1 START_SMSBOX = 1
3. Construção do ficheiro de configuração
Neste passo começamos a interagir com o ficheiro /etc/Kannel/Kannel.conf que será o maior responsável pela troca de SMS.
O primeiro grupo a ser inserido no ficheiro de configuração será o “core” que será o grupo onde será configurado o beararbox.
group = core admin-port = 15000 smsbox-port = 15001 admin-password = bar status-password = foo log-file = "/var/log/kannel/bearerbox.log" access-log = "/kannelaccess.log" log-level = 0 box-deny-ip = "*.*.*.*" box-allow-ip = "127.0.0.1"
Para procedermos à configuração do centro de SMS do Kannel teremos de construir um grupo chamado “smsc”. Este grupo deve incluir todos os dados necessários para proceder à ligação ao centro de SMS.
Neste grupo irão aparecer alguns dados relativos à placa, tais como: o número do cartão desta, o número do centro de mensagens do respectivo operador (TMN +351962100000, Vodafone +351911616161 e Optimus +35193121314) e a porto usb do PC onde a placa se encontra conectada.
group = smsc smsc = at modemtype = auto device = /dev/ttyACM0 speed = 460800 my-number = <your-number> sms-center = <center-sms> validityperiod = 167
Para verificar o porto de ligação da placa poderemos instalar o wvdial e correr o ficheiro de configuração wvdialconf.
sudo apt-get install wvdial sudo wvdialconf

Figura 2: Exemplo da execução do wvdial.
Após especificar onde a placa se encontrava conectada, precedemos à elaboração do grupo “modems” que terá toda a configuração necessária para o correcto funcionamento desta.
group = modems broken = true id = ZTE WCDMA Technologies MSM name = "ZTE WCDMA Technologies MSM" detect-string = "MF190J-2.0.0" init-string = "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0" speed = 460800 enable-mms = true message-storage = me
Para o envio de uma sms teremos de definir o “SMSBox”. Este grupo terá todas as informações necessárias sobre a omposição do link que irá permitir o envio da SMS.
group = smsbox bearerbox-host = localhost sendsms-port = 15013 global-sender = <your-number> sendsms-chars = "0123456789 +-" log-file = "/var/log/kannel/smsbox.log" log-level = 0 access-log = "/var/log/kannel/access.log" log-file = "/smsboxlog.log" immediate-sendsms-reply = true
Deveremos definir um ou mais utilizadores para que seja activo o push SMS através da interface HTTP. O grupo responsável pela criação desta denomina-se “sendsms-user”
group = sendsms-user username = kannel password = kannel default-smsc = mobiphone
Assim, após a criação destes dois grupos, já estaremos em condições de processar o envio de mensagens do nosso servidor Kannel para o número à nossa escolha (correndo o servidor e o cliente). Mediante as configurações que anteriormente temos, podemos concluir que o link responsável por este envio é:
http://localhost:15013/cgi-bin/sendsms?username=kannel&password=kannel&to=<destination-number>&text=<text>
Por último, a única coisa que nos falta para o nosso serviço de SMS funcionar como queremos é a criação de um grupo “sms-service”. Este grupo estará responsável pela recepção das SMS por nós desejadas.
group = sms-service keyword = default get-url = "http://localhost:9000/smscenter/receive?number=%p&text=%b" accept-x-kannel-headers = true max-messages = 1 concatenation = true catch-all = true
O funcionamento deste serviço é muito simples. De destacar a tag “keyword” que detecta o conteúdo da mensagem, verifica se é igual, e se o for executa o restante grupo (poderíamos ter uma tag “text” com o conteúdo que queríamos responder à pessoa, por exemplo). Quanto à tag “get-url”, será automaticamente preenchida aquando da recepção duma SMS, o que fará disparar o web-service por nós criado para leitura destes parâmetros.
4. Execução dos serviços
Após finalizada a configuração do ficheiro Kannel, podemos proceder à execução do servidor e do cliente para, finalmente, testarmos o nosso serviço.
Para a execução do servidor executamos o seguinte comando (aquando do arranque do sistema operativo, o Kannel arranca automaticamente um processo, sendo assim importante pará-lo primeiro):
sudo /etc/init.d/kannel stop cd /usr/sbin sudo ./bearerbox –v 1 /etc/kannel/kannel.conf
Após este, somente nos falta executar o cliente Kannel:
sudo ./smsbox –v 1 /etc/Kannel/Kannel.conf
Para exemplificar o q antes explicamos, seguem-se as seguintes imagens:

Figura 3: Execução do servidor.

Figura 4: Execução do cliente.

Figura 5: Exemplo de envio de SMS.

Figura 6: Exemplo de recepção de SMS.
Problemas durante a criação do serviço:
- Durante a execução do trabalho, tivemos de trocar de placa GSM porque a placa anteriormente usada tava com alguns problemas na recepção de SMS. À partida seria a falta de alguns comandos AT.
- Problemas com a criação init-string e detect-string do grupo modems. Estes problemas podem ser resolvidos correndo o servidor com a opção 0 (modo debug) e assim, aquando da leitura das destas variáveis do ficheiro Kannel, irá dar um erro e informar do que era suposto aparecer.
- Problemas na execução de algumas funcionalidades do Kannel, que nos prenderam durante algum tempo.
Aqui segue o ficheiro de configuração: kannel.conf