Slackでリアクションスタンプを検知して、内容を取得後、postEphemeralで内容に問題ないか確認させるメッセージを送信。 ボタンをクリックしたらデータベースかスプレットシートに登録させるツールを作ろうと思ってます。
①Slackでリアクションスタンプの検知は成功してます
Event SubscriptionsにGASのURLを登録してます
②Slackへのメッセージ送信も成功してます
UrlFetchApp.fetch(url, postData);で送信できてます
③今つまづいているは、ボタンをクリックした際の取得の部分です
401エラーがでます。
送信先用にInteractivityにもう一つGASを登録しています。
何が原因なんでしょうか?
Event Subscriptionsに登録しているGAS
JS
1//プロパティ 2const scriptProperties = PropertiesService.getScriptProperties(); 3scriptProperties.setProperties({ 4 'SLACK_ACCESS_TOKEN': 'xoxb-xxxxxxxxxxxxxxx', 5 'SLACK_VERIFICATION_TOKEN': '' 6}); 7 8// メイン 9function doPost(e){ 10 var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); 11 var url = "https://slack.com/api/chat.postEphemeral"; 12 var reaction_torigger_emoji = 'gorilla'; 13 var json = JSON.parse(e.postData.getDataAsString()); 14 var event = json.event; 15 16 if(event){ 17 if (event.type === 'reaction_added') { 18 if (reaction_torigger_emoji == event.reaction) { 19 // トリガーになる絵文字があれば実行 20 var channelId = event.item.channel; 21 var userId = event.item_user; 22 var message = conversationsRepliesMessage(token, event.item.channel, event.item.ts); 23 var postText = message.messages[0].text; 24 //var currentDirectoryChannel = getCurrentDirectoryChannel(token, event.item.channel); 25 var postData = privatePostData(token, channelId, userId, postText); 26 27 UrlFetchApp.fetch(url, postData); 28 } 29 } 30 } 31 32 // Events APIを使用する初回確認のための記述 33 if (json.type === 'url_verification') { 34 return ContentService.createTextOutput(json.challenge); 35 } 36} 37 38//------------------------------------------------------------ 39// Slackに送信 40//------------------------------------------------------------ 41function privatePostData(token, channel, user, postText){ 42 var blocks = [ 43 { 44 "type": "input", 45 "element": { 46 "type": "plain_text_input", 47 "action_id": "actionId_title", 48 "initial_value": title 49 }, 50 "label": { 51 "type": "plain_text", 52 "text": "タイトル", 53 "emoji": true 54 } 55 }, 56 { 57 "type": "actions", 58 "elements": [ 59 { 60 "type": "button", 61 "action_id": "actionId_send", 62 "text": { 63 "type": "plain_text", 64 "text": "送信する" 65 }, 66 "style": "primary", 67 "value": "click" 68 } 69 ] 70 } 71 72 var payload = { 73 "token": token, 74 "channel": channel, 75 "text": "確認お願いします", 76 "user": user, 77 "as_users": false, 78 "attachments": "", 79 "blocks": JSON.stringify(blocks), 80 "icon_emoji": "", 81 "icon_url": "", 82 "link_names": true, 83 "username": "" 84 }; 85 var params = { 86 "method": "post", 87 "payload": payload 88 }; 89 return params 90}
送信後に受け取る用のInteractivityに登録してるGAS
JS
1//プロパティ 2const scriptProperties = PropertiesService.getScriptProperties(); 3scriptProperties.setProperties({ 4 'SLACK_ACCESS_TOKEN': 'xoxb-xxxxxxxxxxxxxxx', 5 'SLACK_VERIFICATION_TOKEN': '' 6}); 7 8// メイン 9function doPost(e){ 10 var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN'); 11 var data = e.parameter.payload; 12 var json = JSON.parse(data); 13 14 if (e.parameter.payload){} 15 16 // RequestURLの検証用 17 else{ 18 var data = JSON.parse(e.postData.getDataAsString()); 19 if(data.type === "url_verification"){ 20 return ContentService.createTextOutput(data.challenge); 21 } 22 } 23} 24
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。