クマは森で用を足しますか?

アウトプットは重要です。

(Dialogflow) TypeError: Cannot read property 'forEach' of undefined

Dialogflow のインラインエディタで書いていたシンプルな Fulfillment が、エラーを出すようになりました。インラインエディタ下の "View execution logs in the Firebase console" からログを確認すると、どうも forEach で失敗しているようです。

f:id:cheerio-the-bear:20190106093940p:plain
TypeError: Cannot read property 'forEach' of undefined

その Fulfillment 関数、さっきまで動いてたような気がするので不思議(気がするだけかもしれない)。

TypeError: Cannot read property 'forEach' of undefined
    at V2Agent.addActionsOnGoogle_ (/user_code/node_modules/dialogflow-fulfillment/src/v2-agent.js:313:28)
    at WebhookClient.addResponse_ (/user_code/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:269:19)
    at WebhookClient.add (/user_code/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:245:12)
    at noInput (/user_code/index.js:68:15)
    at WebhookClient.handleRequest (/user_code/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:303:44)
    at exports.dialogflowFirebaseFulfillment.functions.https.onRequest (/user_code/index.js:75:11)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:57:9)
    at /var/tmp/worker/worker.js:725:7
    at /var/tmp/worker/worker.js:708:11
    at _combinedTickCallback (internal/process/next_tick.js:73:7)

現象としては、ばっちりこの問題のようです。

github.com

確かに、API 仕様書とかさっぱり読まずに勢いで書いているので、お作法がよろしくないところがあってもおかしくありません。この問題ではGitHub にある実装例を見てよく考えろと言われて終わっているようですが、インラインエディタのサンプルコードには従っていたつもりなので、自分としてはまだなんだかピンと来ない感じです。

package.json に書かれている "actions-on-google" のバージョンを "2.4.0" に変えるとエラーが消えるという書き込みがあるので、それで急場をしのぎます。確認すると "^2.2.0" と書かれていましたが、これを "2.4.0" に変えると確かにエラーが消えました。

  "dependencies": {
    "actions-on-google": "^2.2.0",
    "firebase-admin": "^5.13.1",
    "firebase-functions": "^2.0.2",
    "dialogflow": "^0.6.0",
    "dialogflow-fulfillment": "^0.5.0"
  }

はて ..

おかげさまで、アプリはちゃんと動いてくれています。

cheerio-the-bear.hatenablog.com

でもこのアプリはちょっと手を抜き過ぎたので、ちょっとアプローチを変えて作り直しちゃいました。

cheerio-the-bear.hatenablog.com