我正在開發一個使用alexa-sdk
的定製技能,該定製技術是爲了用作Lambda函數而定製的。但是,我能夠在this discussion之後建立一個快速服務器,其中涉及嘲弄lambda上下文。帶有文本和json的Alexa測試模擬器
當我建立我的服務器,並使用Alexa開發控制檯中的服務模擬器測試技能。有兩種方法可以通過「文本」或「JSON」發送請求。
如果我使用「文本」選項卡,我所得到的只是一個錯誤,指出「遠程端點無法調用,或者它返回的響應無效」。但是,如果我將「服務器請求」(這是一個JSON對象)中的內容複製並在「JSON」選項卡下發送,則一切正常。
使用echosim和真正的生態設備測試產生「無法達到技能」的錯誤。我懷疑Alexa發送「文本」請求到我的服務器的方式與「JSON」不同,不管它是什麼......但是我找不到任何文檔。我檢查了我的服務器,在通過「文本」進行測試時甚至沒有收到請求。
以下是我使用express的服務器代碼。它是一個監聽8080端口的簡單服務器,但我使用ngrok將其轉發到https地址。
'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);