从 Amazon Alexa 技能包发送 HTTP 发布请求

Posted

技术标签:

【中文标题】从 Amazon Alexa 技能包发送 HTTP 发布请求【英文标题】:Send HTTP post request from Amazon Alexa skills kit 【发布时间】:2016-03-19 11:24:35 【问题描述】:

我是 Web 服务器的初学者,正在尝试从 Amazon Echo 执行一些 php 脚本。

基本上我有一个 apache Web 服务器正在运行(可通过端口 443 从 Internet 访问)。我的网络服务器中还有一个 PHP 脚本https://web-server.mine/script.php

我已通过基本的网络身份验证从网络浏览器成功运行 PHP 脚本。

现在我正在尝试从 Amazon Alexa 技能包发出 POST 请求,但我不知道如何传递凭据,以便它可以调用 URL。

【问题讨论】:

【参考方案1】:

我不完全清楚你在问什么,所以我会尝试回答我的所有解释。

    如果您尝试确保是 Alexa Skill 尝试访问您的 URL,我发现通过检查 POST 数据中的 applicationId 来进行身份验证的最简单方法:

    // Get raw POST data
    $post = file_get_contents( 'php://input' );
    
    // Decode the JSON into a stdClass object
    $post = json_decode( $post );
    
    // Check the applicationId to make sure it's your Alexa Skill
    if ( 'amzn1.echo-sdk-ams.app.[your-unique-value-here]' == $post->session->application->applicationId ) 
        // Insert code to run if the applicationId matches
        echo 'The applicationId matches!';
     else 
        // Insert code to run if the applicationId does NOT match
        echo 'The applicationId does NOT match!';
    
    

    如果走这条路,您需要确保创建一个有效的 SSL 证书,如下所述:Create a Private Key and Self-Signed Certificate for Testing

    如果您尝试从脚本中向另一个 URL 发出 POST 请求,请尝试使用file_get_contents(),如下所述:How to post data in PHP using file_get_contents?

附带说明一下,使用一组 PHP 类可能值得研究,这些类已开发用于更轻松地创建 Alexa Skills,例如:https://github.com/develpr/alexa-app

我个人在 Raspberry Pi 上运行 Node.js,并使用 Node 包 alexa-app-serveralexa-app 来更轻松地创建和托管多种技能。如果您对此感兴趣,只需谷歌“nodejs alexa-app-server”即可获得这些软件包的最新链接。

【讨论】:

我实际上找到了一个开源 PHP 代码,它可以处理我的 Web 服务器上的话语,它也使用了与您提到的类似的验证方法。我其实也对nodejs感兴趣,谢谢 顺便说一句,您如何使用 nodejs 在 apache Web 服务器上创建 API 端点? @Casper 如果你想用一个脚本处理多个“好看”的端点,使用 $_SERVER['REQUEST_URI'] 相对简单:echo "Requested API endpoint: " . htmlspecialchars( $_SERVER['REQUEST_URI'] ); 将此保存为类似“alexa .php”然后访问web-server.mine/alexa.php/my-skill-1和web-server.mine/alexa.php/my-skill-2 我喜欢 Node.js。有很多可用的软件包,而且它们安装起来非常快速和容易! Node.js 几乎可以在任何平台上轻松安装,并且可以用 javascript 编写脚本。无论您是否将其用于您的技能,这绝对值得一试!关于 Node.js 的更多信息可以在 nodejs.org/en 找到@ 我不制作应用程序来销售,只是为了我的家庭自动化。但我实际上试图创建一个 nodejs 服务器,这很容易,但我实际上还有其他东西在 apache 上运行 SSL 等等,所以我决定暂时继续使用 PHP 和 apache,因为它可以满足我的需要,不过谢谢。

以上是关于从 Amazon Alexa 技能包发送 HTTP 发布请求的主要内容,如果未能解决你的问题,请参考以下文章

Alexa 技能未在 Amazon Alexa 应用程序中调用,但可在开发控制台中使用

Amazon Alexa:代码是不是可用于内置技能?

Amazon Alexa、alexa-app 和中间件

如何使用 Amazon Alexa 访问本地 API

Alexa Skills Kit 示例技能不会上传到 Amazon Lambda - 引发错误

ios 应用程序中的 Amazon Alexa 自定义技能问题