質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

393閲覧

AWS LambdaのNode.jsとDialogflowについて

HiroakiKamei

総合スコア8

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/02/02 16:29

はじめまして、Node.js初心者です。
GoogleHomeからSlackに投稿したいです。

前提・実現したいこと

GoogleHome→Dialogflow→APIGateway→AWSLambda→Slack

参考にしたサイト様
AWS API Gateway+LambdaでSlackにメッセージをPOSTする(前編)

DialogflowのFulfillmentでAPIGatewayをあてており、
Lambdaでこのコードを入れたところDialogflow側でエラーがでてしまいます。
APIとLambdaは問題なく、Slackにテストポストがされる状態です。

console.log('Loading function'); const https = require('https'); const url = require('url'); const slack_url = process.env.SLACK_WEBHOOK_URL; const slack_req_opts = url.parse(slack_url); slack_req_opts.method = 'POST'; slack_req_opts.headers = {'Content-Type': 'application/json'}; exports.handler = function(event, context) { if (event.text) { var req = https.request(slack_req_opts, function (res) { if (res.statusCode === 200) { context.succeed('posted to slack'); } else { context.fail('status code: ' + res.statusCode); } }); req.on('error', function(e) { console.log('problem with request: ' + e.message); context.fail(e.message); }); // ここで、メッセージの編集を必要に応じて行う。 var message = event.text; req.write(JSON.stringify({text: message})); req.end(); } }); };

###Dialogflow側でのエラーメッセージ

"status": { "code": 206, "errorType": "partial_content", "errorDetails": "Webhook call failed. Error: Request timeout.", "webhookTimedOut": true }, "sessionId": "88032c8d-97cb-48bc-94c3-a8151fa26c6a" }

試したこと

exports.handler = (event, context, callback) => { callback(null, { "statusCode": 200, }) };

Lambdaに上記のコールバックのコードのみを入れた場合はDialogflow側のエラーはでません。
しかし上記のSlackのコードと組み合わせると同じように206エラーがでてしまいます。

こちらの参考様
Google Home と Lambda で「"あ"のつくポケモンなーんだ」

補足情報

当方初心者ですがお力添えしていただきたく思います、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

context.succeedcontext.failは Node.js ランタイム v0.10.42 のコンテキストメソッドです。
以前の Node.js ランタイム v0.10.42 を使用する - AWS

Lambda のランタイムが v4.3 あるいは v6.10 の場合は、callbackを使います。
Lambda 関数ハンドラー (Node.js) - AWS

「試したこと」から考えると、おそらくこちらのランタイムを使っているのでしょう。

したがって、↓のように修正すれば、動くはずです。

javascript

1exports.handler = function(event, context, callback) { 2 if (!event.text) { 3 callback('called without event.text'); 4 return; 5 } 6 var req = https.request(slack_req_opts, function (res) { 7 if (res.statusCode === 200) { 8 callback(null, 'posted to slack'); 9 } else { 10 callback('status code: ' + res.statusCode); 11 } 12 } 13 // 以下略 14});

また、Lambda のコンソールで関数のテスト(今回のケースではおそらくここが成功しません)、API Gateway のコンソールで API のテストがそれぞれできますので、今後 GoogleHome → Dialogflow → APIGateway → Lambda → Slack のようにつなげる場合は、右から順に動作テストをしていくと、原因がしぼれるので解決しやすくなります。

投稿2018/02/02 16:47

編集2018/02/02 16:59
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HiroakiKamei

2018/02/02 17:29

こんばんは、ご迅速なご回答ありがとうございました! 無事解決し、 Slackまでつながりました!どハマりしていたので大変助かりました。 アドバイスもありがとうございます、頑張って勉強していきます。 また質問した際はよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問