maxbeckers/amazon-alexa-php

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


README

Build Status Scrutinizer Code Quality Coverage Status MIT Licence contributions welcome

亚马逊alexa PHP库

这个库是亚马逊Echo (alexa) 技能的PHP辅助工具。使用这个库,在PHP应用中处理alexa请求非常简单。你只需为你的alexa技能请求创建一些处理器并将它们添加到注册表中。

通过Composer安装

使用Composer要求这个包

composer require maxbeckers/amazon-alexa-php

使用方法

处理请求

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

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

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

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

验证请求

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

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

注册请求处理器

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

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

使用注册表处理请求

use MaxBeckers\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 MaxBeckers\AmazonAlexa\Request\Request\Standard\IntentRequest &&
        'MyTestIntent' === $request->request->intent->name;
}

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

use MaxBeckers\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包。