<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
expertsystemsau / transmitsms-laravel-client example snippets
use ExpertSystems\TransmitSms\Laravel\Facades\TransmitSms;
// Send an SMS — send(string $message, string $to, ?string $from = null, ?callable $configure = null)
TransmitSms::sms()->send('Hello from Laravel!', '+61400000000');
// Get account balance
$balance = TransmitSms::account()->getBalance();
use Illuminate\Notifications\Notification;
use ExpertSystems\TransmitSms\Laravel\Notifications\TransmitSmsMessage;
class OrderShipped extends Notification
{
public function via($notifiable): array
{
return ['transmitsms'];
}
public function toTransmitSms($notifiable): TransmitSmsMessage
{
return TransmitSmsMessage::create('Your order has been shipped!')
->from('MyStore');
}
}
class User extends Authenticatable
{
use Notifiable;
public function routeNotificationForTransmitsms($notification): ?string
{
return $this->phone_number;
}
}
$user->notify(new OrderShipped());
TransmitSmsMessage::create('Your order has shipped!')
->from('MyStore') // sender ID (else config/default)
->countryCode('AU') // normalise local numbers
->formatNumbers() // format numbers to E.164 client-side
->validity(60) // minutes to attempt delivery
->sendAt('2026-12-25 09:00:00') // schedule
->repliesToEmail('[email protected]') // route replies to an email
->trackedLinkUrl('https://example.com'); // [tracked-link] target
public function toTransmitSms($notifiable): TransmitSmsMessage
{
return TransmitSmsMessage::create('Flash sale for members!')
->toList(12345);
}
use App\Jobs\UpdateOrderSmsStatusJob;
use App\Jobs\ProcessCustomerReplyJob;
use ExpertSystems\TransmitSms\Laravel\Notifications\TransmitSmsMessage;
class OrderShipped extends Notification
{
public function __construct(public Order $order) {}
public function via($notifiable): array
{
return ['transmitsms'];
}
public function toTransmitSms($notifiable): TransmitSmsMessage
{
return TransmitSmsMessage::create("Your order #{$this->order->id} has shipped!")
->from('MYSTORE')
->onDlr(UpdateOrderSmsStatusJob::class, [
'order_id' => $this->order->id,
])
->onReply(ProcessCustomerReplyJob::class, [
'order_id' => $this->order->id,
'customer_id' => $notifiable->id,
]);
}
}
namespace App\Jobs;
use App\Models\Order;
use ExpertSystems\TransmitSms\Data\DlrCallbackData;
use ExpertSystems\TransmitSms\Laravel\Contracts\HandlesDlrCallback;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
class UpdateOrderSmsStatusJob implements HandlesDlrCallback, ShouldQueue
{
use InteractsWithQueue, Queueable;
public function __construct(
public DlrCallbackData $dlr,
public array $context,
) {}
public function handle(): void
{
$order = Order::find($this->context['order_id']);
$order->update([
'sms_status' => $this->dlr->status,
'sms_delivered_at' => $this->dlr->isDelivered()
? now()->parse($this->dlr->datetime)
: null,
]);
if ($this->dlr->isFailed()) {
// Handle failure - maybe send email instead
Log::warning('SMS delivery failed', [
'order_id' => $order->id,
'error' => $this->dlr->errorDescription,
]);
}
}
}
namespace App\Jobs;
use App\Models\SmsConversation;
use ExpertSystems\TransmitSms\Data\ReplyCallbackData;
use ExpertSystems\TransmitSms\Laravel\Contracts\HandlesReplyCallback;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
class ProcessCustomerReplyJob implements HandlesReplyCallback, ShouldQueue
{
use Queueable;
public function __construct(
public ReplyCallbackData $reply,
public array $context,
) {}
public function handle(): void
{
SmsConversation::create([
'order_id' => $this->context['order_id'],
'customer_id' => $this->context['customer_id'],
'direction' => 'inbound',
'message' => $this->reply->message,
'mobile' => $this->reply->mobile,
'received_at' => $this->reply->receivedAt,
]);
}
}
namespace App\Jobs;
use ExpertSystems\TransmitSms\Data\LinkHitCallbackData;
use ExpertSystems\TransmitSms\Laravel\Contracts\HandlesLinkHitCallback;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
class TrackLinkClickJob implements HandlesLinkHitCallback, ShouldQueue
{
use Queueable;
public function __construct(
public LinkHitCallbackData $linkHit,
public array $context,
) {}
public function handle(): void
{
LinkClick::create([
'campaign_id' => $this->context['campaign_id'],
'mobile' => $this->linkHit->mobile,
'url' => $this->linkHit->url,
'clicked_at' => $this->linkHit->clickedAt,
]);
}
}
// App\Providers\EventServiceProvider.php
use ExpertSystems\TransmitSms\Laravel\Events\DlrReceived;
use ExpertSystems\TransmitSms\Laravel\Events\ReplyReceived;
use ExpertSystems\TransmitSms\Laravel\Events\LinkHitReceived;
protected $listen = [
DlrReceived::class => [
\App\Listeners\LogDlrCallback::class,
],
ReplyReceived::class => [
\App\Listeners\LogReplyCallback::class,
],
LinkHitReceived::class => [
\App\Listeners\LogLinkHitCallback::class,
],
];
namespace App\Listeners;
use ExpertSystems\TransmitSms\Laravel\Events\DlrReceived;
use Illuminate\Support\Facades\Log;
class LogDlrCallback
{
public function handle(DlrReceived $event): void
{
Log::info('DLR callback received', [
'message_id' => $event->dlr->messageId,
'mobile' => $event->dlr->mobile,
'status' => $event->dlr->status,
'context' => $event->context,
]);
}
}