Отправка почтового HTTP-запроса из набора навыков Amazon Alexa

Я новичок в веб-сервере и пытаюсь выполнить PHP-скрипт из Amazon Echo.

В основном у меня работает веб-сервер apache (доступный из Интернета через порт 443). У меня также есть PHP-скрипт на моем веб-сервере https://web-server.mine/script.php

Я успешно запустил PHP-скрипт из веб-браузера с базовой веб-аутентификацией.

Теперь я пытаюсь сделать запрос POST из набора навыков Amazon Alexa, но я не знаю, как передать учетные данные, чтобы он мог позвонить по URL-адресу.


person Casper    schedule 14.12.2015    source источник


Ответы (1)


Мне не совсем понятно, о чем вы спрашиваете, поэтому я постараюсь ответить на все свои интерпретации.

  1. Если вы пытаетесь убедиться, что именно Alexa Skill пытается получить доступ к вашему URL-адресу, самый простой способ, который я нашел для аутентификации, - это проверка applicationId из данных POST:

    // 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. Если вы пытаетесь сделать запрос POST на другой URL-адрес из своего скрипта, попробуйте использовать file_get_contents(), как описано здесь: Как публиковать данные в PHP с помощью file_get_contents?

Кстати, возможно, стоит изучить набор классов PHP, которые были разработаны для упрощения создания Alexa Skills, например этот: https://github.com/develpr/alexa-app

Я лично запускаю Node.js на Raspberry Pi и использую пакеты Node alexa-app-server и alexa-app, чтобы упростить создание и размещение нескольких навыков. Если вас это интересует, просто погуглите «nodejs alexa-app-server», чтобы найти последние ссылки на эти пакеты.

person dale3h    schedule 16.12.2015
comment
На самом деле я нашел PHP-код с открытым исходным кодом, который может обрабатывать высказывания на моем веб-сервере, а также использует методы проверки, аналогичные тем, которые вы упомянули. Я действительно заинтересован в nodejs, спасибо - person Casper; 16.12.2015
comment
Кстати, как вы создаете конечную точку API на веб-сервере apache с помощью nodejs? - person Casper; 16.12.2015
comment
@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 - person dale3h; 18.12.2015
comment
Я люблю Node.js. Доступно множество пакетов, и их очень легко и быстро установить! Node.js легко установить практически на любой платформе, а сценарии можно писать на JavaScript. Это определенно стоит проверить, независимо от того, используете ли вы его для своего навыка или нет! Дополнительную информацию о Node.js можно найти по адресу nodejs.org/en. server просто написать: http://blog.modulus.io/build-your-first-http-server-in-nodejs Однако, если вы решите использовать Node.js для своих навыков, я настоятельно рекомендую alexa-app-server - person dale3h; 18.12.2015
comment
Я делаю приложение не для продажи, а только для домашней автоматизации. Но я на самом деле пытался создать сервер nodejs, это было легко, но на самом деле у меня есть другие вещи, работающие на apache с SSL и еще много чего, поэтому я решил продолжать использовать PHP с apache на данный момент, поскольку он делает то, что мне нужно, спасибо. - person Casper; 18.12.2015