ankurk91 / laravel-vonage-inbound-sms
在 Laravel php 框架中处理 Vonage 入站 SMS webhooks
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.2
- illuminate/http: ^10.0 || ^11.0
- illuminate/support: ^10.0 || ^11.0
- spatie/laravel-webhook-client: ^3.1.7
- vonage/client-core: ^4.1
Requires (Dev)
- orchestra/testbench: ^8.0 || ^9.0
- phpunit/phpunit: ^9.5 || ^10.0
README
在 Laravel php 框架中处理 Vonage 入站 SMS webhooks。
安装
您可以通过 composer 安装此包
composer require "ankurk91/laravel-vonage-inbound-sms"
服务提供者将自动注册自身。
您必须使用以下命令发布配置文件
php artisan vendor:publish --provider="Ankurk91\Vonage\SMS\Inbound\VonageWebhooksServiceProvider"
接下来,您必须使用以下命令发布迁移
php artisan vendor:publish --provider="Spatie\WebhookClient\WebhookClientServiceProvider" --tag="webhook-client-migrations"
迁移发布后,您可以通过运行迁移来创建 webhook_calls
表
php artisan migrate
接下来,为了路由,将此路由(访客)添加到您的 routes/web.php
Route::vonageInboundSMS('webhooks/vonage/sms/inbound');
幕后,这将注册一个由该包提供的控制器的一个 POST
路由。接下来,您必须将此路由添加到您的 VerifyCsrfToken
中间件的 except
数组中
protected $except = [ '/webhooks/*', ];
建议设置一个队列工作者来预先处理传入的 webhooks。
设置 Vonage 账户
- 登录到 Vonage 开发者 仪表板
- 在“入站 SMS webhooks”下输入您的 webhook URL。
- 💡 您可以使用 ngrok 进行本地开发
- 复制“签名密钥”并在您的
.env
文件中指定,如下所示
VONAGE_WEBHOOK_SECRET=secret-key-here
- 选择
HASH_MD5
作为您的签名方法 - 选择
POST_JSON
作为您的 webhook 格式
注意 您可能需要联系 Vonage 支持以使消息签名在您的账户上生效。
故障排除
在开发期间使用 ngrok 时,您必须更新您的 APP_URL
以匹配 ngrok 隐藏 URL,例如
APP_URL=https://af59-111-93-41-42.ngrok-free.app
您必须通过在终端访问该 URL 来验证您的 webhook URL 是否公开可访问
curl -X POST https://af59-111-93-41-42.ngrok-free.app/webhooks/vonage/sms/inbound
使用方法
有 2 种方式通过此包处理传入的 webhooks。
1 - 使用作业处理 webhook 请求
如果您想在一个特定事件类型到来时执行某些操作;您可以为此事件定义一个作业。以下是一个此类作业的示例
<?php namespace App\Jobs\Webhook\Vonage\SMS\Inbound; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\SerializesModels; use Spatie\WebhookClient\Models\WebhookCall; class TextSMSJob implements ShouldQueue { use InteractsWithQueue, Queueable, SerializesModels; public function __construct(protected WebhookCall $webhookCall) { // } public function handle() { $message = new \Vonage\SMS\Webhook\InboundSMS($this->webhookCall->payload); // todo do something with $message } }
创建您的作业后,您必须在 config/vonage-inbound-sms.php
配置文件中的 jobs
数组中注册它。键必须是小写,点必须替换为 _
。值必须是完全限定的类名。
<?php return [ 'jobs' => [ 'text' => \App\Jobs\Webhook\Vonage\SMS\Inbound\TextSMSJob::class, ], ];
2 - 使用事件和监听器处理 webhook 请求
而不是将作业排队以在 webhook 请求到来时执行某些工作,您可以选择监听该包将引发的事件。每当匹配的请求击中您的应用程序时,该包将引发一个 vonage-inbound-sms::<event-name>
事件。
事件的负载将是为传入请求创建的 WebhookCall
实例。
您可以通过在 EventServiceProvider
类中注册监听器来监听此类事件。
protected $listen = [ 'vonage-inbound-sms::unicode' => [ \App\Listeners\Vonage\SMS\Inbound\UnicodeSMSListener::class, ], ];
以下是一个此类监听器类的示例
<?php namespace App\Listeners\Vonage\SMS\Inbound; use Illuminate\Contracts\Queue\ShouldQueue; use Spatie\WebhookClient\Models\WebhookCall; class UnicodeSMSListener implements ShouldQueue { public function handle(WebhookCall $webhookCall) { $message = $webhookCall->payload; // todo do something with $message } }
修剪旧 webhooks(可选但推荐)
更新您的 app/Console/Kernel.php
文件,如下所示
use Illuminate\Database\Console\PruneCommand; use Spatie\WebhookClient\Models\WebhookCall; $schedule->command(PruneCommand::class, [ '--model' => [WebhookCall::class] ]) ->onOneServer() ->daily() ->description('Prune webhook_calls.');
这将删除超过 30
天的记录,您可以通过发布此配置文件来修改此持续时间。
php artisan vendor:publish --provider="Spatie\WebhookClient\WebhookClientServiceProvider" --tag="webhook-client-config"
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
测试
composer test
安全
如果您发现任何安全问题,请通过电子邮件 pro.ankurk1[at]gmail[dot]com
而不是使用问题跟踪器进行报告。
有用链接
确认
本软件包深受以下启发
许可证
本软件包采用 MIT 许可证 许可。