🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

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

Q&A

解決済

1回答

1428閲覧

Slackの「Outgoing Webhook」アプリケーションのGASを利用した実装方法

kawarayu

総合スコア55

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Slack

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

0グッド

0クリップ

投稿2019/10/13 06:13

編集2019/10/13 06:15

前提・実現したいこと

Slackにてシンプルなbotを作成したいと考えています。
「Outgoing Webhook」アプリケーションを利用して、「引き金となる言葉」を入力した場合に「hello」とだけ返す、簡単なアプリケーションです。

Post処理を受け取る環境としてGoogle App Script(GAS)によるdoPost関数を利用しようとしています。

発生している問題・エラーメッセージ

slackでトリガーとなる言葉を入力しても、何の反応もありません。
入力のたびにGASの実行回数はカウントされますが、エラーとなります。
エラーメッセージは表示されません。
GASのconsole.logの確認画面では、実行記録が残っていません。

該当のソースコード

javascript

1function doPost(e) { 2 var params = JSON.parse(e.postData.getDataAsString()); //何もしない 3 console.log(params); 4 5 var output = ContentService.createTextOutput(); 6 output.setMimeType(ContentService.MimeType.JSON); 7 output.setContent(JSON.stringify({ "text": "hello" })); 8 9 return output; 10}

試したこと

REST ApeというChrome拡張のRESTクライアントツールを使用して、該当URLに適当なJSONをPOSTすると以下の結果が返ってきます。
doPostは正常に処理され、console.logの結果も正常に表示されます。

json

1{ 2 "text": "hello" 3}

slackとの連携部分に問題があるのだと思いますが、該当する箇所が分からず、苦慮しております。
教えて頂けると大変助かります。

補足情報(FW/ツールのバージョンなど)

slackは「アプリを検索する→カスタムインテグレーション →Outgoing Webhook→設定を編集する」の画面から以下の設定をしています。

  • チャンネル:(実在するチャンネル)
  • 引き金となる言葉:trigger
  • URL: GASの「公開→Webアプリケーションとして導入→プロジェクトバージョン(NEW)→現在のウェブ アプリケーションの URL:」の値を入力
  • トークン: 使用していない(入力チェックのために使うものと考えているので、切り分けのためにあえて無視しています)

以上の設定で以下のような入力をしています。

trigger test

以上、よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。
Slack側のOutgoing Webhook -> GASのエンドポイントで受ける -> さらにGAS側から対応したメッセージをSlack側に送る

という流れでしょうか。

下記の投稿が近いのかな?と思います。

https://teratail.com/questions/50312

単純にSlackからのpostを受けて、レスポンスを返すのでは、Slack側にはメッセージは送れなかったかも。
GAS側からSlackへIncoming WebhookやAPIを叩いてメッセージを投稿してあげる、という形になると思います。

投稿2019/10/13 08:41

suama

総合スコア1997

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

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

kawarayu

2019/10/13 09:32

ご回答ありがとうございます。 ご提示頂いたURLはまさに私と同じ問題でした。 GASを使う場合は、(おそらく何か裏側的な事情で)returnで返すことが出来ないという仕様ということのようですね。 ドキュメントには以下の通りで、returnすれば返ってくるとあったのですが、意図した挙動にはなりませんでした。 ハンドラが Slack のチャンネルに応答を返す場合には、以下の JSON を応答の本文として返す必要があります。 { "text": "アフリカ系あるいはヨーロッパ系?" } --- >GAS側からSlackへIncoming WebhookやAPIを叩いてメッセージを投稿してあげる このようなやり方で対応したいと思います。 代案頂きありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問