PHPackages                             groupesti/laravel-twilio - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. groupesti/laravel-twilio

ActiveLibrary

groupesti/laravel-twilio
========================

Intégration Twilio pour Laravel : messagerie SMS/MMS, appels vocaux, médias, TOTP, webhooks signés et audit.

v1.0.0(today)00proprietaryPHPPHP ^8.2

Since Aug 1Pushed todayCompare

[ Source](https://github.com/groupesti/laravel-twilio)[ Packagist](https://packagist.org/packages/groupesti/laravel-twilio)[ RSS](/packages/groupesti-laravel-twilio/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (8)Versions (2)Used By (0)

groupesti/laravel-twilio
========================

[](#groupestilaravel-twilio)

Intégration Twilio pour Laravel : messagerie SMS/MMS, appels vocaux, téléchargement de médias, codes à usage unique (TOTP), webhooks à signature validée et journal d'audit.

Extrait du module applicatif `App\Modules\Twilio` et transformé en package Composer autonome.

Prérequis
---------

[](#prérequis)

- PHP 8.2+
- Laravel 12
- `twilio/sdk` ^8.3 (installé automatiquement)

Installation
------------

[](#installation)

```
composer require groupesti/laravel-twilio
```

Le fournisseur `Twilio\Providers\TwilioServiceProvider` est enregistré par auto-discovery.

```
php artisan vendor:publish --tag=twilio-config
php artisan vendor:publish --tag=twilio-lang
php artisan migrate
```

Les migrations sont chargées directement depuis le package ; `--tag=twilio-migrations` ne sert que si vous souhaitez les modifier.

Namespace et cohabitation avec le SDK Twilio
--------------------------------------------

[](#namespace-et-cohabitation-avec-le-sdk-twilio)

Le package utilise `Twilio\` comme namespace racine, **le même préfixe que le SDK officiel** `twilio/sdk`. C'est volontaire et fonctionnel : Composer accepte plusieurs répertoires pour un même préfixe PSR-4 et les résout dans l'ordre.

Deux sous-espaces se croisent sans collision de nom de classe :

Sous-espaceSDK officielCe package`Twilio\Exceptions\``TwilioException`, `RestException`, `ConfigurationException`…`TwilioModuleException`, `TwilioConfigurationException`, `TwilioDeliveryException`, `TwilioWebhookException``Twilio\Http\``Client`, `CurlClient`, `Request`, `Response``Controllers\`, `Middleware\`, `Requests\`**Contrainte à respecter en évolution :** n'ajoutez jamais dans ce package une classe dont le nom pleinement qualifié existe déjà dans le SDK (par exemple `Twilio\Http\Client` ou `Twilio\Exceptions\TwilioException`). Le chargeur en retiendrait une seule et le comportement dépendrait de l'ordre d'autoload.

Configuration
-------------

[](#configuration)

Les valeurs de `config/twilio.php` servent de **repli**. `Twilio\Services\TwilioConfigResolver` privilégie toujours l'enregistrement `TwilioConfig` actif en base de données.

Variables d'environnement principales :

```
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_FROM_NUMBER=
TWILIO_MESSAGING_SERVICE_SID=
TWILIO_VALIDATE_SIGNATURE=true

TWILIO_VOICE_LOCALE="fr-CA"
TWILIO_RECORDING_ENABLED=false
TWILIO_DEFAULT_AGENT_PHONE=

TWILIO_TOTP_LENGTH=6
TWILIO_TOTP_TTL=300

TWILIO_MEDIA_DISK=public
TWILIO_MEDIA_PATH=twilio/media
```

Routes
------

[](#routes)

Trois groupes, pilotés par `config('twilio.routes')` :

GroupeDéfautPréfixeMiddleware`webhooks`activé`twilio``twilio.audit`, `twilio.signature``api`activé`api``api` + `auth:sanctum` (déclaré dans le fichier de routes)`web`**désactivé**`admin/twilio``web`, `auth`Les routes web sont désactivées par défaut parce que leurs contrôleurs rendent les vues `apps.twilio.*` (`dashboard`, `messages`, `calls`, `media`, `statuses`, `config`, `audit`), qui ne font pas partie du package et doivent être fournies par l'application hôte. Activez-les une fois ces vues en place :

```
TWILIO_ROUTES_WEB=true
```

Webhooks à déclarer dans la console Twilio :

```
POST https://exemple.com/twilio/messaging/inbound
POST https://exemple.com/twilio/messaging/status
POST https://exemple.com/twilio/voice/inbound
POST https://exemple.com/twilio/voice/status
POST https://exemple.com/twilio/voice/recording

```

Utilisation
-----------

[](#utilisation)

```
use Twilio\Actions\SendTwilioMessageAction;
use Twilio\DTOs\SendMessageData;

$message = app(SendTwilioMessageAction::class)->handle(
    new SendMessageData(to: '+15145550100', body: 'Bonjour.'),
);
```

```
use Twilio\Actions\StartTwilioVoiceCallAction;
use Twilio\DTOs\VoiceCallData;

$call = app(StartTwilioVoiceCallAction::class)->handle(
    new VoiceCallData(to: '+15145550100', message: 'Votre rendez-vous est confirmé.'),
);
```

Le client REST est résolu via l'interface, ce qui permet de le substituer en test :

```
use Twilio\Interfaces\TwilioClientInterface;

$this->app->instance(TwilioClientInterface::class, $fake);
```

Structure
---------

[](#structure)

```
config/twilio.php            Configuration de repli
database/factories/          Factories Eloquent (Twilio\Database\Factories)
database/migrations/         8 tables : configs, conversations, statuses,
                             messages, audits, calls, media, totps
lang/{fr,en}/                twilio.php (erreurs, TOTP), twilio_admin.php (libellés)
routes/                      web.php, api.php, webhooks.php
src/Actions/                 15 actions métier
src/Concerns/HasUuid.php     Clé primaire UUID v7
src/DTOs/                    Objets d'entrée
src/Exceptions/              Exceptions typées avec clé de traduction et statut HTTP
src/Http/                    Contrôleurs admin/API/webhooks, middlewares, form requests
src/Interfaces/              TwilioClientInterface
src/Models/                  8 modèles + ReferenceModel
src/Providers/               TwilioServiceProvider
src/Services/                Client, resolver de configuration, présentateur de statuts,
                             fabrique de réponses TwiML
src/Support/                 Extraction de payload, construction d'URL de webhook

```

Traductions
-----------

[](#traductions)

Les clés utilisées (`twilio.errors.*`, `twilio_admin.*`) ne sont pas namespacées : elles doivent être publiées dans le dossier `lang/` de l'application.

```
php artisan vendor:publish --tag=twilio-lang
```

Écarts avec le module d'origine
-------------------------------

[](#écarts-avec-le-module-dorigine)

- `App\Traits\HasUuid` → `Twilio\Concerns\HasUuid` (réimplémenté).
- `App\Support\Models\ReferenceModel` → `Twilio\Models\ReferenceModel` (réimplémenté ; la couche de cache de la version applicative n'a pas été reprise).
- `App\Support\Providers\ModuleServiceProvider` → `Illuminate\Support\ServiceProvider` standard.
- `App\Http\Controllers\Controller` → `Illuminate\Routing\Controller`.
- Clés de configuration ajoutées, référencées par le code mais absentes du module : `voice.default_agent_phone`, `totp.message_key`, `media.disk`, `media.path`.
- Fichiers de langue fournis, reconstitués à partir des clés effectivement appelées.

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

0d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5d5d8cda447c6966d4dbce644bd1d2684a190f818b7a35f1361e0990c791aa6e?d=identicon)[groupesti](/maintainers/groupesti)

---

Top Contributors

[![SimardRichard](https://avatars.githubusercontent.com/u/54546844?v=4)](https://github.com/SimardRichard "SimardRichard (1 commits)")

---

Tags

laraveltotpsmstwiliowebhookvoicemms

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/groupesti-laravel-twilio/health.svg)

```
[![Health](https://phpackages.com/badges/groupesti-laravel-twilio/health.svg)](https://phpackages.com/packages/groupesti-laravel-twilio)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3355.4M352](/packages/psalm-plugin-laravel)[laravel/scout

Laravel Scout provides a driver based solution to searching your Eloquent models.

1.7k57.2M659](/packages/laravel-scout)[api-platform/laravel

API Platform support for Laravel

58174.6k18](/packages/api-platform-laravel)[laravel/ai

The official AI SDK for Laravel.

1.1k4.6M275](/packages/laravel-ai)[pressbooks/pressbooks

Pressbooks is an open source book publishing tool built on a WordPress multisite platform. Pressbooks outputs books in multiple formats, including PDF, EPUB, web, and a variety of XML flavours, using a theming/templating system, driven by CSS.

45844.8k1](/packages/pressbooks-pressbooks)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

78727.1M205](/packages/laravel-mcp)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
