winegard / winegard-alexa-php
用于亚马逊Echo(Alexa)技能开发的PHP库。
0.2.5
2023-08-24 14:06 UTC
Requires
- php: >=7.0
- guzzlehttp/guzzle: >=6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: >=2.8
- phpunit/phpunit: >=6.0
This package is not auto-updated.
Last update: 2024-09-19 19:27:40 UTC
README
亚马逊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捆绑包。