Gateway SMS com playSMS + Gammu no Debian Buster


O playSMS é um software de gerenciamento de SMS gratuito e de código aberto.

Um sistema de portal móvel flexível baseado na Web que pode ser adaptado a vários serviços, como um gateway SMS, provedor de SMS em massa, sistema de mensagens pessoais, ferramentas de comunicação corporativa e de grupo.

Requisito:
1- Debian 10 Stretch / Instalação Limpa
2- Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”
Instalação do PHP 7.3 (Requisito)
Instalação do MariaDB 10.3 (Requisito)
Instalação do Apache 2.4 (Requisito)
phpMyAdmin :: (Opcional)

Repositório

#  vim /etc/apt/sources.list

Certifique-se de que ao final de cada repositório tenha contrib non-free, se não tiver adicione.
Ex.:

deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free
 
deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
 
# buster-updates, previously known as 'volatile'
deb http://deb.debian.org/debian/ buster-updates main contrib non-free
deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free

Instale os modulos extra do kernel “para reconher melhor seu modem”:

# apt install firmware-linux firmware-linux-free firmware-linux-nonfree firmware-misc-nonfree

Vamos precisar mais alguns pacotes e extensões do PHP extras, aqui vem um porém o pacote php-mcrypt não esta mais disponivel na versao 7.3 do php, então vamos instala-lo um pouco diferente.

# apt install php-dev libmcrypt-dev php-pear php-imap git wget unzip
# pecl channel-update pecl.php.net
# pecl install mcrypt
libmcrypt prefix? [autodetect] :  ENTER
# echo 'extension=mcrypt.so' >> /etc/php/7.3/mods-available/mcrypt.ini

Ativar extensão mcrypt manualmente

# phpenmod mcrypt

Restart apache2

# systemctl restart apache2
# php -m | grep mcrypt

Crie o banco de dados playSMS

# mysql -p
CREATE DATABASE playsms;
GRANT ALL PRIVILEGES ON playsms.* TO 'playsms'@'localhost' IDENTIFIED BY 'SUA-SENHA';
FLUSH PRIVILEGES;
quit;

Vamos usar o script de instalação install-playsms.sh. O script está incluído no pacote do playSMS. A versão atual é do playSMS é a 1.4.
Vamos fazer download do projeto e extraia o pacote em /usr/local/src.

# cd /tmp/
# wget https://sourceforge.net/projects/playsms/files/playsms/Version%201.4.2/playsms-1.4.2.tar.gz
# tar -zxf playsms-1.4.2.tar.gz -C /usr/local/src
# mv /usr/local/src/playsms-1.4.2/ /usr/local/src/playsms

Acesse o local que extraímos

# cd /usr/local/src/playsms/

Copie install.conf.dist para install.conf e edite informando a senha de conexão mysql. Nota: Se você tiver domínios virtuais configurado no seu apache, você deve ajustar no install.conf PATHWEB=”/var/www/html/playsms”.

# cp install.conf.dist install.conf
# vim install.conf
...
# MySQL database username
DBUSER="playsms"

# MySQL database password
DBPASS="SUA-SENHA"
...

Execute o script de instalação

# ./install-playsms.sh
playSMS Install Script for Ubuntu (Debian based)

==================================================================
WARNING:
- This install script WILL NOT upgrade currently installed playSMS
- This install script WILL REMOVE your current playSMS database
- This install script is compatible ONLY with playSMS version 1.4
- Please BACKUP before proceeding
==================================================================

You ARE running this installation script as root
That means you need to make sure that you know what you're doing

==================================================================

Proceed ?

When you're ready press [y/Y] or press [Control+C] to cancel Y

==================================================================

INSTALL DATA:

MySQL username      = playsms
MySQL password      = SUA-SENHA
MySQL database      = playsms
MySQL host          = localhost
MySQL port          = 3306

Web server user     = www-data
Web server group    = www-data

playSMS source path = /usr/local/src/playsms

playSMS web path    = /var/www/html/playsms
playSMS lib path    = /var/lib/playsms
playSMS bin path    = /usr/local/bin
playSMS log path    = /var/log/playsms

playSMS conf path   = /etc

==================================================================

Please read and confirm INSTALL DATA above

When you're ready press [y/Y] or press [Control+C] to cancel Y

==================================================================

Are you sure ?

Please read and check again the INSTALL DATA above

When you're ready press [y/Y] or press [Control+C] to cancel Y

==================================================================

Installation is in progress

DO NOT press [Control+C] until this script ends

==================================================================

Getting composer from https://getcomposer.com

