2017-05-05 35 views
0

我正在開發一個使用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); 

回答

1

好了,我用的SSL配置擺弄解決了這個問題。我檢查了單選按鈕,說:「我發展端點有來自受信任的證書頒發機構證書」,我應該已經選中「 我的開發端點是具有來自證書頒發機構的通配符證書的域的子域「。

不過,它讓我困惑,爲什麼在文本失敗的時候使用JSON進行測試。

1

如果你想沒有額外的快遞代碼AWS lambda表達式的工作,你也可以使用我們的BST代理工具:
https://bespoken.tools/blog/2016/08/24/introducing-bst-proxy-for-alexa-skill-development

它類似於ngrok的,它使你的本地機器訪問到Alexa的服務。它還有額外的好處,儘管你可以直接與使用它的Lambda一起工作。所以你可以說

bst proxy lambda index.js 

它會創建一個終端,你可以在你的技能測試中使用。