PHP,  Programação,  SMS,  Tutoriais

Enviando SMS pelo PHP

Disclaimer

Originalmente esse tutorial foi escrito em 2011, entao existem muitas alternativas pagas baratas por ai. O tutorial consistia em espetar um telefone no PC, porque era a alternativa mais barata na epoca.

Objetivo desse tutorial

Ensinar, passo a passo, como configurar seu Telefone, e fazer um script PHP para enviar mensagens através do próprio telefone Celular.

Motivações para escrita desse tutorial

Em um projeto recente, precisei enviar uma enorme quantidade de SMS, através do próprio sistema, e procurei a melhor forma, entenda por mais barata, de enviar minhas próprias mensagens através do mesmo.

Pré-requisitos

  • Conhecimento basico em PHP
  • Conhecimento básico em windows
  • Um telefone que seja reconhecido no windows como GSM Modem.

Analise do problema.

Existem hoje no mercado, diversos Gateways SMS para envio de mensagem, porem, obviamente todos são pagos. Dois que eu procurei foram:

EmpresaHuman
Vantagens* Fácil integração com seu sistema
* Relatórios muito bem detalhados das mensagens enviadas
Desvantagens* Preço de R$ 0,20 a R$0,10 dependendo da volumetria do cliente
* As mensagens que você envia são armazenadas em banco de dados próprios.
EmpresaBee Contact
Vantagens* Fácil integração com seu sistema
Desvantagens* Preço elevado(não sei ao certo)
* As mensagens que você envia são armazenadas em banco de dados próprios.

Analisando os dois procurados, esbarrei nos seguintes problemas

As mensagens são armazenadas em banco de dados próprios, pode não ser impeditivo para muitas pessoas, mas para meu projeto quanto mais sigilo melhor.
O preço é ‘compativel’ com o preço normal de uma mensagem enviada, dependendo do plano que você escolher com sua operadora

Update 1 Pessoal, hoje (17/05/2010) recebi um e-mail de uma empresa, que comercializa SMS a R$ 0,10 centavos. Indiscutivelmente o preço está ótimo. O nome dela é www.ndsms.com. Não testei seus serviços, mas só do fato de chegarem até a mim, e me encaminharem 1 e-mail, mostra que é pelo menos 1 empresa que ‘corre atrás’, então no mínimo vale o link. Quem me encaminhou o e-amail foi o Anderson (comercial@ndsms.com). Quem usar o sistema deles, e quiser me dar 1 retorno, fique a vontade.

Softwares necessários para a aplicação

A escolha do telefone

Resumidamente, o melhor telefone para essa aplicação, é qualquer um que seja reconhecido pelo Windows como Modem GSM, e que ele mesmo se recarregue pela USB (dessa forma você não precisará de deixar o telefone ligado na tomada). Os seguintes telefones foram testados, e funcionam perfeitamente para a solução:

  • Nokia E51 (que é o que uso atualmente para o sistema)
  • Motorola A1200i (meu telefone pessoal)

Como saber se meu telefone é GSM Modem ?

Clique com o botão direito em Meu Computador > Propriedades > Aba Hardware > Gerenciador de Dispositivos

Se você ver uma imagem como essa abaixo, na parte de Modems, seu celular é reconhecido como Modem GSM

Como instalar meu telefone no windows

Existem vários tutoriais espalhados pela web, aqui trato apenas sobre a configuração no Nokia E51

Primeiro, instale o Nokia PC Suite no seu computador, ATENÇÃO: não plugue o telefone ainda, porque senão vai dar problema de reconhecimento dos drivers no Windows

Após a instalação você pode até desinstalar o Pc Suite (Eu até recomendo, porque ele é chato demais, softwares da HP e da Nokia acham que você tem o computador apenas para usar o softwares deles).

Meu telefone já veio com o Nokia PC Suite em um CD, só coloquei, rodei o autorun, e escolhi a opção de instalar o Nokia PC Suite, no meu caso o 6.84

