Enviado e recebendo SMS com PHP+BlueVia

Ola, hoje vamos ver 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 com varias linguagens, então por que nao integrar ela usando uma linguagem web como o PHP para fazer coisas “mais legais” nos meus programas?

Antes de começar, precisamos escolher quais tecnologias usar, nesse 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, vamos com o velho e bom apache serve.

Pronto agora so começar a programar!

Vamos dividir nosso sistema em duas parte uma de enviou e outra de leitura,  assim vamos ter dois processos separados e isso nos permite receber e envias SMSs ao mesmo tempo.

Para a leitura vamos criar um arquivos chamado receber.php aonde ele vai receber todos os SMSs e gravar em um arquivo chamado temp dentro do nosso servidor, nesse caso estou gravando dentro desse arquivo, mais 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 ( para saber mais sobre as chaves : http://richard.brochini.com/?p=248 )

$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 nosso aplicação dentro da rede.
$shortcode = “xxxx”;

Agora fazemos o loop para ficar “aguardando” os sms 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);

Pronto agora precisamos deixar rodando dentro do Ubuntu como um processo, nesse caso usei esse comando:

var/usr/php receber.php &

Agora que ja estamos recebendo, vamos enviar, para isso criamos o arquivo enviar.php

O inicio 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 que tratamos os erros nesse caso, foi seguindo os conceitos de OO, dentro do PHP5.

Pronto, podemos facilmente agora adaptar esse fonte, para ler uma lista de celulares e os texto de dentro de um arquivo ou algo do tipo.

 

Bookmark the permalink.