2017-05-05 8 views
0

ラムダ関数として使用されるように調整された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); 

答えて

1

、私は「私がチェックしたはずです「私の開発エンドポイントは、信頼できる認証局からの証明書を持っている」というラジオボタンをチェックし... SSLの設定をいじることで問題を解決私の開発エンドポイントは、認証局 "からのワイルドカード証明書を持つドメインのサブドメインです。

まだ、Textが失敗してもJSONでテストするのはなぜか気になります。

1

あなたは余分な特急コードなしでAWSラムダで作業したい場合は、私たちのBSTプロキシツールを使用することができます。
https://bespoken.tools/blog/2016/08/24/introducing-bst-proxy-for-alexa-skill-development

アレクサにローカルマシンにアクセスできるようになりことでngrokに似ていますサービス。それはあなたがそれを使用してLambdasと直接作業することができますが、追加の利点があります。したがって、あなたは言うことができます

bst proxy lambda index.js 

そして、テストのためにあなたのスキルで使用できるエンドポイントが作成されます。