質問: ### 前提・実現したいこと タイトルの通りです。 Outgoing WebHooksが反応するチャンネルを制限していないので、doPostの戻り値でSlackに投稿できたら楽だと思いました。 ### 発生している問題・エラーメッセージ doPostで受け取れていますが、returnしてもSlackに投稿されません。 Slackサーバーにエラーが出ているかと思いますが、こちらではわかりません。 ### 該当のソースコード ``` function doPost(e) { return ContentService.createTextOutput(JSON.stringify({text: "@kanasakaguchi"})).setMimeType(ContentService.MimeType.JSON) } ``` ### 参考にしたページ Google App ScriptでSlackのGif Search - Qiita Google Apps Scriptを使って簡易APIをサクッと作る - Qiita ### 関連実績 GASでdoPostで受け取ってchannel.postMessageでSlackに投稿した経験はあります。 また、PHPでOutgoing WebHooksを受け取ってechoで投稿した経験もあります。
回答: PHPだと最後に ``` echo 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); } ```