Enviando e recebendo SMS com PHP + BlueVia

Hoje veremos como integrar aplicações web com a rede de serviços mobile.
Como ja foi visto antes em http://richard.brochini.com/?p=248, podemos usar a API do Bluevia para integrar várias linguagens, então por que não integrá-la usando uma linguagem web como o PHP para fazer coisas mais legais nos meus programas?

Antes de começar, precisamos escolher quais tecnologias usar, e neste caso vamos usar php5+zend, usando as classes que a própria bluevia disponibiliza.
Para a parte de SO estou utilizando uma dist Ubuntu e para web server, utilizaremos o apache serve.

Vamos dividir nosso sistema em duas partes: uma de envio e outra de leitura. Assim teremos dois processos separados e isso nos permite receber e enviar SMS’s ao mesmo tempo.
Para a leitura criaremos um arquivos chamado receber.php, onde irá receber todos os SMS’s e gravar em um arquivo chamado temp dentro do nosso servidor. Nesse caso estou gravando dentro desse arquivo, mas nada impede de alterar o fonte para gravar dentro de um BD ou algo do tipo.

Arquivo receber.php

Primeiro importamos as classes e incluímos o zend framework
:

set_include_path(‘projeto/bluevia/ZendFramework-1.11.11/library’);
include_once “src/BlueviaClient.php”;

Depois criamos o arquivo para escrita:

$file = fopen (“temp”, “a”);

Agora iniciamos as classes e passamos a chaves de acesso do Bluevia:

$mode= BlueviaClient_Api_Constants::LIVE_MODE;
$application_context = array(
‘app’ => array(
‘consumer_key’ => ‘xxxxxx’,
‘consumer_secret’ => ‘xxxxxx’
));
$bv = new BlueviaClient($mode,$application_context);
$sms = $bv->getService(‘SmsMo’);

Definimos nosso shortcode, responsável por identificar nossa aplicação dentro da rede:

$shortcode = “xxxx”;

Agora fazemos o loop para ficar “aguardando” os sms’s chegarem e logo em seguida guardar o conteúdo deles no arquivo temp:

while(true){
try{
$msg = $sms->getMessages($shortcode);
if($msg!=”){
$temVars = $msg->receivedSMS->receivedSMS->message.”-”.$msg->receivedSMS->receivedSMS->originAddress->phoneNumber.”\r\n”;
while(true){
if(is_writable(temp)){
echo $temVars;
fwrite($file,$temVars);
break;
}
}
}
}catch(Exception $e) {
echo “erro “.$e->getMessage();
}
sleep(1);
}
fclose($file);

Agora precisamos deixar rodando dentro do Ubuntu como um processo, e neste caso usei esse comando:

var/usr/php receber.php &

Agora que já estamos recebendo, vamos enviar. Para isso criamos o arquivo enviar.php.
O início se parece muito com o outro que foi feito, inclui as classes e estancia elas
:

$oldpath = set_include_path(‘.:/home/tecnomancher/projeto/bluevia/ZendFramework-1.11.11/library’);
include_once “src/BlueviaClient.php”;
$mode= BlueviaClient_Api_Constants::LIVE_MODE;
$application_context = array(
‘app’ => array(
‘consumer_key’ => ‘xxxxxx’,
‘consumer_secret’ => ‘xxxxx’
),
‘user’ => array(
‘token_access’ => ”,
‘token_secret’ => ”
)
);
$bv = new BlueviaClient($mode,$application_context);
$application_context = array(
‘app’ => array(
‘consumer_key’ => ‘xxxxx’,
‘consumer_secret’ => ‘xxxxxx’
),
‘user’ => array(
‘token_access’ => ‘xxxxxxxxxxxxx’,
‘token_secret’ => ‘xxxxxxxxxxxxx’
)
);

E para enviar basta passar as infos para a classe BlueviaClient, e tratar os erros:

$bv = new BlueviaClient($mode,$application_context);
if ($bv){
$smsMT = $bv->getService(‘SmsMT’);
if ($smsMT){
$smsMT->addRecipient(“551199732787″); // numero com 55 DD CEL
$smsMT->setMessage(“teste de envio olha eu aki!!”);
try{
$result = $smsMT->send();
print “Sms MT API\n”;
print “Send SMS\n”;
if($result) {
print “Sms ID “.$result.”\n”;
}
} catch (Exception $e) {
print “Sms MT\n”;
print “Send SMS\n”;
print “Exception sending SMS: “.$e->getMessage().”\n”;
}
print “Request “.$bv->getLastRequest().”\n”;
print “Response “.$bv->getLastResponse().”\n”;
try {
$delivery_status = $smsMT->getDeliveryStatus($result);
print “Delivery status\n”;
print “Phone number “.$delivery_status->smsDeliveryStatus->smsDeliveryStatus[0]->address->phoneNumber.”\n”;
print “Delivery status “.$delivery_status->smsDeliveryStatus->smsDeliveryStatus[0]->deliveryStatus.”\n”;
} catch (Exception $e) {
print “Delivery status\n”;
print “Exception retreiving the SMS delivery status: “.$e->getMessage().”\n”;
}
unset($smsMT);
}
}

Notem que a forma com que tratamos os erros nesse caso, foi seguindo os conceitos de OO dentro do PHP5.
Podemos facilmente adaptar esse fonte, para ler uma lista de celulares e os textos de dentro de um arquivo ou algo do tipo.



Colunista

Richard Brochini

Richard Brochini, trabalha a 8 anos com desenvolvimento de projetos para TI. Vencedor da categoria Jogos Mobile na SBGames 2008, ganhador do prêmio Porto Seguro como melhor jogo on-line, vencedor de melhor jogo feito para Tv Digital da TOTVz, dentre outras competições. Formado em Ciência Da Computação pela Universidade Anhembi Morumbi ,Certificado pela Impacta Tecnologia. Procura sempre aprender novas tecnologias, com esse diferencial, está sempre capacitado para atender os principais projetos da área. Hoje em dia está muito empolgado com a onda Smart Watch e já desenvolveu alguns protótipos.
Para entrar em contato: Richard@brochini.com



Mais artigos sobre desenvolvimento web

ABRAWEB - Associação Brasileira de Profissionais de Internet | CNPJ 05037868/0001-80