ankurk91/laravel-vonage-inbound-sms

在 Laravel php 框架中处理 Vonage 入站 SMS webhooks

1.2.0 2024-03-07 15:16 UTC

This package is auto-updated.

Last update: 2024-09-07 16:34:07 UTC


README

Packagist GitHub-tag License Downloads GH-Actions codecov

在 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 许可证 许可。