Pronto, instalação concluída, após a instalação terminar, a tela 1 se abrirá, clique em avançar nas telas um e dois (isso se a tela dois aparecer com Conexão a cabo selecionada. Conecte seu telefone APENAS nesse momento, na tela 3, vai demorar um pouco, e aparecer a imagem 4, nela clique apenas em Concluir




Conferindo se o telefone está instalado

Clique com o botão direito em Meu Computador > Propriedades > Aba Hardware > Gerenciador de Dispositivos

Se você ver uma imagem como essa abaixo, na parte de Modems, seu celular é reconhecido como Modem GSM

A imagem deve ser igual a de indentificação do telefone

Instalando o NowSMS para enviar as mensagens

#PASSOS PARA A INTALAÇÃO Imagem
1Clique duas vezes sobre o arquivo de instalação, escolha um diretório (que não interessa qual é) e vá avançando.
2Após instalado, ele abre a tela onde o NowSMS foi instalado, e clique no Now SMS Gateway
3A primeira coisa que temos que fazer é ir na aba SMSC e clicar em Add, para adicionarmos nosso telefone.
4Escolha a opção GSM Phone or Modem, e cique em OK
5Na caixa de seleção, escolha o seu modem, no meu caso Nokia GSM Phone Modem, caso você tenha informado um PIN para seu telefone, entre com ele na caixa Modem PIN, no meu caso não configurei essa opção, e nem testei. Depois clique em Test and Add Modem, se der tudo certo, você verá a próxima imagem
6Essa é a mensagem de sucesso que deve aparecer para você.
7Depois clique na aba Service e em seguida Run as Service em SMS Gateway Service
8Essa é a mensagem que aparece se o Serviço for instalado com sucesso, e clique em Sim para instalar o serviço
9Volte na pasta onde instalou o NowSMS, e clique em Now SMS Web Interface, uma página na internet irá se abrir para você.
10Tela web que se abre, antes de seguir com o tutorial, vamos enviar uma mensagem de teste para ver se a configuração está correta.
11Preencha o Phone Number, com o seguinte formato : +55[Código de Área sem o 0][Telefone], exemplo: +553188888888 (enviar uma mensagem para Minas Gerais e telefone 8888-8888
12Se aparecer essa mensagem, é que a mensagem foi enviada com sucesso, e logo você deve receber a mensagem enviada no celular.

Enviando mensagens através do PHP

Instalado o NowSMS, enviar mensagens agora é muito simples, o processo consiste em, através do PHP, ou qualquer outra linguagem que você quiser, basta chamar uma requisição para seu server local, a função que envia a mensagem recebe os seguintes parâmetros

FUNÇÃO DE ENVIO DE SMS (SENDSMS)DESCRIÇÃO
$host Seu servidor, geralmente http://127.0.0.1, para saber qual é exatamente, abra a pasta onde está instalado o NowSMS, e clique em Now SMS Web Interfacee copie o IP, que está antes dos pois pontos (:)
$port É a porta, geralmente 8800, para saber qual é exatamente, abra a pasta onde está instalado o NowSMS, e clique em Now SMS Web Interfacee copie o IP, que está depois dos pois pontos (:)
$username Deixe em branco, caso não precise se autenticar na página
$password Deixe em branco, caso não precise se autenticar na página
$phoneNoRecip Telefone, no formato +55[DDD sem o 0][Telefone com 8 digitos], exemplo: +553188887777
$msgText Mensagem, até 160 caracteres, senão ele vai enviar várias mensagens, até chegar a mensagem completa

Exemplo de chamada a função:

$x = SendSMS("127.0.0.1", 8800, "", "", $_POST['txtTELEFONE'], $_POST['txtMENSAGEM']);
echo $x;
view raw gistfile1.txt hosted with ❤ by GitHub

Ou pela página completa:

<?PHP
/**
* Página de teste de Envio de SMS
* @author Samuel Aiala Ferreira <samuca@samuca.com>
* @version 1.0
* @package SMS
*/
if ($_POST['acao'] == 'sendsms')
{
$x = SendSMS("127.0.0.1", 8800, "", "", $_POST['txtTELEFONE'], $_POST['txtMENSAGEM']);
echo $x;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Envio de SMS</title>
</head>
<body>
<a href="http://www.samuca.com/sms/">Tutorial de envio de SMS</a>
<form name='frmSend' method='post'>
<input type='hidden' name='acao' value='sendsms'>
<table width="100%" style="border-collapse:collapse;" border="1">
<tr>
<td>Telefone:</td>
<td><input type="text" name="txtTELEFONE" value="+55XX88888888"></td>
</tr>
<tr>
<td>Mensagem:</td>
<td><textarea name="txtMENSAGEM" cols="60" rows="10" id="txtMENSAGEM"></textarea></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" name="Submit" value="Enviar SMS"></td>
</tr>
</table>
</form>
</body>
</html>
<?
/**
* Função que envia o SMS
* @return string Mensagem de Sucesso de Envio de SMS
* @param string $host Host onde foi instalado seu Now SMS
* @param string $port A Porta que você está usando
* @param string $username Pode deixar em branco
* @param string $password Pode deixar em branco
* @param string $phoneNoRecip Telefone, no formato +55[DDD sem o 0][Telefone, com 8 posições]
* @param string $msgText Mensagem que deseja enviar, limite em 160 caracteres, senão ele manda quantas mensagens necessárias para atingir o limite.
*/
function SendSMS ($host, $port, $username, $password, $phoneNoRecip, $msgText) {
$fp = fsockopen($host, $port, $errno, $errstr);
if (!$fp) {
echo "errno: $errno \n";
echo "errstr: $errstr\n";
return $result;
}
fwrite($fp, "GET /PhoneNumber=" . rawurlencode($phoneNoRecip) . "&Text=" . rawurlencode($msgText) . " HTTP/1.0\n");
echo $aux3;
if ($username != "") {
$auth = $username . ":" . $password;
echo "auth: $auth\n";
$auth = base64_encode($auth);
echo "auth: $auth\n";
fwrite($fp, "Authorization: Basic " . $auth . "\n");
}
fwrite($fp, "\n");
$res = "";
while(!feof($fp)) {
$res .= fread($fp,1);
}
fclose($fp);
return $res;
}
echo $x;
?>
view raw gistfile1.txt hosted with ❤ by GitHub

Notice: ob_end_flush(): failed to send buffer of zlib output compression (0) in /home/samu/public_html/blog/wp-includes/functions.php on line 5277