Alexa测试模拟器与文本vs json

时间:2017-05-05 23:23:08

标签: node.js alexa alexa-skills-kit alexa-skill

我正在使用alexa-sdk开发自定义技能,该技能适合用作Lambda函数。但是,我能够在this discussion之后设置一个快速服务器,它涉及模拟lambda上下文。

当我设置我的服务器并使用Alexa开发控制台中的服务模拟器测试技能时。有两种方式可以通过" Text"发送请求。或" JSON"。

如果我使用"文字"选项卡,我得到的只是一个错误,说"无法调用远程端点,或者它返回的响应无效"。但是,如果我复制"服务器请求" (这是一个JSON对象)并在" JSON"下发送它。选项卡,一切正常。

使用echosim和真实的生态设备进行测试,结果"无法达到技能"错误。我怀疑Alexa发送" Text"对我的服务器的请求与" JSON"不同,不管它是什么......但我找不到任何文档。我检查了我的服务器,在通过" Text"进行测试时,它甚至没有收到请求。

下面是我使用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);

2 个答案:

答案 0 :(得分:2)

好吧,我通过摆弄SSL配置解决了这个问题...我检查了单选按钮说" 我的开发端点有来自可靠证书颁发机构的证书"我应该检查的地方" 我的开发端点是域的子域,该域具有来自证书颁发机构的通配符证书"。

尽管如此,在文本失败时,为什么使用JSON进行测试仍然困扰我。

答案 1 :(得分:1)

如果您想在没有额外快递代码的情况下使用AWS Lambdas,您还可以使用我们的bst代理工具:
this

它类似于ngrok,因为它使您的本地机器可以访问Alexa服务。它具有额外的好处,但您可以使用它直接使用Lambdas。所以你可以说

bst proxy lambda index.js

它将创建一个可用于测试技能的端点。