web-dev-qa-db-ja.com

Slackインタラクティブボタン応答のみでボタン(アタッチメント)を交換する方法

Google Apps Script(GAS)を使用して、シンプルなインタラクティブボタンSlackアプリを作成することができました。

元のメッセージを応答で置き換える方法は知っていますが、Slack Interactive Buttonのドキュメントの複数の場所で示されているように(ただし明確に説明されていないため)、ボタンのみを置き換えたいと思います。
https://api.slack.com/docs/message-buttons#crafting_your_message

ここに示されていることを実行したいと思います: https://a.slack-Edge.com/dcb1/img/api/message_guidelines/Example_6.gif

これは元のメッセージの更新であり、元のメッセージを同じテキストで添付ファイルが異なるものに置き換えたものですか...?

私の現在のインタラクティブボタンのメッセージコードは次のようになります。

function sendMsgWithButton() {

// slack channel url (where to send the message)
var slackUrl = "https://hooks.slack.com/services/...";

// message text  
var messageData = {
"text": "Here's your interactive buttons message.",
"attachments": [
    {
        "text": "Can you click the button?",
        "fallback": "Sorry, no support for buttons.",
        "callback_id": "ptNotificationButtonResponse",
        "color": "#3AA3E3",
        "attachment_type": "default",
        "actions": [
            {
                "name": "userResponse",
                "text": "OK",
                "style": "primary",
                "type": "button",
                "value": "ok"
            }
                   ]
    }
                ]
}

// format for Slack
var options = {
   'method' : 'post',
   'contentType': 'application/json',
   // Convert the JavaScript object to a JSON string.
   'payload' : JSON.stringify(messageData)
 };    

// post to Slack
UrlFetchApp.fetch(slackUrl, options);
}

現在のアクションURLコードは次のようになります。

function doPost() {

var replyMessage = {"replace_original": true,
                    "response_type": "in_channel",
                    "text": "I see you clicked the button."
                   };

 return ContentService.createTextOutput(JSON.stringify(replyMessage)).setMimeType(ContentService.MimeType.JSON);     
}

元のメッセージ全体を置き換えるのではなく、上のgifに示されているように、ボタンだけをチェックボックスや確認メッセージのようなものに置き換えたいと思います。

ありがとう!

17
Matt

一部だけでなく、メッセージ全体のみを置き換えることができます。

元のメッセージを更新するには、次の2つのオプションがあります。

  1. {"replace_original": true}でSlackリクエストに応答します

  2. 使用 chat.update

元のメッセージのタイプがephemeralでない場合は、ペイロードの一部としてoriginal_messageプロパティのSlackから元のメッセージのコピーを取得します。これは、元のメッセージの交換を更新するのに役立ちます。 。

参考として、Slackドキュメントの このページ を参照してください。

11
Erik Kalkoken