发送来自亚马逊Alexa技能工具包的HTTP帖子请求


Send HTTP post request from Amazon Alexa skills kit

我是web服务器的初学者,正在尝试执行AmazonEcho中的一些PHP脚本。

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

我已经通过基本的web身份验证成功地从web浏览器运行了PHP脚本。

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

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

  1. 如果你试图确保是Alexa Skill试图访问你的URL,我发现的最简单的验证方法是从POST数据中检查应用程序ID:

    // 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证书,如下所述:创建一个私钥和自签名证书来测试

  2. 如果您试图从脚本中向另一个URL发出POST请求,请尝试使用file_get_contents(),如下所述:如何使用file_get_contents在PHP中发布数据?

顺便说一句,使用一组PHP类可能值得一试,这些类是为了让Alexa Skills的创建变得更容易而开发的,比如下面这样一个:https://github.com/develpr/alexa-app

我个人在Raspberry Pi上运行Node.js,我使用Node包alexa-app-serveralexa-app来简化多种技能的创建和托管。如果你对此感兴趣,只需在谷歌"nodejs alexa应用服务器"上搜索这些包的最新链接。