Skip to content

Instantly share code, notes, and snippets.

@ThiagoLimah
Created September 4, 2017 12:16
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save ThiagoLimah/24aa20b5e863091bfa63a6d4cbcf60bc to your computer and use it in GitHub Desktop.
Save ThiagoLimah/24aa20b5e863091bfa63a6d4cbcf60bc to your computer and use it in GitHub Desktop.
<?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 <thiagolimaes@gmail.com>
* @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