weysan / alexa-request
用PHP处理亚马逊的Alexa请求
该软件包的官方仓库似乎已删除,因此该软件包已被冻结。
Requires
- psr/http-message: ^1.0
Requires (Dev)
- mockery/mockery: ^0.9.9
- phplint/phplint: ^0.0.1
- phpunit/phpunit: ^5.7
- satooshi/php-coveralls: dev-master
- symfony/http-foundation: ^3.2
- symfony/psr-http-message-bridge: ^1.0
- zendframework/zend-diactoros: ^1.5
This package is not auto-updated.
Last update: 2023-02-04 11:08:24 UTC
README
这是一个用于处理亚马逊Alexa应用程序的入站和出站请求的PHP小型库。
安装
composer require weysan/alexa-request
如何使用
该库现在兼容PSR-7。如果您使用HttpFoundation,您需要使用库 zendframework/zend-diactoros 将 Request 转换为 ServerRequestInterface 类。
请参阅以下文档: https://symfony.com.cn/blog/psr-7-support-in-symfony-is-here
首先,您必须创建一个实现 Weysan\Alexa\Intents\IntentsInterface 的 Intent 类。您需要创建一个返回 Weysan\Alexa\Response\Response 实例的方法 getResponseObject。您还需要创建一个返回 Weysan\Alexa\Response\SessionAttributes 实例的方法 getSessionAttributes。
例如
namespace My\App;
use Weysan\Alexa\Intents\IntentsInterface;
use Weysan\Alexa\Response\Response;
use Weysan\Alexa\Response\SessionAttributes;
class Joke implements IntentsInterface
{
/**
* @return Response
*/
public function getResponseObject()
{
$response = new Response();
$response->addOutput()
->setType(OutputSpeech::TYPE_PLAIN_TEXT)
->setOutput("Here we go! This is a super Joke...");
return $response;
}
/**
* @return SessionAttributes
*/
public function getSessionAttributes()
{
$sessionAttribute = new SessionAttributes();
$sessionAttribute->addAttribute("my_key", "my_value");
return $sessionAttribute;
}
}
注意:如果您的 Intent 需要访问到 Slots 参数或 sessionAttributes,只需在您的类中添加 trait Weysan\Alexa\Helper\AlexaIncomingRequestAwareTrait,您将能够访问到当前的 AlexaIncomingRequest 实例
然后,将您的 Intent 注册到 Weysan\Alexa\IntentRegistry
use Weysan\Alexa\IntentRegistry;
use My\App\Joke;
IntentRegistry::registerIntentHandler("GetJoke", new Joke());
警告:Intent 的名称(此处为 GetJoke)需要与您在亚马逊控制台中注册的名称相同。
使用 AlexaIncomingRequest 和 AlexaOutgoingGenerator 创建您的端点
$alexaIncoming = new AlexaIncomingRequest($request);
$alexaOutgoing = new AlexaOutgoingGenerator($alexaIncoming);
print json_encode($alexaOutgoing->getResponse());
验证请求
您可以使用 Weysan\Alexa\ValidateRequest 简单地验证来自 Alexa 的请求
use Weysan\Alexa\ValidateRequest;
$validator = new ValidateRequest("appIdFromAmazon");
if ($validator->validateRequest($alexaIncomingRequest)) {
//do what you want
}
验证器将检查 Alexa 是否请求一个现有的 Intent,以及您的本地 appId 是否与 Alexa 发送的相同。