Я разрабатываю специальный навык с использованием 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);