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

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

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

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

JavaScript

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

Slack

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

API

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

Q&A

解決済

1回答

895閲覧

slack-Interactive messageのボタンにDialogを設定したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

JavaScript

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

Slack

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

API

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

0グッド

0クリップ

投稿2018/08/21 09:36

編集2018/08/22 04:57

###できていること
Slackにボタン付きメッセージをbotで送ることはできています。
加えて、"/hogehoge"を送信すると、ダイアログが立ち上がり、入力できるところまでもできています。
使っている機能は以下です。

  • Google Apps Script
  • Incoming Webhooks
  • Slack API
  • Slash Command

###現段階のコード

javascript

1//Slash Comandを受信 2function doPost(e){ 3 var response = send_Button(e); 4 return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON); 5} 6 7function send_Button(e) { 8 var input_text = e.parameter.text; 9 var slackUrl = "https://hooks.slack.com/services/xxxxx.....xxxxxxx"; 10 // message text 11 var messageData = { 12 "text":"subject:"+input_text, 13 "attachments": [ 14 { 15 "text": "Are you ok?", 16 "fallback": "Sorry, no support for buttons.", 17 "callback_id": "lessonbutton", 18 "color": "#3AA3E3", 19 "attachment_type": "default", 20 "actions": [ 21 { 22 "name": "button", 23 "text": "OK", 24 "style": "primary", 25 "type": "button", 26 "value": "ok" 27 }] 28 }] 29} 30 31 32// format for Slack 33var options = { 34 'method' : 'post', 35 'contentType': 'application/json', 36 // Convert the JavaScript object to a JSON string. 37 'payload' : JSON.stringify(messageData) 38}; 39 40// post to Slack 41UrlFetchApp.fetch(slackUrl, options); 42return input_text; 43}

すると、Slackにボタン付きInteractive Messageが届きます。

javascript

1function Slack_Dialog(e) { 2 var text = e.parameter.text; 3 var response = {text: text}; 4 var trigger_id = e.parameter.trigger_id; 5 var slackUrl = "https://hogehogehoge.slack.com/api/dialog.open"; 6 var dialog = { 7 "token": "xoxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....xxxx", 8 "trigger_id": trigger_id, 9 "dialog": JSON.stringify({ 10 "callback_id": "wantdo3", 11 "title": "What do you want to do there?", 12 "submit_label": "Request", 13 "elements": [ 14 { 15 "type": "text", 16 "label": "In The Morning", 17 "name": "dialg_morning" 18 }, 19 { 20 "type": "text", 21 "label": "In The Afternoon", 22 "name": "dialg_afternoon" 23 }, 24 { 25 "type": "text", 26 "label": "In The Night", 27 "name": "dialg_night" 28 } 29 ] 30 }) 31 } 32 var options = { 33 'method' : 'post', 34 'payload' : dialog, 35 }; 36 return response = UrlFetchApp.fetch(slackUrl, options); 37} 38

すると、ダイアログが開きます。
###やりたいこと
"/hogehoge"と入力すると、ボタン付きメッセージが送られてきて、ボタンを押すとダイアログが立ち上がるようにしたい。
https://www.slideshare.net/yasuyuki_ogawa/slack-apps
こちらのリンクのスライド(p14)にコールバックが大事云々とありました。
しかし、当方、まだコールバックを理解しておりません。
よろしくお願いいたします。

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

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

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

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

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

macaron_xxx

2018/08/22 00:31

この質問内容だけでは、現状どうなっていて、どこで困っているのかがわかりません。必要最低限現状のコードや、どこで困っているのかを記載してください。
guest

回答1

0

ベストアンサー

###Slack Dialog機能について
個人情報が含まれたりするので、ちょっと割愛
まず、Dialogの中身

javascript

1function Slack_Dialog(trigger_id,callback_id) { 2 var slackUrl = "https://hogehoge.slack.com/api/dialog.open"; 3 var dialog = { 4 "token": "xoxxxxxxx...xxxxxxxx",//OAuth token 5 "trigger_id": trigger_id, 6 "dialog": JSON.stringify({ 7 "callback_id": "dialog", 8 "title": "ここに題名。", 9 "submit_label": "Submit", 10 "elements": [ 11 { 12 "type": "text", 13 "label": "題名", 14 "name": "dialg_subject", 15 "placeholder":"題名を入力..." 16 } 17 ] 18 }) 19 }; 20 var options = { 21 'method' : 'post', 22 'payload' : dialog, 23 }; 24 UrlFetchApp.fetch(slackUrl, options); 25 26 return ContentService.createTextOutput(); // Important 27}

これの関数をスラコマなり、ボタンなりの処理があった後に実行するよう配置。

実際に、Dialogへの入力データは、payloadに乗っかて行く。

jvascript

1function doPost(e){ 2 var parameter=e.parameter; 3 var data = parameter.payload; 4 var json = JSON.parse(decodeURIComponent(data)); 5 var submission = parameter.submission; 6 var submission = json.submission; 7 else if(callback_id == "dialog"){ 8 GmailApp.sendEmail("xxxx@xxx.com", "outgoings", JSON.stringify(submission.dialg_subject)); 9 } 10}

ちゃんと入力されたデータがなんなのか確認する方法はlogger.log()で見れなかったので、とりあえずメールで確認した。
ちゃんとDialogに入力した文字列を確認できた。

投稿2018/08/27 02:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問