você está aqui: Home  → Arquivo de Mensagens

Enviando e Recebendo SMS pelo modem 3G

Colaboração: Bruno Buys

Data de Publicação: 17 de January de 2010

Você pode usar o seu serviço 3G para enviar e receber mensagens SMS, além de navegar. Eis aqui o que eu fiz para conseguir isso, junto com algumas observações sobre as linhas de comandos e os programas disponíveis.

Modem 3G usado

  • ZTE MF622
  • lsusb:
  • Bus 001 Device 004: ID 19d2:0001 ONDA Communication S.p.A.

Operadora

  • Vivo
  • Plano Vivo Zap 250Mb

Programas usados

Para enviar

  • gsmsendsms

Para receber e/ou enviar usando o spool

  • gsmsmsd (daemon)

Ambos contidos no pacote gsm-utils, no Debian Lenny

O dispositivo padrão de modem que estes dois programas procuram é o /dev/mobilephone. Por isso o dispositivo teve que ser especificado, nas linhas de comando abaixo.

1. Configurando

Para enviar e receber mensagens, é necessário saber o dispositivo de modem a ser usado e o número telefônico da central de envio de mensagens.

1.1. Sobre o dispositivo de modem:

Com o modem MF622 configurado segundo a dica "Modem 3G ZTE MF622 com Operadora Vivo, no Debian Lenny", você terá três dispositivos ttyUSBx:

  /dev/ttyUSB0
  /dev/ttyUSB1
  /dev/ttyUSB2

Um pouco estranho, mas é isso mesmo, três dispositivos com um só modem. Aqui no meu equipamento de teste o USB1 está inativo. Então usei os modems ttyUSB0 e ttyUSB2.

2. Enviando SMS

Para enviar uma mensagem sem necessariamente estar rodando o daemon, você pode usar diretamente o gsmsendsms:

  gsmsendsms -d /dev/ttyUSB0 -C +550101102010 -b 19200 91119222 "Oi, fulano"

onde:

-d dispositivo usado
-C número da central de envio de mensagens da Vivo.

(Isso aqui eu descobri no blog do Avi Alkalay. Leia isso e veja como é incrível as operadoras não saberem/quererem informar direito o consumidor. Anatel, cadê você?!)

Para outras operadoras, é necessário saber os telefones das suas centrais. Tentei descobrir isso, mas foi uma busca inútil, pois internet afora, os usuários dizem que os números parecem mudar com o tempo. Alguém confirma? Além disso, não há como testá-los sem assinar o serviço. Então, vá em frente e procure os da sua operadora, você mesmo.

  -b : baudrate (outros valores podem ser testados aqui)

O gsmsendsms, então, envia o SMS do número do seu modem para o número celular 91119222, com a mensagem "Oi, fulano".

3. Recebendo e enviando SMS

A forma de receber mensagens é rodando um daemon que fica ouvindo o dispositivo:

  gsmsmsd -d /dev/ttyUSB2

O daemon vai ficar ocupando o terminal, à espera de mensagens. Quando chegar uma, ele imprimirá na tela, assim:

  Type of message: SMS message
  ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------
  Message type: SMS-DELIVER
  SC address: '550112102010'
  More messages to send: 1
  Reply path: 0
  User data header indicator: 0
  Status report indication: 0
  Originating address: 'meu-número-de-cel'
  Protocol identifier: 0x0
  Data coding scheme: default alphabet
  SC timestamp: 01/06/2010 02:14:20 PM (+0200)
  User data length: 22
  User data header: 0x
  User data: 'teste pra dicas-l'
  ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------

(O que importa é o texto do SMS, que será a última linha dessa saída, o "User data")

O único problema aqui é que eventualmente o gsmsmsd erra e sai, com avisos semelhantes a esse:

  gsmsmsd[ERROR]: unexpected response '+ZMTime: 5;' when sending 'AT'

E se isso acontecer, você para de receber os SMS. O que eu fiz foi embrulhar o gsmsmsd num laço while, que roda o programa novamente, se ele sair. Assim:

  while true ; do
        time gsmsmsd -d /dev/ttyUSB2 -s sms -C +550101102010
  if [ $? = 1 ] ; then
        continue
        else
        break
  fi
  done

(o "time" é opcional, serve para mostrar por quanto tempo o daemon rodou, antes de errar. Pode omitir, se quiser.)

Nesse laço while, inseri também outros parâmetros, veja:

  -s sms

Define como spool o diretório "sms", dentro do meu $HOME

  -C +550101102010

Instrui o daemon a ligar para esse número para o envio da mensagem.

Com isso rodando, posso enviar um SMS assim:

  echo "91119222
  Nova mensagem de testes para dicas-l" > sms/sms1

O comando acima mostra como o arquivo deve ser salvo em sms/:

Primeira linha com o telefone do destinatário.

Segunda em diante, texto da mensagem.

Qualquer nome de arquivo serve.

Dois detalhes

a mensagem deve ter no máximo 160 caracteres. O daemon consulta o spool a cada cinco segundos. Depois de enviado o SMS, o arquivo é apagado.

Nesse laço, você pode comandar Ctrl+C (a forma indicada na man page para sair), que o laço interrompe. Se o gsmsmsd errar e sair, cai no caso do "continue", e o laço roda novamente o daemon.

