You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

231 lines
7.7 KiB

<?php
namespace app\Providers;
use app\Interfaces\IApiMedia;
use Twilio\Rest\Client;
class ApiTwilio implements IApiMedia
{
private $sid = 'ACab626d6f133aa20b21879d37cd21b139';
private $token = '131e5ed83468349ff93250ca72417d70';
private $numeroTwilio = '553140428280';
/** @var string $hook resposta do webhook */
private $hook;
function getContentType()
{
return 'text/xml';
}
function getchannel()
{
return CONF_WHATSAPP_CHANNEL;
}
function enviarMedia($whatsapp, $link, $type, $titulo = null)
{
/*
twilio s<EFBFBD> suporta esses formatos.
Images JPG, JPEG, PNG
Audio MP3, OGG, AMR
Documents PDF
Video MP4 (with H.264 video codec and AAC audio)
Contacts vCard (.vcf)*/
$twilio = new Client($this->sid, $this->token);
$message = $twilio->messages->create(
"whatsapp:+$whatsapp", // to
[
"from" => "whatsapp:+{$this->numeroTwilio}",
"mediaUrl" => [$link]
]
);
logger('twilio')->info(var_export($message->body, true));
return $message->body;
}
function enviarMsg($whatsapp, $mensagem, $encode = true)
{
if ($encode) {
$mensagem = utf8_encode($mensagem);
}
$twilio = new Client($this->sid, $this->token);
$message = $twilio->messages->create(
"whatsapp:+$whatsapp", // to
[
"from" => "whatsapp:+{$this->numeroTwilio}",
"body" => $mensagem,
]
);
logger('twilio')->info(var_export($message->body, true));
return $message->body;
}
function enviarMsgIterativaLista($whatsapp, $mensagem, $nomeButton, $sections)
{
}
function enviarMsgIterativaBotao($whatsapp, $mensagem, $buttons)
{
}
function enviarContato($whatsapp, $nome, $contato)
{
}
function enviarLocalizacao($whatsapp, $longitude, $latitude, $nome = null, $endereco = null)
{
}
function baixarMidia()
{
$request = new Requests();
if (in_array($this->getType(), ['location', 'contacts', 'text'])) {
return true;
}
logger('baixarMidia')->info('url: ' . $this->hook['MediaUrl0']);
$request->setToken(base64_encode("ACab626d6f133aa20b21879d37cd21b139:131e5ed83468349ff93250ca72417d70"));
$request->setUrl($this->hook['MediaUrl0']);
$name = $this->getId();
$request->requestType("GET");
$request->setMetodo('');
$pathfile = $request->storage . $name;
$retorno = $request->exec('Basic');
logger('baixarMidia')->info(var_export($retorno, true));
file_put_contents($pathfile, $retorno);
if (file_exists($pathfile)) {
return true;
}
return false;
}
function getProfile()
{
return $this->hook['ProfileName'];
}
function getPhone()
{
return $this->hook['WaId'];
}
function getType()
{
$type = $this->hook['MediaContentType0'];
if ($type) {
$type = explode('/', $type);
if ($type[0] == 'application') {
return 'document';
}
return $type[0];
}
return 'text';
}
function getMimetype()
{
return $this->hook['MediaContentType0'];
}
function getId()
{
return $this->hook['MessageSid'];
}
function getIsValidMessage()
{
return is_array($this->hook);
}
function getMessage()
{
return $this->hook['Body'];
}
function setMessage($msg)
{
$this->hook['Body'] = $msg;
}
function getContactFormatted()
{
return false;
}
function getContactPhone()
{
return false;
}
function getGeolocation($type)
{
return false;
}
function setHook($hook)
{
//$array = "SmsMessageSid=SM3f3e0cac9d0da519ec0ffa7f15eaa15b&NumMedia=0&ProfileName=Lucas&SmsSid=SM3f3e0cac9d0da519ec0ffa7f15eaa15b&WaId=556596107663&SmsStatus=received&Body=sdsdfads&To=whatsapp%3A%2B14155238886&NumSegments=1&MessageSid=SM3f3e0cac9d0da519ec0ffa7f15eaa15b&AccountSid=ACab626d6f133aa20b21879d37cd21b139&From=whatsapp%3A%2B556596107663&ApiVersion=2010-04-01";
$array = explode("&", urldecode($hook));
$map = [];
foreach ($array as $key => $value) {
$auxi = $array = explode("=", $value);
$map[$auxi[0]] = $auxi[1];
}
// mensagem normal
// [SmsMessageSid] => SM3f3e0cac9d0da519ec0ffa7f15eaa15b
// [NumMedia] => 0
// [ProfileName] => Lucas
// [SmsSid] => SM3f3e0cac9d0da519ec0ffa7f15eaa15b
// [WaId] => 556596107663
// [SmsStatus] => received
// [Body] => sdsdfads
// [To] => whatsapp%3A%2B14155238886
// [NumSegments] => 1
// [MessageSid] => SM3f3e0cac9d0da519ec0ffa7f15eaa15b
// [AccountSid] => ACab626d6f133aa20b21879d37cd21b139
// [From] => whatsapp%3A%2B556596107663
// [ApiVersion] => 2010-04-01
// imagem
// [MediaContentType0] => image/jpeg
// [SmsMessageSid] => MM0e531d626f74ec950e637d7491b0080c
// [NumMedia] => 1
// [ProfileName] => Lucas
// [SmsSid] => MM0e531d626f74ec950e637d7491b0080c
// [WaId] => 556596107663
// [SmsStatus] => received
// [Body] =>
// [To] => whatsapp:+14155238886
// [NumSegments] => 1
// [MessageSid] => MM0e531d626f74ec950e637d7491b0080c
// [AccountSid] => ACab626d6f133aa20b21879d37cd21b139
// [From] => whatsapp:+556596107663
// [MediaUrl0] => https://api.twilio.com/2010-04-01/Accounts/ACab626d6f133aa20b21879d37cd21b139/Messages/MM0e531d626f74ec950e637d7491b0080c/Media/ME4ff81dee03f2cd1b7875d87954e8abd7
// [ApiVersion] => 2010-04-01
// documento n<EFBFBD>o valido
// [SmsMessageSid] => MM2f04ee178bf6843dd26ac19e6e193c19
// [NumMedia] => 0
// [ProfileName] => Lucas
// [SmsSid] => MM2f04ee178bf6843dd26ac19e6e193c19
// [WaId] => 556596107663
// [SmsStatus] => received
// [Body] => INSTALA<EFBFBD><EFBFBD>O WHATSAPP.docx
// [To] => whatsapp:+553140428280
// [NumSegments] => 1
// [MessageSid] => MM2f04ee178bf6843dd26ac19e6e193c19
// [AccountSid] => ACab626d6f133aa20b21879d37cd21b139
// [From] => whatsapp:+556596107663
// [ApiVersion] => 2010-04-01
// documento pdf
// [MediaContentType0] => application/pdf
// [SmsMessageSid] => MM1042d93ac503a7468b7d3fb3a0ca77d5
// [NumMedia] => 1
// [ProfileName] => Lucas
// [SmsSid] => MM1042d93ac503a7468b7d3fb3a0ca77d5
// [WaId] => 556596107663
// [SmsStatus] => received
// [Body] => Cap1-_atlas_.pdf
// [To] => whatsapp:+553140428280
// [NumSegments] => 1
// [MessageSid] => MM1042d93ac503a7468b7d3fb3a0ca77d5
// [AccountSid] => ACab626d6f133aa20b21879d37cd21b139
// [From] => whatsapp:+556596107663
// [MediaUrl0] => https://api.twilio.com/2010-04-01/Accounts/ACab626d6f133aa20b21879d37cd21b139/Messages/MM1042d93ac503a7468b7d3fb3a0ca77d5/Media/ME8fead4a393c68d2fcd14bdff03cc8e74
// [ApiVersion] => 2010-04-01
$this->hook = $map;
}
function retornaTituloDocument()
{
if ($this->getType() == 'text') {
return null;
}
return $this->hook['Body'];
}
}