Симулятор тестирования Alexa с текстом против json

Я разрабатываю специальный навык с использованием alexa-sdk, который предназначен для использования в качестве лямбда-функции. Однако мне удалось настроить экспресс-сервер после это обсуждение, которое включает имитацию контекста лямбда.

Когда я настраивал свой сервер и тестировал навыки с помощью Service Simulator в консоли разработчика Alexa. Есть два способа отправить запрос: "Текст" или "JSON".

Если я использую вкладку «Текст», все, что я получаю, это просто сообщение об ошибке: «Удаленная конечная точка не может быть вызвана, или ответ, который она вернул, недействителен». Однако, если я скопирую содержимое в «Серверный запрос» (который является объектом JSON) и отправлю его на вкладке «JSON», все будет работать нормально.

Тестирование с использованием echosim и реального эко-устройства показало ошибку «не удалось достичь навыка». Я подозреваю, что способ, которым Alexa отправляет запросы "Text" на мой сервер, отличается от "JSON", каким бы он ни был ... Но я не смог найти никакой документации. Я проверил свой сервер, и он даже не получил запроса при тестировании через «Текст».

Ниже приведен код моего сервера, использующий экспресс. Это простой сервер, который прослушивает порт 8080, но я перенаправляю его на https-адрес, используя ngrok.

'use strict'

const express = require('express')
const bodyParser = require('body-parser')
const context = require('aws-lambda-mock-context')

const alexaLambda = require('./alexaLambda') // where the alexa handler is

const app = express()

app.use(bodyParser.json({ type: 'application/json' }))

app.get('/', (req, res) => {
    console.log('received get')
    resp => res.status(200)
})

app.post('/alexa', (req, res) => {
    var ctx = context()
    console.log('received post: ', req.body)

    alexaLambda.handler(req.body, ctx)

    ctx.Promise
        .then(resp => res.status(200).json(resp))
        .catch(err => console.log(err))
})

app.listen(8080);

person Xavier_Ex    schedule 05.05.2017    source источник


Ответы (2)


Что ж, я решил проблему, повозившись с конфигурацией SSL ... Я поставил переключатель в положение "Моя конечная точка разработки имеет сертификат от доверенного центра сертификации", где я должен был проверить " Моя конечная точка разработки является субдоменом домена, имеющего групповой сертификат от центра сертификации ".

Тем не менее, меня беспокоит, почему тестирование с JSON работает, а Text не работает.

person Xavier_Ex    schedule 05.05.2017

Если вы хотите работать с AWS Lambdas без дополнительного экспресс-кода, вы также можете использовать наш инструмент прокси-сервера bst:
https://bespoken.tools/blog/2016/08/24/introduction-bst-proxy-for-alexa-skill-development

Он похож на ngrok в том, что делает ваш локальный компьютер доступным для службы Alexa. Однако у него есть дополнительное преимущество: вы можете напрямую работать с Lambdas, используя его. Так что ты можешь просто сказать

bst proxy lambda index.js

И это создаст конечную точку, которую вы можете использовать в своих навыках для тестирования.

person John Kelvie    schedule 06.05.2017