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

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

詳細はこちら
Google Apps Script

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

Slack

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

Q&A

解決済

2回答

5257閲覧

SlackのOutgoing WebHooksをGASで受け取ってreturnで反応元に投稿したい

KanaSakaguchi

総合スコア52

Google Apps Script

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

Slack

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

0グッド

0クリップ

投稿2016/10/04 16:10

編集2016/10/04 16:47

###前提・実現したいこと
タイトルの通りです。
Outgoing WebHooksが反応するチャンネルを制限していないので、doPostの戻り値でSlackに投稿できたら楽だと思いました。

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

doPostで受け取れていますが、returnしてもSlackに投稿されません。
Slackサーバーにエラーが出ているかと思いますが、こちらではわかりません。

###該当のソースコード

js

1function doPost(e) { 2 return ContentService.createTextOutput(JSON.stringify({text: "@kanasakaguchi"})).setMimeType(ContentService.MimeType.JSON) 3}

###参考にしたページ
Google App ScriptでSlackのGif Search - Qiita
Google Apps Scriptを使って簡易APIをサクッと作る - Qiita

###関連実績
GASでdoPostで受け取ってchannel.postMessageでSlackに投稿した経験はあります。
また、PHPでOutgoing WebHooksを受け取ってechoで投稿した経験もあります。

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

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

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

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

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

guest

回答2

0

自己解決

PHPだと最後に

php

1echo json_encode(['text' => "メッセージ"]);

で投稿できているのでGASでも同様のことができないだろうか?と思ったのですが、GAS製のWebページはiframe内に配置されるなどが要因でできないようです。

以下、GASからSlackに投稿する方法。

方法1. channel.postMessageを使う

私はchannel.postMessageを使ってSlackに投稿しています。
(実際は投稿処理を使い回せるよう自作ライブラリにして使っています。)

function doPost(data) { payload.token = "Slackのトークン"; const payload = { "channel": data.parameter.channel_name, "icon_emoji": "Slackの絵文字", "username": "BOTの名前", "text": "メッセージ", "link_names": 1 }; const option = { "method" : "POST", "payload" : payload }; UrlFetchApp.fetch("https://slack.com/api/chat.postMessage", option); }

方法2. Incoming Webhookを使う

同様のことを@homedmさん提示のIncoming Webhookを使う場合は以下のようになると思います。
(動作未確認)

function doPost(data) { const url = "Incoming Webhookで発行されたURL"; const options = { 'method' : 'POST', 'headers' : {'Content-type': 'application/json'}, 'payload' : '{"text": "メッセージ", "channel": ' + data.parameter.channel_name + '}' }; UrlFetchApp.fetch(url, options); }

投稿2018/05/10 00:53

編集2018/05/10 00:56
KanaSakaguchi

総合スコア52

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

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

0

Incoming webhookを使用しなければ、Slackへの投稿はできなさそうです。

以下のようなコードを書いてdoPost()から呼び出すのが良いと思います。

gas

1function postSlack(text) { 2 const url = "Incoming Webhookで発行されたURL"; 3 const options = { 4 'method' : 'POST', 5 'headers' : {'Content-type': 'application/json'}, 6 'payload' : '{"text": text }' 7 }; 8 UrlFetchApp.fetch(url, options); 9}

投稿2018/05/09 16:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

KanaSakaguchi

2018/05/10 00:24

>Incoming webhookを使用しなければ、Slackへの投稿はできなさそうです。 PHPだと最後に`echo json_encode(['text' => "メッセージ"]);`で投稿できているのでGASでも同様のことができないだろうか?と思ったのですが、GAS製のWebページはiframe内に配置されるなどが要因でできないようですね。
KanaSakaguchi

2018/05/10 00:59

コード書いて確認しましたが、GASでconstが使えるようになっていたんですね。 (確か前使った時はエラーになったような。)
退会済みユーザー

退会済みユーザー

2018/05/10 02:17

incoming webhookを使わないとできないと思っていましたが他にも方法があるのですね。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問