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!
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
=)
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?
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.
Opa. Show seu tutorial, ajudou muito. Funciona com qualquer modem 3g?
Sim (tendo o drive instalado rsrs)
Por um acaso bem grande, consegui um de mesmo modelo e funcionou 100%. Estou tentando integrar a webservice agora com o rbx. Parabéns pelo tutorial =D
🙂 Uhulll!!!
Ótimo Post !!!!!
Tenho acompanhado seus passos a passos são ótimos.
Pergunto se com esse gateway SMS consigo utilizar como mídia no Zabbix?
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.