技術ブログ

プログラミング、IT関連の記事中心

GASでSlackAPIを使用してSlack AppのBotからDMを送信する方法

目次

事前準備

Slack Appを作成していない方は、以下の記事を参考にSlack Appを作成してください。

https://reigle.info/entry/2022/10/19/100000reigle.info

以下の記事を参考にSlack Appの「OAuth Tokens for Your Workspace」を生成しておいてください。

https://reigle.info/entry/2022/10/21/100000reigle.info

権限の追加

以下の記事を参考に、「chat:write」「im:write」の権限を追加します。

https://reigle.info/entry/2022/10/20/100000reigle.info

DMの送り先のメンバーIDの確認方法

Slackアプリから、該当のメンバーのプロフィールを開き(ユーザーアイコンなどを押下する事で開く事ができます)、その他のメニューを押下する。

メンバーIDをコピー」を押下する。

クリップボードにメンバーIDがコピーされているので、任意のテキストエディタなどで「command + v」を押下して貼り付けると、メンバーIDが確認できる。

GASでDMを送信する方法

「Google Apps Script」を開き、以下を貼り付ける。

const BOT_USER_OAUTH_TOKEN = "xoxb-XXXXXX";
const MEMBER_ID = "XXXXXX"
const MESSAGE = "テスト1"

function slackPostDM() {
  const message_options = {
    "method" : "post",
    "contentType": "application/x-www-form-urlencoded",
    "payload" : {
      "token": BOT_USER_OAUTH_TOKEN,
      "channel": slackGetChannelID_(MEMBER_ID),
      "text": MESSAGE
    }
  };

  UrlFetchApp.fetch('https://slack.com/api/chat.postMessage', message_options);
}

function slackGetChannelID_(member_id) {
  const options = {
    "method" : "post",
    "contentType": "application/x-www-form-urlencoded",
    "payload" : {
      "token": BOT_USER_OAUTH_TOKEN,
      "users": member_id
    }
  }

  const response = UrlFetchApp.fetch('https://slack.com/api/conversations.open', options);
  const obj = JSON.parse(response);

  return obj.channel.id;
}

定数の内容はそれぞれ以下を参考に書き換えてください。

BOT_USER_OAUTH_TOKEN」には、「事前準備」に記載の「OAuth Tokens for Your Workspace」で生成したTokenを貼り付けてください。
MEMBER_ID」には、「DMの送り先のメンバーIDの確認方法」で取得したメンバーIDを貼り付けてください。
MESSAGE」には、送信するメッセージを任意で記載してください。


slackPostDM」関数を実行した結果、SlackのサイドメニューにAppが表示され、開くとメッセージが届いているれば成功です。