winegard/winegard-alexa-php

用于亚马逊Echo(Alexa)技能开发的PHP库。

0.2.5 2023-08-24 14:06 UTC

README

Build Status Scrutinizer Code Quality Coverage Status MIT Licence contributions welcome

亚马逊Alexa PHP库

此库是用于亚马逊Echo(Alexa)技能的PHP助手。使用此库,在PHP应用程序中处理Alexa请求变得非常简单。您只需创建一些处理Alexa技能请求的处理程序并将它们添加到注册表中。

通过Composer安装

使用Composer要求此包

composer require winegard/winegard-alexa-php

用法

处理请求

  • 将请求数据映射到请求对象
  • 验证请求
  • 处理请求数据
  • 创建响应
  • 发送响应

将请求数据映射到请求对象

将所需的请求头和请求体映射到 Request

use Winegard\AmazonAlexa\Request\Request;
...
$requestBody  = file_get_contents('php://input');
$alexaRequest = Request::fromAmazonRequest($requestBody, $_SERVER['HTTP_SIGNATURECERTCHAINURL'], $_SERVER['HTTP_SIGNATURE']);

验证请求

RequestValidator 将处理亚马逊请求验证。

use Winegard\AmazonAlexa\Validation\RequestValidator;
...
$validator = new RequestValidator();
$validator->validate($alexaRequest);

注册请求处理程序

对于不同的请求,创建不同的RequestHandlers很有帮助。

use Winegard\AmazonAlexa\RequestHandler\RequestHandlerRegistry;
...
$requestHandlerRegistry = new RequestHandlerRegistry();
$requestHandlerRegistry->addHandler($myRequestHandler);

使用注册表处理请求

use Winegard\AmazonAlexa\RequestHandler\RequestHandlerRegistry;
...
$requestHandler = $requestHandlerRegistry->getSupportingHandler($alexaRequest);
$response       = $requestHandler->handleRequest($alexaRequest);

渲染响应

header('Content-Type: application/json');
echo json_encode($response);
exit();

创建新的请求处理程序

新请求处理程序必须扩展 AbstractRequestHandler。在构造函数中将 supportedApplicationIds 设置为您的技能ID。

public function __construct()
{
    $this->supportedApplicationIds = ['my_amazon_skill_id'];
}

然后实现抽象的 supportsRequest-方法。

public function supportsRequest(Request $request): bool
{
    return $request->request instanceOf Winegard\AmazonAlexa\Request\Request\Standard\IntentRequest &&
        'MyTestIntent' === $request->request->intent->name;
}

然后实现 handleRequest-方法。对于简单的响应,有一个 ResponseHelper

use Winegard\AmazonAlexa\Helper\ResponseHelper;
...
public function handleRequest(Request $request): Response
{
    return $this->responseHelper->respond('Success :)');
}

检查设备地址信息

要获取“完整地址”或“国家 & 邮政编码”,您需要用户API调用的权限。有关调用的更多信息,请参阅 device-address-api

$helper = new DeviceAddressInformationHelper();
$fullAddress = $helper->getAddress($request);
$countryAndPostalCode = $helper->getCountryAndPostalCode($request);

生成SSML

对于SSML输出,您可以使用 SsmlGenerator。使用此助手将生成有效的SSML,适用于Alexa。在 SsmlGenerator 中,所有Alexa已知的SSML标签都有一个函数。您可以将所有需要的SSML添加到生成器中,然后调用 getSsml 来获取完整的字符串。

$ssmlGenerator = new SsmlGenerator();
$ssmlGenerator->say('one');
$ssmlGenerator->pauseStrength(SsmlGenerator::BREAK_STRENGTH_MEDIUM);
$ssmlGenerator->say('two');
$ssml = $ssmlGenerator->getSsml();
// $ssml === '<speak>one <break strength="medium" /> two</speak>'

Symfony集成

maxbeckers/amazon-alexa-bundle 上还有一个symfony捆绑包。