weysan/alexa-request

该软件包的最新版本(v0.1-RC4)没有可用的许可证信息。

用PHP处理亚马逊的Alexa请求

该软件包的官方仓库似乎已删除,因此该软件包已被冻结。

v0.1-RC4 2017-09-07 17:19 UTC

README

Build Status Coverage Status

这是一个用于处理亚马逊Alexa应用程序的入站和出站请求的PHP小型库。

安装

composer require weysan/alexa-request

如何使用

该库现在兼容PSR-7。如果您使用HttpFoundation,您需要使用库 zendframework/zend-diactorosRequest 转换为 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)需要与您在亚马逊控制台中注册的名称相同。

使用 AlexaIncomingRequestAlexaOutgoingGenerator 创建您的端点

$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 发送的相同。