vonage / vonage_drupal
用于配置 Vonage PHP SDK 的 Drupal 模块
Requires
- vonage/client: ^2.3
README
这是用于 Drupal CMS 的 Vonage API PHP 客户端模块。要使用此模块,您需要一个 Vonage 账户。在 nexmo.com 上免费注册。
此捆绑包目前处于开发/测试状态,因此可能存在错误
安装
步骤 1:将模块添加到 composer.json
打开命令行控制台,进入您的项目目录并执行以下命令以下载此模块的最新稳定版本
$ composer require vonage/vonage_drupal
步骤 2:安装模块
该模块将自动被 Drupal 检测,并且可以通过登录具有启用模块权限的用户来启用。转到“扩展”页面,搜索“Vonage”,或者滚动到“通信”部分。勾选“Vonage API SDK”旁边的复选框,然后单击“安装”按钮。
步骤 3:配置
您可以通过转到“配置”页面并在“系统”部分下点击“Vonage API 设置”来使用您的应用程序详细信息配置该捆绑包。
然后,您可以从 [Vonage 控制台][dashboard] 中填写所需的凭证。该模块允许您输入您的 Vonage API 密钥和密钥,如果您使用基于应用程序的 API,例如语音 API,还可以输入应用程序 ID 以及用于的私钥。
输入任一凭证集后,您可以使用“Vonage SMS API 测试”或“Vonage Voice API 测试”选项卡测试基本功能。这些选项卡允许您发送测试 SMS 和测试语音通话。
输入凭证后,您可以使用我们 PHP SDK 中的任何 API。
使用
调用 Vonage API
此捆绑包负责创建创建 Vonage 客户端所需的所有客户端,并将其添加到服务容器中。您可以从服务容器中获取该类,或者在其他服务声明中使用它作为服务。
namespace Drupal\my_module\Controller; use Vonage\Client; use Vonage\SMS\Message\SMS; use Drupal\Core\Controller\ControllerBase; use Symfony\Component\DependencyInjection\ContainerInterface; class MyController extends ControllerBase { /** * @var Client */ protected $client; public function __construct($client) { $this->client = $client; } public static function create(ContainerInterface $container) { return new static($container->get(Client::class)); } public function controllerAction(): array { $this->client->sms()->send( new SMS($to, from, $message) ); $build = [ '#markup' => 'Hello World!', ]; return $build; } }
处理入站 Webhook
许多 Vonage API,特别是 SMS 和语音 API,通过 Webhook 的概念与您的应用程序协同工作。这是 Vonage API 服务器请求您的应用程序,而不是您的应用程序请求 Vonage 。
Vonage API 提供了一种解释入站 Web 请求的方法,并将生成相应的对象。您需要知道哪种类型的请求(SMS 或语音)将发送到特定的路由。
入站 SMS 消息
当您选择让一个号码接收 SMS 时,Vonage 将要求提供发送信息的 URL。您可以在模块中创建一个控制器,其中包含可以接受入站请求的路由,并使用 \Vonage\SMS\Webhook\Factory
将该请求转换为对象。
namespace Drupal\my_module\Controller; use Vonage\SMS\Webhook\Factory; use Vonage\SMS\Webhook\InboundSMS; use Drupal\Core\Controller\ControllerBase; class MyController extends ControllerBase { public function incomingSMS(): array { /** @var InboundSMS $inboundSMS */ $inboundSMS = Factory::createFromGlobals(); $to = $inboundSMS->getTo(); $from = $inboundSMS->getFrom(); $text = $inboundSMS->getText(); // ... } }
入站语音通话
如果您正在构建交互式语音应用程序,您可以在 Vonage 控制台的应用程序设置中设置一个 Answer Webhook。您可以在模块中创建一个控制器,其中包含可以接受入站通话的路由,并使用 \Vonage\Voice\Webhook\Factory
将该请求转换为对象。
namespace Drupal\my_module\Controller; use Vonage\Voice\Webhook\Factory; use Vonage\Voice\Webhook\Answer; use Drupal\Core\Controller\ControllerBase; class MyController extends ControllerBase { public function answerCall(): array { /** @var Answer $inboundCall */ $inboundCall = Factory::createFromGlobals(); $to = $inboundCall->getTo(); $from = $inboundCall->getFrom(); $uuid = $inboundCall->getUuid(); // ... } }
入站语音事件
除了能够接听电话外,语音API主要依赖于事件驱动。你可以在Vonage仪表板的应用设置中设置事件Webhook,除了接听Webhook之外。你可以在你的模块中创建一个控制器,其中包含一个可以接受事件的路由,并使用\Vonage\Voice\Webhook\Factory
将那个请求转换为对象。
在处理对象时,你需要检查生成的对象类型,因为有许多不同的事件类型,它们都有自己的对象结构。
你可以在https://github.com/Vonage/vonage-php-sdk-core/tree/master/src/Voice/Webhook查看所有可用的事件类型。
namespace Drupal\my_module\Controller; use Vonage\Voice\Webhook\Factory; use Vonage\Voice\Webhook\Answer; use Vonage\Voice\Webhook\Event; use Drupal\Core\Controller\ControllerBase; class MyController extends ControllerBase { public function voiceEventHandler(): array { $event = Factory::createFromGlobals(); if ($event instanceof Event) { // ... } elseif ($event instanceof Notification) { // ... } // ... } }
贡献
这个库正在积极开发中,我们很高兴听取您的反馈!请随时创建一个问题或提交一个pull request,包括您的问题、评论、建议和反馈。