Please wait while the install script downloading composer

Composer is ready in this folder

Pleas wait while composer getting and updating required packages

Do not run Composer as root/super user! See https://getcomposer.org/root for details
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 0 installs, 1 update, 0 removals
  - Updating pear/db dev-trunk (93e9d4d => f3f60bb):  Checking out f3f60bb610
Writing lock file
Generating autoload files

Composer has been installed and packages has been updated

Start.................end

PLAYSMSD_CONF = /etc/playsmsd.conf
PLAYSMS_PATH = /var/www/html/playsms
PLAYSMS_LIB = /var/lib/playsms
PLAYSMS_BIN = /usr/local/bin
PLAYSMS_LOG = /var/log/playsms
DAEMON_SLEEP = 1
ERROR_REPORTING = E_ALL ^ (E_NOTICE | E_WARNING)
IS_RUNNING = 
PIDS schedule = 
PIDS ratesmsd = 
PIDS dlrssmsd = 
PIDS recvsmsd = 
PIDS sendsmsd = 

playsmsd has been started
schedule at pid 28793
ratesmsd at pid 28795
dlrssmsd at pid 28797
recvsmsd at pid 28799
sendsmsd at pid 28801

playsmsd is running
schedule at pid 28793
ratesmsd at pid 28795
dlrssmsd at pid 28797
recvsmsd at pid 28799
sendsmsd at pid 28801


playSMS has been installed on your system


Your playSMS daemon script operational guide:

- To start it : playsmsd /etc/playsmsd.conf start
- To stop it  : playsmsd /etc/playsmsd.conf stop
- To check it : playsmsd /etc/playsmsd.conf check



ATTENTION
=========

When message "unable to start playsmsd" occurred above, please check:

1. Possibly theres an issue with composer updates, try to run: "./composer update"
2. Manually run playsmsd, "playsmsd /etc/playsmsd.conf start", and then "playsmsd /etc/playsmsd.conf status"

Precisamos configurar também que playsmsd inicie durante o boot para isso vamos usar o systemd

# /usr/local/bin/playsmsd stop
# ln -s /usr/local/bin/playsmsd /etc/init.d/
# vim /etc/systemd/system/playsms.service
[Unit]
Description=PlaySMS
After=mariadb.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/playsmsd start
ExecStop=/usr/local/bin/playsmsd stop

[Install]
WantedBy=multi-user.target

Ative o novo serviço, e verifique se o mesmo foi ativado

# systemctl daemon-reload
# systemctl enable playsmsd
# systemctl restart playsmsd
# systemctl status playsmsd
# systemctl list-unit-files | grep playsmsd

Agora você já pode reiniciar que o playsmsd que o mesmo vai estar iniciando junto com o boot.

Se você configurar um domínio virtual com certificado altere em /var/www/html/playsms/config.php para $core_config['ishttps'] = true;

Para futuras atualizações execute:

# /usr/local/src/playsms/composer update

Instalação do Modem / Gammu

# apt install wvdial usb-modeswitch gammu gammu-smsd -y

Vamos verificar se o modem está conectado:

# wvdialconf

Resultado será algo como: (varia de cada modem)

