Webhook
Дата оновлення перекладу 2024-06-11
Webhook
Компонент Webhook використовується для реагування на віддалені веб-хуки для запуску дій у вашому додатку. У цьому документі зосереджено увагу на використанні веб-хуків для прослуховування віддалених подій в інших компонентах Symfony.
Установка
1
$ composer require symfony/webhook
Використання у поєднанні з компонентом Mailer
Якщо ви використовуєте стороннього постачальника поштових послуг, ви можете використовувати компонент Webhook, щоб отримувати виклики веб-хуків від цього постачальника.
Наразі веб-хуки підтримують наступні сторонні поштові постачальники:
?????? Mailer | ??'? ??????? ??????? |
---|---|
Brevo | mailer.webhook.request_parser.brevo |
MailerSend | mailer.webhook.request_parser.mailersend |
Mailgun | mailer.webhook.request_parser.mailgun |
Mailjet | mailer.webhook.request_parser.mailjet |
Postmark | mailer.webhook.request_parser.postmark |
Resend | mailer.webhook.request_parser.resend |
Sendgrid | mailer.webhook.request_parser.sendgrid |
7.1
Підтримка для Resend
та MailerSend
була представлена в Symfony 7.1.
Note
Встановіть стороннього поштового постачальника, який ви бажаєте використовувати, як описано у документації компонента Mailer . У цьому документі в якості постачальника для прикладу використовується Mailgun.
Щоб підключити постачальника до вашого додатку, вам потрібно налаштувати маршрутизацію компонента Webhook:
1 2 3 4 5 6 7
# config/packages/framework.yaml
framework:
webhook:
routing:
mailer_mailgun:
service: 'mailer.webhook.request_parser.mailgun'
secret: '%env(MAILER_MAILGUN_SECRET)%'
У цьому прикладі ми використовуємо mailer_mailgun
як ім'я маршрутизації веб-хука.
Ім'я маршруту має бути унікальним, оскільки саме воно з'єднує постачальника з вашим
з кодом споживача веб-хука.
Ім'я маршрутизації веб-хука є частиною URL-адреси, яку потрібно сконфігурувати у
сторонньому поштовому постачальнику. URL-адреса - це конкатенація вашого доменного імені
та імені маршрутизації, яке ви вибрали в конфігурації (наприклад
https://example.com/webhook/mailer_mailgun
).
Для Mailgun ви отримаєте секрет для веб-хука. Збережіть цей секрет як
MAILER_MAILGUN_SECRET (у системі управління секретами або у файлі .env
).
Після цього додайте споживача RemoteEvent`, щоб реагувати на вхідні веб-хуки (ім'я маршрутизації вебхука - це те, що з'єднує ваш клас з постачальником).
Для веб-хуків поштового сервісу, реагуйте на події
MailerDeliveryEvent або
:class:`Symfony\Component\RemoteEvent\Event\Mailer\MailerEngagementEvent':
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use Symfony\Component\RemoteEvent\Attribute\AsRemoteEventConsumer;
use Symfony\Component\RemoteEvent\Consumer\ConsumerInterface;
use Symfony\Component\RemoteEvent\Event\Mailer\MailerDeliveryEvent;
use Symfony\Component\RemoteEvent\Event\Mailer\MailerEngagementEvent;
use Symfony\Component\RemoteEvent\RemoteEvent;
#[AsRemoteEventConsumer('mailer_mailgun')]
class WebhookListener implements ConsumerInterface
{
public function consume(RemoteEvent $event): void
{
if ($event instanceof MailerDeliveryEvent) {
$this->handleMailDelivery($event);
} elseif ($event instanceof MailerEngagementEvent) {
$this->handleMailEngagement($event);
} else {
// Це не є подією пошти
return;
}
}
private function handleMailDelivery(MailerDeliveryEvent $event): void
{
// Обробити подію доставки пошти
}
private function handleMailEngagement(MailerEngagementEvent $event): void
{
// Обробити подію залучення пошти
}
}
Використання у поєднанні з компонентом Notifier
Принцип роботи компонента Webhook при використанні стороннього транспорту в Notifier дуже схоже на використання з Mailer.
Наразі наступні сторонні SMS-транспорти підтримують веб-хуки:
SMS-?????? | ??'? ??????? ??????? |
---|---|
Twilio | notifier.webhook.request_parser.twilio |
Vonage | notifier.webhook.request_parser.vonage |
Для веб-хуків SMS, реагуйте на подію SmsEvent:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
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_twilio')]
class WebhookListener implements ConsumerInterface
{
public function consume(RemoteEvent $event): void
{
if ($event instanceof SmsEvent) {
$this->handleSmsEvent($event);
} else {
// Це не є подією SMS
return;
}
}
private function handleSmsEvent(SmsEvent $event): void
{
// Обробити подію SMS
}
}