kitbrennan90/laravel-sendgrid-webhooks

Laravel 扩展包,用于接收和存储 Sendgrid 的事件 Webhook

1.1.1 2019-05-23 10:56 UTC

This package is auto-updated.

Last update: 2024-09-27 00:30:42 UTC


README

此扩展包使您的 Laravel 应用程序能够接收来自 Sendgrid 的事件 Webhook,并将自动将 Webhook 存储在您的数据库中。该扩展包还会触发 Laravel 事件,以便您可以挂钩到 Webhook 并采取自己的操作。

安装

获取包

使用 composer 安装此包是最佳方式。在命令行中运行以下命令

composer require kitbrennan90/laravel-sendgrid-webhooks ~1.0

运行迁移

此扩展包将创建一个名为 sendgrid_webhook_events 的表,用于存储所有接收到的 Sendgrid Webhook。

一旦包含该扩展包,此迁移将与您的正常迁移一起自动运行,因此只需调用

php artisan migrate

复制配置文件(可选)

此库无需本地配置即可运行,但是您可能希望使用配置文件来调整接收到的日志(例如,在接收到重复事件时接收日志)。

运行以下命令以复制扩展包配置文件

php artisan vendor:publish --provider="LaravelSendgridWebhooks\ServiceProvider"

让 Sendgrid 使用您的新事件 Webhook URL

前往 https://app.sendgrid.com/settings/mail_settings 并点击“事件通知”部分。

您的 HTTP Post URL 是: https://yourwebsite.com/sendgrid/webhook

使用库

查询记录

此库使用标准的 Laravel Eloquent 模型,因此您可以像查询其他任何模型一样查询它。

// Include the class
use \LaravelSendgridWebhooks\Models\SendgridWebhookEvent;

////////////////////

// Get all records:
SendgridWebhookEvent::all();

// Get all by message ID:
$sendgridMessageId = 'abc123';
SendgridWebhookEvent::where('sg_message_id', $sendgridMessageId)->all();

// Get all by event ID:
$sendgridEventId = 'xyz987';
SendgridWebhookEvent::where('sg_event_id', $sendgridEventId)->all();

// Get all by event type
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::PROCESSED)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::DEFERRED)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::DELIVERED)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::OPEN)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::CLICK)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::BOUNCE)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::DROPPED)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::SPAMREPORT)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::UNSUBSCRIBE)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::GROUP_UNSUBSCRIBE)->all();
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::GROUP_RESUBSCRIBE)->all();

// Count all bounces
SendgridWebhookEvent::where('event', LaravelSendgridWebhooks\Enums::BOUNCE)->count();

与记录交互

访问所有事件类型包含的数据

// Get a record
$event = SendgridWebhookEvent::first();

// Included with all event types
$event->timestamp;
$event->email;
$event->event;
$event->categories;
$event->sg_event_id;
$event->sg_message_id;
$event->payload; // Array of full payload sent by Sendgrid

某些数据仅包含在特定事件中。您可以在以下位置找到这些属性的详细信息:https://sendgrid.com/docs/API_Reference/Event_Webhook/event.html#-Event-objects

我们将此数据包含在记录的 payload 数组中。例如

// Get a record
$event = SendgridWebhookEvent::first();

// Access the reason attribute, included on 'dropped' and 'bounced' events.
$event->payload['reason'];