PHPackages                             symfony/whats-app-notifier - 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. symfony/whats-app-notifier

ActiveSymfony-notifier-bridge

symfony/whats-app-notifier
==========================

Symfony WhatsApp Notifier Bridge, via Meta's WhatsApp Cloud API

8.2.x-dev(today)00MITPHPPHP &gt;=8.4.1

Since Aug 1Pushed todayCompare

[ Source](https://github.com/symfony/whats-app-notifier)[ Packagist](https://packagist.org/packages/symfony/whats-app-notifier)[ Docs](https://symfony.com)[ Fund](https://symfony.com/sponsor)[ GitHub Sponsors](https://github.com/fabpot)[ RSS](/packages/symfony-whats-app-notifier/feed)WikiDiscussions 8.2 Synced today

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

WhatsApp Notifier
=================

[](#whatsapp-notifier)

Provides [Meta WhatsApp Cloud API](https://developers.facebook.com/docs/whatsapp/cloud-api)integration for Symfony Notifier, as a `Chatter` transport.

> **Note**This bridge talks directly to Meta's own Graph API `POST /{phone_number_id}/messages`endpoint. If you're looking for WhatsApp support through a third-party gateway instead, the `Twilio` bridge can also send WhatsApp messages, by prefixing its `From` number with `whatsapp:`.

DSN example
-----------

[](#dsn-example)

```
WHATSAPP_DSN=whatsapp://TOKEN@default?phone_number_id=PHONE_NUMBER_ID&api_version=v26.0

```

where:

- `TOKEN` is a WhatsApp Business permanent access token (system user token recommended)
- `PHONE_NUMBER_ID` is the sending number's `phone_number_id`, from the WhatsApp Business Account (WABA) configuration
- `api_version` is optional (defaults to `v26.0`)

The DSN carries no default recipient, so every message must set one through `WhatsAppOptions::recipientPhoneNumber()`. The transport does not claim messages without it, which leaves them to any other chatter transport that can deliver them.

Sending a template message
--------------------------

[](#sending-a-template-message)

Business-initiated messages (reminders, confirmations) require a pre-approved message template (Meta calls these HSM, for Highly Structured Messages). Use `WhatsAppOptions` to select one and set its body parameters:

```
use Symfony\Component\Notifier\Bridge\WhatsApp\WhatsAppOptions;
use Symfony\Component\Notifier\Message\ChatMessage;

$options = (new WhatsAppOptions())
    ->recipientPhoneNumber('5491112345678')
    ->template('recordatorio_turno', 'es_AR', ['Ana', 'Corte de pelo', '10/07/2026', '15:00']);

$chatMessage = new ChatMessage('Recordatorio de tu turno', $options);

$chatter->send($chatMessage);
```

Sending a free-form session message
-----------------------------------

[](#sending-a-free-form-session-message)

Inside WhatsApp's 24h customer service window (i.e. after the recipient has messaged the business), free-form text is allowed without a template:

```
use Symfony\Component\Notifier\Bridge\WhatsApp\WhatsAppOptions;
use Symfony\Component\Notifier\Message\ChatMessage;

$options = (new WhatsAppOptions())->recipientPhoneNumber('5491112345678');

$chatMessage = new ChatMessage('Tu turno para mañana sigue en pie, ¡te esperamos!', $options);

$chatter->send($chatMessage);
```

Quick-reply buttons on a template are configured on the template itself in Meta's WhatsApp Manager (Message Templates), not via this bridge. The API call only supplies the template name, language, and body parameters.

Resources
---------

[](#resources)

- [Contributing](https://symfony.com/doc/current/contributing/index.html)
- [Report issues](https://github.com/symfony/symfony/issues) and [send Pull Requests](https://github.com/symfony/symfony/pulls)in the [main Symfony repository](https://github.com/symfony/symfony)

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity34

Early-stage or recently created project

 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://avatars.githubusercontent.com/u/47313?v=4)[Fabien Potencier](/maintainers/fabpot)[@fabpot](https://github.com/fabpot)

---

Top Contributors

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

---

Tags

componentphpsymfonysymfony-componentnotifierchatwhatsappmeta

### Embed Badge

![Health badge](/badges/symfony-whats-app-notifier/health.svg)

```
[![Health](https://phpackages.com/badges/symfony-whats-app-notifier/health.svg)](https://phpackages.com/packages/symfony-whats-app-notifier)
```

###  Alternatives

[symfony/microsoft-teams-notifier

Symfony Microsoft Teams Notifier Bridge

121.0M](/packages/symfony-microsoft-teams-notifier)[symfony/twilio-notifier

Symfony Twilio Notifier Bridge

131.3M2](/packages/symfony-twilio-notifier)[chameleon-system/chameleon-base

The Chameleon System core.

1028.7k6](/packages/chameleon-system-chameleon-base)[symfony/fake-chat-notifier

Fake Chat (as email or log during development) Notifier Bridge.

10363.9k5](/packages/symfony-fake-chat-notifier)[symfony/google-chat-notifier

Symfony Google Chat Notifier Bridge

10206.9k5](/packages/symfony-google-chat-notifier)

PHPackages © 2026

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