ラムダ関数として使用されるように調整されたalexa-sdk
を使用してカスタムスキルを開発しています。しかし、私はthis discussionの後にエクスプレスサーバを設定することができました。これにはラムダコンテキストを嘲笑することが含まれます。Alexa test simulator with text vs json
私はサーバーをセットアップし、Alexa開発コンソールのService Simulatorを使用してスキルをテストしていました。 「Text」または「JSON」のいずれかを使用してリクエストを送信するには、2つの方法があります。
「テキスト」タブを使用すると、「リモートエンドポイントを呼び出すことができないか、返された応答が無効です」というエラーが表示されます。しかし、「Server Request」(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);