Projetos Desenvolvidos/Em Desenvolvimento

Envio de SMS com modems 3G -

Recentemente tive curiosidade a respeito das tecnologias de envio de SMSs automáticos, disparados por uma aplicação, por exemplo.

Existem os gateways operados por empresas especializadas que disponibilizam APIs e serviços web, com a possibilidade de tratar grandes quantidades de mensagens a preços inversamente proporcionais aos volumes de mensagens.

Para uma solução, diria, mais "doméstica", para um volume reduzido de mensagens, existe a possibilidade de usarmos telefones celulares ligados por meio da porta serial ou USB, ou mesmo modems 3G, para os quais há um conjunto de comandos específicos e padronizados para envio dos SMSs. Esses dspositivos (telefones e modems 3G) são vistos pela aplicação como os modems do passado, para os quais enviávamos comandos "AT".

Com base na experiência de um amigo que criou uma aplicação em Visual Basic, desenvolvi um pequeno programa em C++ para o Linux (o ambiente operacional foi o CentOS 5.8, usando a biblioteca libstdc++.so.6 - ver pasta /usr/lib), para operar via linha de comando.

Para realizar os testes, eu adquiri um modem 3G desbloqueado da D-Link, modelo DWM-156, comprei um cartão 3G na banca de jornais, coloquei uns reais de crédito e, baseado na experiência feita em VB desse meu amigo, desenvolvi o programa.

Os parâmetros de operação do programa são exibidos ao se fornecer os parâmetros "-h" ou "-?".

Ao inserir o modem na porta USB, o Linux (CentOS 6.0) criou três portas: /dev/ttyUSB0, /dev/ttyUSB1 e /dev/ttyUSB2. A porta que responde aos comandos "AT" é a /dev/ttyUSB1 e é, portanto, a porta que informo no parâmetro "-p porta" (e.g. -p /dev/ttyUSB1). A mensagem a ser enviada é especificada no parâmetro "-m mensagem", colocada usualmente entre aspas, por conta dos espaços entre as palavras. A lista de telefones de destino é informada no parâmetro "-t telefone1,telefone2,...,telefoneN" (sem espaços entre as vírgulas e os números). Com isso, posso enviar a mesma mensagem para mais de um telefone com um único comando.

O executável Linux encontra-se aqui. Não se esquecer de dar as permissões adequadas de execução e de acesso à porta. É importante ressaltar que a aplicação está em sua versão inicial e carece de mecanismos de verificação do envio correto dos comandos ao modem, ou seja, tratando os "OK" recebidos de volta quando o modem processa corretamente um comando.

O código fonte em C++ encontra-se aqui.
O projeto em VB .NET de uma pequena aplicação protótipo está disponível aqui, enquanto a aplicação instalável no Windows encontra-se aqui. No Windows, a porta que o modem abriu ao ser conectado na porta USB foi a COM8. Veja no seu sistema a porta que foi aberta usando o painel de controle.

A segunda versão do utilitário para o CentOS Linux, na versão 6.3 (dê um "cat /etc/redhat-release" para verificar a sua versão), corrigidos alguns bugs e adicionadas novas features, encontra-se aqui.