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

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

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

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

Slack

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

Q&A

解決済

1回答

1271閲覧

Slack GAS dialogで入力した値を取得したい

amnkmsm

総合スコア12

Google Apps Script

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

Slack

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

0グッド

0クリップ

投稿2018/09/29 10:26

編集2018/09/29 10:36

前提・実現したいこと

WebHook interactiv messageを使って
SlackでGASを使ってボタンからdialogを立ち上げてdialogに入力した値を取得したいです。

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

SlackでGASを使ってJSONで送信したボタンからdialogを立ち上げてdialogに入力した値を取得したいです。
dialogが開かれるところまではできたのですが"決定"ボタンを押すとスラックへの接続が失敗と出てきて内容がうまく送れません。
どうかよろしくお願いいたします。

<送られてきたボタンからダイアログを立ち上げる処理>

function doPost(e) { var payload = JSON.parse(e["parameter"]["payload"]); var trigger_id = payload["trigger_id"]; var callback_id = payload["callback_id"]; //callback_idで処理を分ける // ボタン処理 if (callback_id == "botton"){ var value = payload["actions"][0]["value"]; var link = "<https://www.google.co.jp/search?q=" + value + "|" + value; if (value == "ok") { var text = link + ">が選択されました。OKの応答文" new dialog(trigger_id,callback_id); // dialog呼び出し // とりあえずここで押したボタンから立ち上げたダイアログに入力した値を取得したい } else { var text = link + ">が選択されました。OK以外の応答文" } var reply = { "replace_original": false, "response_type": "in_channel", "text": text }; var output = ContentService.createTextOutput(JSON.stringify(reply)); output.setMimeType(ContentService.MimeType.JSON); return output; } // dialog処理 // 試せていないのであっているのかまだわからない if (callback_id == "dialog"){ var json = JSON.parse(decodeURIComponent(payload)); var submission = parameter.submission; var submission = json.submission; // 確認用 var sheet1 = SpreadsheetApp.getActive().getSheetByName('シート名'); sheet1.appendRow([submission]); } } function dialog(trigger_id,callback_id) { var slackUrl = "https://hogehoge.slack.com/api/dialog.open"; var SLACK_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); var dialog = { "token": SLACK_ACCESS_TOKEN,//OAuth token "trigger_id": trigger_id, "dialog": JSON.stringify({ "callback_id": "dialog", "title": "ここに題名。", "submit_label": "決定", "elements": [ { "type": "text", "label": "Pickup Location", "name": "loc_origin" }, { "type": "textarea", "label": "Dropoff Location", "name": "loc_destination" } ] }) }; var options = { 'method' : 'post', 'payload' : dialog, }; UrlFetchApp.fetch(slackUrl, options); return ContentService.createTextOutput(); // Important }

<ボタンを送る処理>

function doPost(e) { var INCOMING_WEBHOOK_URL = PropertiesService.getScriptProperties().getProperty('INCOMING_WEB_HOOK'); var SLACK_ACCESS_TOKEN = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); var trigger_id = e.parameter.trigger_id; var data = { "text": "ボタン", "attachments": [{ "trigger_id" : trigger_id, "token": SLACK_ACCESS_TOKEN,//OAuth token "text": "how are you?", "fallback": "fallback message", "callback_id": "botton", "color": "#3AA3E3", "attachment_type": "default", "actions": [{ "name": "feeling", "text": "Good", "type": "button", "value": "ok" }, { "name": "feeling", "text": "so so", "type": "button", "value": "so so" } ] }] } var params = { 'method': 'post', 'payload': JSON.stringify(data) }; UrlFetchApp.fetch(INCOMING_WEBHOOK_URL, params); return ContentService.createTextOutput(); }

試したこと

公式サイトなどの参考サイトを見ましたが私には解決できませんでした。

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

Google Apps Script
参考にしたサイト
https://stackoverflow.com/questions/51092613/cant-open-slack-dialog-through-google-apps-scripts
https://teratail.com/questions/142295

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

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

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

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

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

guest

回答1

0

ベストアンサー

dialogのelementsにnameがあると思いますが、それを指定してあげれば取得できると思います。
subject1と2のところです。

javascript

1 2 // dialog処理 3 // 試せていないのであっているのかまだわからない 4 if (callback_id == "dialog"){ 5 var json = JSON.parse(decodeURIComponent(payload)); 6 var submission = parameter.submission; 7 var submission = json.submission; 8 9 var subject1 = submission.loc_origin; //ここ 10 var subject2 = submission.loc_destination; //ここ 11

投稿2018/10/04 05:14

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

amnkmsm

2018/10/04 13:27 編集

ご回答ありがとうございます。値の取得は質問後に調べていたら自分できました。 しかし、submitを押すと動作自体はしているのですがスラックのダイアログが閉じないということで調べると200と空のbodyを返す必要があるとのとこだったのですがGASでの記述方法がわからずに悩んでいます。 そのことについても教えていただけると幸いです。 https://stackoverflow.com/questions/48714834/slack-dialog-doesnt-close-after-form-submission https://stackoverflow.com/questions/48785279/slack-dialog-gives-an-error
退会済みユーザー

退会済みユーザー

2018/10/08 02:43 編集

<送られてきたボタンからダイアログを立ち上げる処理> の最後に return ContentService.createTextOutput(); を入れてあげれば、接続の問題が解決するかもしれません。 sheet1.appendRow([submission]); } return ContentService.createTextOutput(); }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問