跳到內容

Webhook

編輯此頁

Webhook 組件用於回應遠端 webhook,以觸發應用程式中的動作。本文檔重點介紹如何使用 webhook 來監聽其他 Symfony 組件中的遠端事件。

安裝

1
$ composer require symfony/webhook

與 Mailer 組件結合使用

當使用第三方郵件服務提供商時,您可以使用 Webhook 組件接收來自此提供商的 webhook 呼叫。

目前,以下第三方郵件服務提供商支援 webhook

郵件服務 解析器服務名稱
Brevo mailer.webhook.request_parser.brevo
Mandrill mailer.webhook.request_parser.mailchimp
MailerSend mailer.webhook.request_parser.mailersend
Mailgun mailer.webhook.request_parser.mailgun
Mailjet mailer.webhook.request_parser.mailjet
Mailomat mailer.webhook.request_parser.mailomat
Mailtrap mailer.webhook.request_parser.mailtrap
Postmark mailer.webhook.request_parser.postmark
Resend mailer.webhook.request_parser.resend
Sendgrid mailer.webhook.request_parser.sendgrid
Sweego mailer.webhook.request_parser.sweego

7.1

ResendMailerSend 的支援是在 Symfony 7.1 中引入的。

7.2

MandrillMailomatMailtrapSweego 整合是在 Symfony 7.2 中引入的。

注意

安裝您想要使用的第三方郵件服務提供商,如 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 作為 webhook 路由名稱。路由名稱必須是唯一的,因為這是將提供商與您的 webhook 消費者程式碼連接起來的名稱。

webhook 路由名稱是您需要在第三方郵件服務提供商處配置的 URL 的一部分。URL 是您的網域名稱和您在配置中選擇的路由名稱的串連(例如 https://example.com/webhook/mailer_mailgun)。

對於 Mailgun,您將獲得 webhook 的密鑰。將此密鑰儲存為 MAILER_MAILGUN_SECRET(在密鑰管理系統中或在 .env 檔案中)。

完成後,新增一個 RemoteEvent 消費者,以對傳入的 webhook 做出反應(webhook 路由名稱是將您的類別連接到提供商的名稱)。

對於郵件程式 webhook,請對 MailerDeliveryEventMailerEngagementEvent 事件做出反應

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 {
            // This is not an email event
            return;
        }
    }

    private function handleMailDelivery(MailerDeliveryEvent $event): void
    {
        // Handle the mail delivery event
    }

    private function handleMailEngagement(MailerEngagementEvent $event): void
    {
        // Handle the mail engagement event
    }
}

與 Notifier 組件結合使用

當在 Notifier 中使用第三方傳輸時,Webhook 組件的使用方式與 Mailer 的使用方式非常相似。

目前,以下第三方 SMS 傳輸支援 webhook

SMS 服務 解析器服務名稱
Twilio notifier.webhook.request_parser.twilio
Sweego notifier.webhook.request_parser.sweego
Vonage notifier.webhook.request_parser.vonage

對於 SMS webhook,請對 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 {
            // This is not an SMS event
            return;
        }
    }

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

建立自訂 Webhook

提示

MakerBundle v1.58.0 開始,您可以執行 php bin/console make:webhook 來產生建立您自己的 Webhook 所需的請求解析器和消費者檔案。

本作品(包括程式碼範例)已根據 Creative Commons BY-SA 3.0 授權條款授權。
目錄
    版本