###できていること・やりたいこと
Slack に/hogehogeと入力して送信すると、
という感じでメッセージが送られ、
Editを押すと
とダイアログが表示されます。
ここに何らかの文字列を入力してSubmitすると、また最初の図の画面に戻ります。
入力した文字列の取得もできています。
そこまではいいのですが、入力した文字列を「入力して」のところに書き換えたいのです。
###分からないこと
下のコードで実行してみました。
エラーが表示されるということはないですが、
書き換えることはできませんでした。
実行した時のpayloadを見ると、タイムスタンプが含まれていませんでした。
おそらく、ダイアログが実行されてその結果がdoPostに返されるとき、返されるtsはaction_tsのため、
chat.updateに必要なtsをvar message_ts = json['message_ts'];
として得ようとするとダメなんでしょうか。
または、Slack への送信はwebhookを使っているため、chat.updateを書き換えのときだけ使用しているのがいけないのでしょうか。
chat.updateとresponse_urlのどちらかを使えとSlackの公式に書きてありましたが、response_urlの場合、制限があるようなので今回のプログラムには使いたくないです。
Javascript
1function doPost(e){ 2 var parameter=e.parameter; 3 var data = parameter.payload; 4 var json = JSON.parse(decodeURIComponent(data)); 5 var trigger_id = parameter.trigger_id; 6 var trigger_id = json.trigger_id; 7 var callback_id = parameter.callback_id; 8 var callback_id = json.callback_id; 9 var token = parameter.token; 10 var token = json.token; 11 var submission = parameter.submission; 12 var submission = json.submission; 13 var message_ts = parameter.message_ts; 14 var message_ts = json.message_ts; 15 16 // button 17 if (callback_id == 'button'){ 18 var respond_dialog = Slack_Dialog(trigger_id,callback_id,message_ts); 19 } 20 //dialog 21 else if(callback_id == 'dialog'){ 22 var subject = submission.dialg_subject; 23 var description = submission.dialg_description; 24 var words = submission.dialg_words; 25 26 //var response_url = "https://hooks.slack.com/xxxxxxx-xxx"; 27 var url= 'https://hoge/slack.com/api/chat.update'; 28 // get object elements 29 var user = json['user'].name; 30 var message_ts = json['message_ts'];//ここがボタンを押したときのタイムスタンプでないとダメ? 31 var channel_id = json['channel'].id; 32 var payload = { 33 "token" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb", 34 'channel' : channel_id, 35 'ts' : message_ts, 36 'text' : subject+"\n"+description+"\n"+words,//書き換え後のテキスト 37 }; 38 var options = {'method':'post','payload':payload}; 39 40 var result = UrlFetchApp.fetch(url, options); 41 } 42//以下略 43}
###追記
chat.updateのpayloadの中身と周辺です。
buttonが押されたときのcallback_idで分岐しています。
javascript
1 if (callback_id == 'hogehogehoge'){ 2 var response_url = 'https://slack.com/api/chat.update'; 3 var user = json['user'].name; 4 var message_ts = json['message_ts']; 5 var channel_id = json['channel'].id; 6 var payload = { 7 'token':'xoxp-xxxxxxx-xxxxx...xxxc', 8 'channel' : channel_id, 9 'ts' : message_ts, 10 'text' : '入力してください\n'+subject+'\n'+description+'\n'+words, 11 }; 12 var options = {'method':'post','payload':payload}; 13 var result = UrlFetchApp.fetch(response_url, options); 14 return ContentService.createTextOutput(); 15 }
###追記2
json
1//resultの結果 2{"ok":false,"error":"message_not_found"} 3 4//payloadの中身 5{"type":"dialog_submission","token":"LXXXXXXXXXXXXX","action_ts":"1535445637.513198", 6"team":{"id":"XXXXX","domain":"hogehoge"},"user":{"id":"XXXXXXX","name":"XXXX"}, 7"channel":{"id":"XXXXXX","name":"XXXXXX"},"submission":{"dialg_subject":"入力したものはちゃんと取得"}, 8"callback_id":"dialog","response_url":"https://hooks.slack.com/app/.....","state":""} 9
回答2件
あなたの回答
tips
プレビュー