Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3287,6 +3287,7 @@ private function registerNotifierConfiguration(array $config, ContainerBuilder $
$loader->load('notifier_webhook.php');

$webhookRequestParsers = [
NotifierBridge\Lox24\Webhook\Lox24RequestParser::class => 'notifier.webhook.request_parser.lox24',
NotifierBridge\Smsbox\Webhook\SmsboxRequestParser::class => 'notifier.webhook.request_parser.smsbox',
NotifierBridge\Sweego\Webhook\SweegoRequestParser::class => 'notifier.webhook.request_parser.sweego',
NotifierBridge\Twilio\Webhook\TwilioRequestParser::class => 'notifier.webhook.request_parser.twilio',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,17 @@

namespace Symfony\Component\DependencyInjection\Loader\Configurator;

use Symfony\Component\Notifier\Bridge\Lox24\Webhook\Lox24RequestParser;
use Symfony\Component\Notifier\Bridge\Smsbox\Webhook\SmsboxRequestParser;
use Symfony\Component\Notifier\Bridge\Sweego\Webhook\SweegoRequestParser;
use Symfony\Component\Notifier\Bridge\Twilio\Webhook\TwilioRequestParser;
use Symfony\Component\Notifier\Bridge\Vonage\Webhook\VonageRequestParser;

return static function (ContainerConfigurator $container) {
$container->services()
->set('notifier.webhook.request_parser.lox24', Lox24RequestParser::class)
->alias(Lox24RequestParser::class, 'notifier.webhook.request_parser.lox24')

->set('notifier.webhook.request_parser.smsbox', SmsboxRequestParser::class)
->alias(SmsboxRequestParser::class, 'notifier.webhook.request_parser.smsbox')

Expand Down
43 changes: 43 additions & 0 deletions src/Symfony/Component/Notifier/Bridge/Lox24/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,49 @@ $sms->options($options);
$texter->send($sms);
```

Usage in Combination with the Notifier Component
------------------------------------------------

The usage of the Webhook component when using a third-party transport in
the Notifier is very similar to the usage with the Mailer.

Currently, the LOX24 SMS transport supports webhooks. Parser service name ``notifier.webhook.request_parser.lox24``.

For SMS webhooks, react to the class:`Symfony\\Component\\RemoteEvent\\Event\\Sms\\SmsEvent` event.

Other LOX24 webhooks are also possible to handle as class:`Symfony\\Component\\RemoteEvent\\RemoteEvent` instances:

```
use Symfony\Component\RemoteEvent\Attribute\AsRemoteEventConsumer;
use Symfony\Component\RemoteEvent\Consumer\ConsumerInterface;
use Symfony\Component\RemoteEvent\Event\Sms\SmsEvent;
use Symfony\Component\RemoteEvent\RemoteEvent;

#[AsRemoteEventConsumer('notifier_lox24')]
class WebhookListener implements ConsumerInterface
{
public function consume(RemoteEvent $event): void
{
if ($event instanceof SmsEvent) {
$this->handleSmsEvent($event);
} else {
// Handle other LOX24 webhook events
$this->handleRemoteEvent($event);
}
}

private function handleSmsEvent(SmsEvent $event): void
{
// Handle the SMS event
}

private function handleRemoteEvent(RemoteEvent $event): void
{
// Handle other LOX24 webhook events
}
}
```

Resources
---------

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ private function createEventFromPayload(string $eventName, array $data, array $p
{
return match ($eventName) {
'sms.delivery', 'sms.delivery.dryrun' => $this->createDeliveryEvent($data, $payload),
default => $this->createRemoteEvent($eventName, $payload),
default => new RemoteEvent($eventName, $payload['id'], $payload),
};
}

Expand Down Expand Up @@ -120,9 +120,4 @@ private function createEventFromStatusCode(int $statusCode, array $data, array $

return new SmsEvent($eventType, $data['id'], $payload);
}

private function createRemoteEvent(string $eventName, array $payload): RemoteEvent
{
return new RemoteEvent($eventName, $payload['id'], $payload);
}
}
Loading