2017-04-21 4 views
1

私は自分のコンピュータ上でactions-on-googleからapi.aiを使ってsillyNameMaker exampleを実行しようとしています。 私はexpressとngrokトンネリングでnodejsサーバをセットアップしました。エージェントとapi.aiでリクエストを送信しようとすると、私のサーバーはPOSTリクエストを受信しますが、本体は空であるように見えます。私が正しく設定していないものはありますか?actions-on-google api.aiはnodejsでのPOST要求で本文を送信しません。

'use strict'; 
var express = require('express') 
var app = express() 
const ApiAiAssistant = require('actions-on-google').ApiAiAssistant; 

function sillyNameMaker(req, res) { 
    const assistant = new ApiAiAssistant({request: req, response: res}); 

    // Create functions to handle requests here 
    const WELCOME_INTENT = 'input.welcome'; // the action name from the API.AI intent 
    const NUMBER_INTENT = 'input.number'; // the action name from the API.AI intent 
    const NUMBER_ARGUMENT = 'input.mynum'; // the action name from the API.AI intent 

    function welcomeIntent (assistant) { 
    assistant.ask('Welcome to action snippets! Say a number.'); 
    } 

    function numberIntent (assistant) { 
    let number = assistant.getArgument(NUMBER_ARGUMENT); 
    assistant.tell('You said ' + number); 
    } 

    let actionMap = new Map(); 
    actionMap.set(WELCOME_INTENT, welcomeIntent); 
    actionMap.set(NUMBER_INTENT, numberIntent); 
    assistant.handleRequest(actionMap); 

    function responseHandler (assistant) { 
    console.log("okok") 
    // intent contains the name of the intent you defined in the Actions area of API.AI 
    let intent = assistant.getIntent(); 
    switch (intent) { 
     case WELCOME_INTENT: 
     assistant.ask('Welcome! Say a number.'); 
     break; 

     case NUMBER_INTENT: 
     let number = assistant.getArgument(NUMBER_ARGUMENT); 
     assistant.tell('You said ' + number); 
     break; 
    } 
    } 
    // you can add the function name instead of an action map 
    assistant.handleRequest(responseHandler); 
} 


app.post('/google', function (req, res) { 
    console.log(req.body); 
    sillyNameMaker(req, res); 
}) 


app.get('/', function (req, res) { 
    res.send("Server is up and running.") 
}) 


app.listen(3000, function() { 
    console.log('Example app listening on port 3000!') 
}) 

そして、私が得たエラー:ここ

は私のindex.jsファイルです

TypeError: Cannot read property 'originalRequest' of undefined 
    at new ApiAiAssistant (/Users/clementjoudet/Desktop/Dev/google-home/node_modules/actions-on-google/api-ai-assistant.js:67:19) 
    at sillyNameMaker (/Users/clementjoudet/Desktop/Dev/google-home/main.js:8:21) 

私はreq.bodyを印刷しようとしているが、それは定義されていません...のおかげであなたの助けを前に進んでください。

答えて

8

あなたとgoogle actions-on-packageの両方が、あなたがどのようにExpressを使用しているかを推測しています。デフォルトでは、Expressはではなく、にreq.body属性を入力します(reference for req.bodyを参照)。代わりに、それはbody-parserのような追加のミドルウェアに依存します。

あなたは

npm install body-parser 

でプロジェクトにボディパーサーを追加することができ、その後、いくつかと(API.AIを送信し、アクション・オン・グーグル使用しています)JSONにリクエストボディを解析するためにそれを使用する必要があります追加の行は、を定義してExpressに添付します。


var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 
+0

ありがとうございました! – clemkoa

関連する問題