从 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-server
和 alexa-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 应用程序中调用,但可在开发控制台中使用