-
-
Save josep112/bb925934261f65426c1023b9a1d3b5ba to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
require_once "/var/lib/asterisk/agi-bin/phpagi-asmanager.php"; | |
require_once "/var/lib/asterisk/agi-bin/phpagi.php"; | |
/** | |
* Classe para envio de SMS utilizando o modulo Chan_Dongle do Asterisk. | |
* | |
* @author Thiago A. de Lima <[email protected]> | |
* @version 1.0 | |
*/ | |
class SMS | |
{ | |
/** | |
* @var string Arquivo de LOG para checagem dos envios dos SMS. | |
*/ | |
private $logAsterisk = "/var/log/asterisk/messages"; | |
private $manager; | |
private $modulo = "Modulo04"; | |
private $numero; | |
private $mensagem; | |
/** | |
* Realiza a conexão com a classe AGI do Asterisk. | |
*/ | |
public function __construct() | |
{ | |
$this->manager = new AGI_AsteriskManager(); | |
$this->manager->connect("localhost", "remoto", "conesul270314"); | |
} | |
/** | |
* Verifica o status do ID do SMS enviado pelo modulo. | |
* | |
* Ex.: | |
* $sms = new SMS(); | |
* $status = $sms->checaEnvio("0x170f690"); | |
* | |
* if ("sent" == $status) { | |
* echo("SMS enviado pela operadora!"); | |
* } | |
* elseif ("error" == $status) { | |
* echo("A operadora não realizou o envio do SMS!"); | |
* } | |
* else { | |
* echo("SMS pendente de envio!"); | |
* } | |
* | |
* @param string $smsID | |
* @return string | |
*/ | |
public function checaEnvio($smsID) | |
{ | |
$file = array_reverse(file($this->logAsterisk)); | |
$status = "pending"; | |
foreach ($file AS $row) { | |
if (strpos($row, $smsID) !== false) { | |
if (strpos($row, "Successfully") !== false) { | |
$status = "sent"; | |
break; | |
} | |
else if (strpos($row, "Error") !== false) { | |
$status = "error"; | |
break; | |
} | |
} | |
} | |
return $status; | |
} | |
/** | |
* Realiza o envio do SMS utilizando a classe AGI do Asterisk. | |
* | |
* Ex.: | |
* $sms = new SMS(); | |
* $result = $sms->enviar("+5511999875634", "Teste de SMS", "Modulo01"); | |
* echo($result); | |
* | |
* @param string $numero | |
* @param string $mensagem | |
* @param string $modulo | |
* @return json | |
*/ | |
public function enviar($numero, $mensagem, $modulo = null) | |
{ | |
$this->setNumero($numero); | |
$this->setMensagem($mensagem); | |
if (!is_null($modulo)) { | |
$this->setModulo($modulo); | |
} | |
$command = "dongle sms ".$this->modulo." ".$this->numero." ".$this->mensagem; | |
$output = $this->manager->Command($command); | |
if (isset($output["data"])) { | |
if (strpos($output["data"], "SMS queued") !== false) { | |
$explode = explode("with id", $output["data"], 2); | |
if (isset($explode[1]) && !empty($explode[1])) { | |
$smsID = trim(str_replace("\n", "", $explode[1])); | |
return json_encode(array( | |
"status" => 1, | |
"msg" => "SMS enviado para a fila de envio do modulo.", | |
"id" => $smsID, | |
"modulo" => $this->modulo, | |
"numero" => $this->numero, | |
"mensagem" => $this->mensagem | |
)); | |
} | |
else { | |
return json_encode(array( | |
"status" => 1, | |
"msg" => "SMS enviado para a fila de envio do modulo.", | |
"id" => null, | |
"modulo" => $this->modulo, | |
"numero" => $this->numero, | |
"mensagem" => $this->mensagem | |
)); | |
} | |
} | |
else { | |
return json_encode(array( | |
"status" => 0, | |
"msg" => "Erro ao enviar o SMS para a fila de envio do modulo." | |
)); | |
} | |
} | |
else { | |
return json_encode(array( | |
"status" => 0, | |
"msg" => "Erro ao enviar o SMS via AGI." | |
)); | |
} | |
} | |
/** | |
* Seta por qual modulo deve ser enviado o SMS. | |
* | |
* @param string | |
*/ | |
public function setModulo($str) | |
{ | |
$this->modulo = $this->limpaString($str); | |
} | |
/** | |
* Seta para qual número deve ser enviado o SMS. O número deve conter | |
* o DDD completo do número. | |
* | |
* Ex.: +5511999875634 ou 11999875634 | |
* | |
* @param string | |
*/ | |
public function setNumero($str) | |
{ | |
$clean = str_replace(array("-", "(", ")"), "", $str); | |
$clean = str_replace("+55", "", $clean); | |
$this->numero = "+55" . $clean; | |
} | |
/** | |
* Seta a mensagem que deverá ser enviada no SMS. Aconselha-se que não | |
* seja enviado mais que 100 caracteres e que a mensagem não possua | |
* acentos e/ou caracteres especiais. | |
* | |
* @param string | |
*/ | |
public function setMensagem($str) | |
{ | |
$this->mensagem = $this->limpaString($str); | |
} | |
/** | |
* Realiza a limpeza da string, removendo acentos e caracteres especiais | |
* para envio do SMS. | |
* | |
* @param string | |
* @return string | |
*/ | |
public function limpaString($str) | |
{ | |
setlocale(LC_CTYPE, "pt_BR"); | |
return iconv("UTF-8", "ASCII//TRANSLIT", $str); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment