20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Apps Script で Slack interactive message

Last updated at Posted at 2017-10-25

Slack の interactive message を Google Apps Script (GAS) で実現したので、自分用にメモ。

Setting

GAS

プロジェクトファイルを作成し、Webアプリとして公開→URL取得

Slack

SlackAPIからAppを作成し、Interactive ComponentsのURLに、GASのエンドポイントを設定

Google Apps Script

sendMessage()

この function によって,Slackにボタンとリストが付いたメッセージを送信できる.

    //=================================
    // sendMsgWithButton()
    //=================================
    function sendMsgWithButton() {

      // slack channel url (where to send the message)
      var slackUrl = [SlackのIncomingWebhookのURL];

      // 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": "ButtonResponse",
            "color": "#3AA3E3",
            "attachment_type": "default",
            "actions": [
              {
                    "name": "button",
                    "text": "OK",
                    "style": "primary",
                    "type": "button",
                    "value": "ok"
              },
              {
                    "name": "button",
                    "text": "NO",
                    "style": "danger",
                    "type": "button",
                    "value": "no"
              }
            ]
          },
          {
            "text":"Can you select one from the list?",
            "callback_id": "ptNotificationButtonResponse2",
            "color":"warning",
            "actions":[
              {
                "name": "select",
                "text": "Select test",
                "style": "primary",
                "type": "select",
                "options": [
                  {
                    text:"A",
                    value:"a"
                  },
                  {
                    text:"B",
                    value:"b"
                  },
                  {
                    text:"C",
                    value:"c"
                  }
                ]
              }
            ]
          }
        ]      
      }
    
      // 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);
    }

doPost(e)

Buttonを押すと飛ぶHTTP Postを受取り,選択肢によって異なる反応を示すように設定.

    function doPost(e) {
      // exploit JSON from payload
      //var data = contents.substr(8); //[payload={JSON}]
      var parameter=e.parameter;
      var data = parameter.payload;
      var json = JSON.parse(decodeURIComponent(data));
    
      // check answer
      // button
      if (json.actions[0].name == "button"){
        var text = "You clicked " + json.actions[0].value;
      // select
      } else if (json.actions[0].name == "select") {
        var text = "You selected " +  json.actions[0].selected_options[0].value;
      }
      
      // modify message
      var replyMessage = {
        "replace_original": true,
        "response_type": "in_channel",
        "text": "I see you clicked the button.\n" + text
      };
      return ContentService.createTextOutput(JSON.stringify(replyMessage)).setMimeType(ContentService.MimeType.JSON);     
    }
20
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?