Repare que, como existem dois dispositivos ativos, você pode fazer combinações de funcionalidades com eles. Você pode rodar o wvdial no primeiro, se conectar, e deixar o segundo para ouvir e enviar mensagens.

Outros programas a serem testados

gammu - Ferramenta de linha de comando para controle de modems. Tem diversas funções interessantes, inclusive de resgatar mensagens armazenadas no modem, o que não consegui com o gsm-utils. Em meus testes, teve um funcionamento irregular. Após um certo momento, parou de se comunicar com o dispositivo, definitivamente. Por isso não pude usar em produção. Provavelmente o suporte ao dispositivo seja incompleto.

kmobiletools - Ferramenta gráfica do kde, para controle de modems e celulares. Com funções de recebimento e envio de mensagens, mostrador de intensidade de sinal da rede e da bateria (para celulares), caderno de endereços e outras. Bem interessante, também, inclusive porque permite configurar ações a serem executadas quando uma mensagem chega, como alguma forma de chamar a atenção. Isso é melhor do que a solução de ter a mensagem mostrada no terminal, onde pode passar despercebida. O problema com esse programa, novamente, é o suporte ao dispositivo. O modem usado é parcialmente suportado, e o envio de mensagens não funcionou confiavelmente. Além disso, às vezes as mensagens chegam com caracteres incompreensíveis.

E é isso. Feliz sms'ing!



 

 

Veja a relação completa dos artigos de Bruno Buys

Opinião dos Leitores

Diego Neves
23 Dez 2016, 15:29
Estou com o mesmo problema @Tacioandrade_
Nato Informática
19 Ago 2012, 14:54
Tenho um software que envia direto do seu pc usando um modem 3G, importa a lista de números digita o texto e ele faz o resto até 80.000 SMS a R$ 0,50 por dia entre em contato comigo para adquirir o software!
Julio Cesar
16 Mai 2012, 15:36
2 anos depois e funcionando perfeitamente
joao renato
15 Fev 2012, 00:07
ótimo artigo, parabens me ajudou muito.
Fabiola
14 Fev 2012, 20:49
adooro a claro essa operadora é d+++......
fabiola
14 Fev 2012, 20:47
mas os quero saber quanto custa uma mensagem do modem....
Vítor De Araújo
11 Fev 2012, 03:54
Ótimo artigo. Só pra constar, aquele trecho do "while true" poderia ser trocado por algo bem mais simples:

until time gsmsmsd -d /dev/ttyUSB2 -s sms -C +550101102010; do :; done
teolina mendes
01 Jan 2012, 00:16
adorei saber q da pra enviar msg gratis
@Tacioandrade_
24 Nov 2011, 17:36
Olha sobre o sms gateway até que é realmente uma boa, porem os valores quando se fala em quantidades um pouco mais altas de SMS gresce muito.
As vezes vale mais a pena pegar por exemplo 3 ou 4 chips da tim e utiliza-los para mandar sms's pagando $0,50 por dia para cada um dos chips usados. =]
Eduardo Sirangelo
29 Out 2011, 06:59
Recomendo a 21Mobile, eles tem relatorios completos referentes aos envios, inclussive com os erros, integram via webservice e rest e ainda possuem uma plataforma de envio web. Eu utilizo aqui na empresa, e outra, eles tem os melhores preços do mercado.

www.21mobile.com.br e do vendedor mauricio.pires@21mobile.com.br
Cesar Vasconcelos
20 Out 2011, 17:10
Cara, melhor contratar um sms gateway, não?

Estou testando a Clickatell (http://www.clickatell.com) e a Vexx (http://www.vexxmobile.com.br).
maicon neves
29 Set 2011, 11:23
eu envio sms do meu molden para celular, e queria se na conta da internet vai vim incluido as sms q eu mandei?
grato..
german
18 Set 2011, 14:07
quero saber o numero de meu modem?
@Tacioandrade_
09 Jul 2011, 15:43
Consegui fazer a configuração do meu modem e tudo mais, funciona perfeitamente o envio das mensagens. Porem estou com um problema, caso a mensagem tenha algum caractere acentuado, o mesmo não será exibido corretamente, será substituído por um outro caractere da tabela ASC.

Alguem sabe como resolver este problema que me parece ser de encoding?

PS: Testado no Debian Squeeze e Ubuntu 11.04.
Otto
27 Abr 2011, 11:04
Artigo interessante, vou testar quando tiver um modem 3G.
Sobre o "Centro de serviço", acho estranho dizer que ele vive mudando, se é uma configuração do aparelho.

Dei uma olhada no meu celular (Oi) e nas configurações de mensagem tem o número do centro de serviço.
reginaldo
25 Ago 2010, 18:52
Gente, eu só queria acompanhar minha conta 3g! Que merda complicada é essa?!!!!!!!!!! Pra ter acesso à conta eu tenho que ter uma senha no site da vivo! Pra ter uma senha, eu preciso mandar um msn pra vivo pra saber meu número. Mas primeiro preciso de uma droga de programa que não tenho! Desisto! Isso só pode ser uma dificuldade criada pela própria operadora pra o consumidor ficar sempre por fora ou sei lá!
Loyane Langa
07 Ago 2010, 09:15
Optimo artigo meu caro,

Estava a procura desde faz tempo, pois preciso prover um servco em que recebo pedidos por sms e devolvo o resultado por sms, algo como o ActiveX...daqui ja tenho tudo...

Sucessos!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script