Viewing file: Signalwire.php (5.08 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\SmsProvider;
use App\Models\MessageLog; use Illuminate\Support\Facades\Log;
class Signalwire {
private $credentials; private $to_numbers; private $body; private $from_number; private $mms_files; private $message; private $send_fail = []; private $message_log;
public function __construct($credentials) { $this->credentials = $credentials; }
public function setTo($to) { $this->to_numbers = $to; return $this; }
public function setBody($body) { $this->body = $body; return $this; }
public function setFrom($from) { $this->from_number = $from; return $this; }
public function setFiles($files) { $this->mms_files = $files; return $this; }
public function setQueue($queue) { $this->queue = $queue; return $this; }
public function setType($response) { $this->sms_type = $response; return $this; }
public function setMessage($message) { $this->message = $message; return $this; }
public function send() { try { if (!isset($this->credentials->sw_status) || $this->credentials->sw_status != 'active') { throw new \Exception('This provider is not active. Please contact with the administrator'); } foreach ($this->to_numbers as $to) { try { if ($this->sms_type && $this->sms_type == 'inbox') { $type = 'inbox'; } else { $type = 'sent'; }
if ($this->queue) { $this->message_log = MessageLog::updateOrCreate([ 'to' => $to, 'from' => $this->from_number, 'body' => $this->body, 'message_id' => $this->message->id, 'customer_id' => $this->message->customer_id, 'type' => 'sent', ], ['status' => 'succeed', 'queue_id' => $this->queue->id]); } else { $this->message_log = MessageLog::create([ 'to' => $to, 'from' => $this->from_number, 'body' => $this->body, 'message_id' => $this->message->id, 'customer_id' => $this->message->customer_id, 'type' => $type, 'status' => 'succeed' ]); } $parameters = [ 'From' => $this->from_number, 'Body' => $this->body, 'To' => $to, ]; if ($this->mms_files) { $newMessageFiles = $this->mms_files; array_walk($newMessageFiles, function (&$value, $index) { $value = asset('uploads/' . $value); }); $parameters['mediaUrl'] = $newMessageFiles; }
$sending_url = $this->credentials->sw_space_url . "/api/laml/2010-04-01/Accounts/" . $this->credentials->sw_project_id . "/Messages.json";
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $sending_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); curl_setopt($ch, CURLOPT_USERPWD, $this->credentials->sw_project_id . ":" . $this->credentials->sw_token);
$get_response = curl_exec($ch);
if (curl_errno($ch)) { throw new \Exception('Message sent failed'); } else { $result = json_decode($get_response, true); }
} catch (\Exception $ex) { $this->message_log->update(['status' => 'failed']); Log::error($ex); if ($type == 'sent') { $this->setSendFail([ 'message_id' => $this->message->id, 'from_number' => $this->from_number, 'to_number' => $to, 'created_at' => now(), 'updated_at' => now(), 'reason' => $ex->getMessage(), ]); } } }
} catch (\Exception $ex) { Log::info($ex->getMessage()); return $ex->getMessage(); } }
public function getSendFail() { return $this->send_fail; }
private function setSendFail($sendFailArray) { $this->send_fail[] = $sendFailArray; } }
|