Skip to content

EscolaLMS/Templates-SMS

Repository files navigation

Templates-SMS

codecov Tests PHPUnit in environments downloads downloads downloads

What does it do

Package for sms notifications with editable templates (for important user-related events). This package supports sending sms via twilio.

Installing

  • composer require escolalms/templates-sms
  • php artisan db:seed --class="EscolaLms\Templates-SMS\Database\Seeders\TemplateSmsSeeder"

Configuration

You can configure the connection to Twilio through keys in the .env file:

  • TWILIO_SID - twilio SID unique key
  • TWILIO_TOKEN - twilio auth token
  • TWILIO_FROM - twilio phone number
  • TWILIO_SSL_VERIFY - twilio ssl verify

You can also change the default driver in SMS_DRIVER

Example

Sending SMS

Sending an SMS using the Sms facade

Sms::driver('twilio')->send('123456789', 'SMS message');

or

Sms::send('123456789', 'SMS message');

Custom driver

You can define your own driver for sending sms. The driver must implement the interface \EscolaLms\TemplatesSms\Drivers\Contracts\SmsDriver.

interface SmsDriver
{
    public function send(string $to, string $content, array $mediaUrls = [], array $params = []): bool;
}

Example custom driver:

class CustomDriver implements \EscolaLms\TemplatesSms\Drivers\Contracts\SmsDriver
{
    public function send(string $to, string $content, array $mediaUrls = [], $params = []): bool
    {
        // Implement send() method.
    }
}

Register a new driver, we would do the following:

Sms::extend('custom', function($app) {
    return new CustomDriver($app);
});

Tests

Run ./vendor/bin/phpunit to run tests. See tests folder as it's quite good staring point as documentation appendix.

codecov Tests PHPUnit in environments

This package has a facade for testing. The Sms facade's fake method allows you to easily a fake sms driver.

public function testSms() {
    Sms::fake();
    ...
    $service->sendSms($phone1);
    ...
    Sms::assertSent($phone1);
    Sms::assertNotSent($phone2);
}
public function testSms() {
    Sms::fake();
    ...
    Sms::assertSent($phone1, fn($sms) => $sms->content === 'Sms message');
}