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:
Empresa | Human |
---|---|
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. |
Empresa | Bee 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 |
---|---|---|
1 | Clique duas vezes sobre o arquivo de instalação, escolha um diretório (que não interessa qual é) e vá avançando. | ![]() |
2 | Após instalado, ele abre a tela onde o NowSMS foi instalado, e clique no Now SMS Gateway | ![]() |
3 | A primeira coisa que temos que fazer é ir na aba SMSC e clicar em Add, para adicionarmos nosso telefone. | ![]() |
4 | Escolha a opção GSM Phone or Modem, e cique em OK | ![]() |
5 | Na 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 | ![]() |
6 | Essa é a mensagem de sucesso que deve aparecer para você. | ![]() |
7 | Depois clique na aba Service e em seguida Run as Service em SMS Gateway Service | ![]() |
8 | Essa é a mensagem que aparece se o Serviço for instalado com sucesso, e clique em Sim para instalar o serviço | ![]() |
9 | Volte na pasta onde instalou o NowSMS, e clique em Now SMS Web Interface, uma página na internet irá se abrir para você. | ![]() |
10 | Tela web que se abre, antes de seguir com o tutorial, vamos enviar uma mensagem de teste para ver se a configuração está correta. | ![]() |
11 | Preencha 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 | ![]() |
12 | Se 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; |
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> </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; | |
?> |