Editing `/etc/wvdial.conf'.

Scanning your serial ports for a modem.

Modem Port Scan<*1>: S0   S1   S2   S3
ttyUSB0<*1>: ATQ0 V1 E1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 Z -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- COMMAND NOT SUPPORT
ttyUSB0<*1>: Modem Identifier: ATI -- Manufacturer: huawei
ttyUSB0<*1>: Speed 9600: AT -- OK
ttyUSB0<*1>: Max speed is 9600; that should be safe.
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 0 baud
ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 0 baud, next try: 0 baud
Modem Port Scan<*1>: USB2

Found a modem on /dev/ttyUSB0.  
Modem configuration written to /etc/wvdial.conf.
ttyUSB0<Info>: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2"

O que deve ser observado é “Found a modem on /dev/ttyUSB0” e “Speed 9600”;

# cat /etc/wvdial.conf

Resultado vai ser algo como:

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Modem Type = Analog Modem
Baud = 9600
New PPPD = yes
Modem = /dev/ttyUSB0
ISDN = 0

Certifique-se que os valores estão de acordo com a detecção:

Criamos os diretorios do gammu:

# mkdir -p /var/log/gammu /var/spool/gammu/{inbox,outbox,sent,error}

Demos permissões para o usuário do apache:

# chown www-data:www-data -R /var/spool/gammu/*
# cp /etc/gammu-smsdrc /etc/gammu-smsdrc_old
# vim /etc/gammu-smsdrc

Ajuste os valores port e connection para o valores detectados:

# Configuration file for Gammu SMS Daemon
[gammu]
port = /dev/ttyUSB0
connection = at9600
logfile = /var/log/gammu/gammu.log
logformat = textall

[smsd]
service = files
logfile = /var/log/gammu/smsd.log

debuglevel = 1

RunOnFailure = /etc/gammu-error.sh

#commtimeout = 1
#sendtimeout = 15
#statusfrequency = 0

outboxformat = unicode

transmitformat = auto 
#unicode

inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

Vamos criar um script para que todos os números errados sejam enviado para o diretório error, assim quando for enviar para algum númerro inválido não trava a o envio dos demais.

# vim /etc/gammu.error.sh

Adicione ao arquivo:

#!/bin/sh
echo $1 >> /var/log/gammu/numero-errado.log
mv /var/spool/gammu/outbox/\ /var/spool/gammu/error/

De permissão para execução:

# chmod +x /etc/gammu.error.sh

Mais alguns ajustes e colocamos o gammu rodar com poderes de root.

# ln -s /etc/gammu-smsdrc /etc/gammurc
# echo "USER=root" >> /etc/default/gammu-smsd

Pare o gammu e vamos tenta-lo reconhecer o modem:

# systemctl stop gammu-smsd
# gammu -f /var/log/gammulog identify

Resultado vai ser algo como:

Dispositivo          : /dev/ttyUSB0
Fabricante           : Huawei
Modelo               : unknown (E303C)
Firmware             : 21.157.01.00.150
IMEI                 : 999999999999999
SIM IMSI             : 999999999999999

Ainda com o gammu parado faça um teste enviando uma mensagem para seu celular, algumas opereradoras so funcionam adicionando o DDD.

# echo "Minha mensagem" | gammu sendsms TEXT 55999999999

Start o gammu e verifique se esta tudo certo:

# systemctl start gammu-smsd
# systemctl status gammu-smsd

Agora você pode acompanhar os logs em /var/log/gammu/smsd.log:

# tail -f /var/log/gammu/smsd.log

Vamos a interface web, acesse http://[seu-ip]/playsms/ usando usario e senha admin.

Acesse o menu: Settings –> Manage gateway and SMSC

Localize o ícone da pastinha e clique nela.

Certifique-se que Spool folder esteja: /var/spool/gammu e clique em SAVE e depois BACK.

Agora clique no ícone com simbolo de mais (+)

Verifique se está como a imagem e clique em SAVE e depois em BACK

No menu Settings -> Manage credit adicione crédito ao seu usuário.

Selecione o usuário (provavelmente você só tem o admin) e coloque o valor de credito, clique em ADD CREDIT depois BACK.

Agora no menu Settings -> Main configuration vamos definir o Default SMSC.

Seleciona em Default SMSC -> gammu

Vamos ao teste, acesse o menu My account -> Compose message e escreva uma mensagem.

No meu Reports -> All sent messages, você pode acompanhar o status da mensagem, se uma “quadradinho” verde estiver do lado da mensagem significa que ela foi entregue.

Bom o mais “complicado” era fazer isso, agora com um pouco de curiosidade você vai longe…

Espero que tenha gostado! 🙂

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Abraço!

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

9 Resultados

  1. Ivan Alves disse:

    Tem um erro simples, mas que trava o envio de sms do server

    Ajuste os valores port e connection para o valores detectados:

    erro: RunOnFailure = /etc/gammu-error.sh
    correção: RunOnFailure = /etc/gammu.error.sh

    =)

  2. Wellington silva disse:

    Pessoal tenho um Goip de 32 chips e queria fazer um sistema desse do playsms pra envio de sms alguem aqui da esta ajuda ou consultoria?

  3. root@playsms:/# systemctl stop gammu-smsd
    root@playsms:/# gammu -f /var/log/gammulog identify
    No response in specified timeout. Probably the phone is not connected.

  4. Vinicius disse:

    Opa. Show seu tutorial, ajudou muito. Funciona com qualquer modem 3g?

  5. Cesar Queiroz disse:

    Ótimo Post !!!!!
    Tenho acompanhado seus passos a passos são ótimos.
    Pergunto se com esse gateway SMS consigo utilizar como mídia no Zabbix?

  6. Thiago Gonçalves disse:

    Olá Rudimar!! Parabéns pelo site.

    Ao executar gammu -f /var/log/gammulog identify, recebi o seguinte erro: Não pode acessar cartão SIM.

    Você sabe informar o motivo do erro?

    Obrigado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *