【SlackAPI】GASでpostMessageを叩いて、Slackにメッセージを投稿する方法まとめ

この記事は、こんな人に向けて書きました

  • GASからSlackにメッセージを投稿する方法を、1から知りたい
  • 投稿するテキストに、Slack特有のマークダウン記法メンションを使いたい

GASからSlackにメッセージを投稿するためには、SlackAPIのchat.postMessageと、GASでHTTPリクエストを行うUrlFetchApp.fetch(url, params)を使用します。

GASでchat.postMessageを使う最小限のテンプレート
function postMessage() {
  
  var url = "https://slack.com/api/chat.postMessage";
  
  // 変更するのは、この部分だけ!
  var payload = {
    "token" : "アクセストークン",
    "channel" : "チャンネルID or チャンネル名",
    "text" : "Slackに投稿するメッセージ"
  };
  
  var params = {
    "method" : "post",
    "payload" : payload
  };
  
  // Slackに投稿する
  UrlFetchApp.fetch(url, params);
}

サンプルのプログラムを見て想像できるように、GASからSlackAPIのchat.postMessageを使用するためには、『アクセストークン』と『チャンネルID』が必要です。

注意

チャンネル名でもchat.postMessageは問題なく動きますが、他のメンバーにチャンネル名を変更された途端、動かなくなります。

特別な理由が無い限りチャンネルIDを使うようにしましょう。

また、以降の章では変数payloadに格納する『JSONペイロード』部分しか変更しないので、他の部分は記述を割愛させていただきます。

// 変更するのは、この部分だけ!
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "Slackに投稿するメッセージ"
};

準備

この章では、GASからSlackに投稿するためのアクセストークンチャンネルIDの取得方法についてまとめています。

もう知ってるよって人は、2.投稿ユーザー設定からどうぞ。

アクセストークンを取得する

[推奨]必要な機能にしかアクセス権を与えないトークンを使う

手順が多くて大変ですが、慣れれば1〜2分以内に取得できると思います。

START
STEP.1
アプリを新規作成する

1.サイトにアクセスして、Create New Appボタンを選択する

https://api.slack.com/apps


2.アプリ名を入力し、ワークスペースを選択したら、Create Appボタンを選択する

STEP.2
スコープを設定する

1.OAuth & Permissionsを選択する


2.ScopesのSelect Permission Scopesで必要なスコープを選択する

今回は、SlackAPIのchat.postMessageを使用しているので、chat:write:botchat:write:userの2つを選択します。

他のスコープ一覧は公式ドキュメントを確認してください。


3.Save Changesボタンを選択して、スコープ設定を保存する

STEP.3
ワークスペースにアプリをインストールする

1.OAuth & Permissionsに戻り、Install App to Workspaceボタンを押す


2.許可するボタンを押す

STEP.4
トークンを取得する

許可するボタンを押すと、OAuth & Permissionsにアクセストークンが表示されるようになります。

END

[非推奨]レガシートークンを使う

レガシートークンは、Slackのほぼすべての機能を使えるトークンです。

公式で使用することを推奨されていませんが、ワークスペースに接続されるアプリ数を抑えたり(Slack API Testerの1つだけで済む)、とりあえずSlackAPIの動作確認をしたい場合に重宝します。

START
STEP.1
次のURLにアクセスする

https://api.slack.com/custom-integrations/legacy-tokens

過去に作成したレガシートークンもこのページで取得・再発行することができます。

STEP.2
レガシートークンを発行する

ページの中盤の方にあるCreate tokenボタンをクリックして、GASからメッセージを投稿したいワークスペースのレガシートークンを作成します。

注意
トークンを作成できるのは、ワークスペースでの権限が『オーナー』、『管理者』、『メンバー』の方です。この設定はワークスペース単位で変更することができます。
END

チャンネルIDを取得する

ブラウザ版Slackの場合

START
STEP.1
投稿するチャンネルを選択する

STEP.2
URLを見る

STEP.3
URLからチャンネルIDを抜き出す

https://app.slack.com/client/ワークスペースID/チャンネルID

END

デスクトップアプリケーション版Slackの場合

START
STEP.1
投稿するチャンネルを選択する

STEP.2
右クリックしてリンクをコピー

STEP.3
リンクからチャンネルIDを抜き出す

https://xxxxx.slack.com/messages/チャンネルID

END

投稿ユーザー設定

SlackAPIのchat.postMessageには、投稿するユーザーを『アカウント』と『Bot』の2パターンに切り分けられることができるパラメータが用意されています。

アカウントで投稿する

実際のアカウントでメッセージを投稿したい場合は、chat.postMessageas_userパラメータの値をtrueにしてURLを渡します。

アカウントで投稿する
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "あいうえおかきくけこ",
  "as_user" : true // デフォルト:false
};

Botで投稿する

Botでメッセージを投稿したい場合は、chat.postMessageusernameパラメータにBotの名前とicon_emojiパラメータにBotのアイコンをセットして、URLを渡します。

MEMO
Botのアイコンには、カスタム絵文字も設定できます。ただし、:で囲む文字列は英語でなくてはいけません。
Botで投稿する
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "あいうえおかきくけこ",
  "username" : "ロボット",         // Botの名前
  "icon_emoji" : ":robot_face:"  // Botのアイコン
};

メッセージの基本設定

この章では、Slackに投稿するメッセージをカスタマイズする方法を紹介します。

  • メンション
  • チャンネルリンク
  • テキスト装飾(マークダウン)

メンション

通知先 SlackAPI特有の記法 備考
@channel <!channel> チャンネル内の全員に通知
@here <!here> チャンネル内のアクティブなユーザーに通知
@ユーザー名(表示名) <@メンバーID> 特定のユーザーに通知

チャンネル内の全員に通知|@channel

チャンネル内の全員に通知
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "<!channel>\nあいうえお", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

チャンネル内のアクティブなユーザーに通知|@here

チャンネル内のアクティブなユーザーに通知
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "<!here>\nあいうえお", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

特定のユーザーに通知|@ユーザー名(表示名)

注意
ユーザー名(表示名) ≠ メンバーID
START
STEP.1
ユーザー名(表示名)を右クリックしてリンクをコピー

STEP.2
リンクからメンバーIDを抜き出す

https://app.slack.com/team/メンバーID

END
特定のユーザーに通知
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "<@メンバーID>\nあいうえお", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

チャンネルリンク

通常の記法 SlackAPI特有の記法 備考
#チャンネル名 <#チャンネルID> 特定のチャンネルに遷移させるリンクテキストを作成

チャンネルリンクを付ける|#チャンネル名

チャンネルリンクを付ける
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "<#チャンネルID>\nあいうえお", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

テキスト装飾|Markdown記法

装飾のタイプ markdown記法
太字(ボールド) *テキスト*
斜体(イタリック) _テキスト_
取り消し線 ~テキスト~
引用(一行) >テキスト
引用(複数行) >>>テキスト
コード(一行) `テキスト`
コード(複数行) ```テキスト```

太字(ボールド)|*テキスト*

太字(ボールド)
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "*あいうえお*", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

斜体(イタリック)|_テキスト_

斜体(イタリック)
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "_あいうえお_", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

取り消し線|~テキスト~

取り消し線
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "~あいうえお~", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

引用(一行)|>テキスト

引用(一行)
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : ">あいうえお", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

引用(複数行)|>>>テキスト

引用(複数行)
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : ">>>あいうえお\nかきくけこ\nさしすせそ", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

コード(一行)|`テキスト`

コード(一行)
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "`あいうえお`", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

コード(複数行)|```テキスト```

コード(複数行)
var payload = {
  "token" : "アクセストークン",
  "channel" : "チャンネルID or チャンネル名",
  "text" : "```あいうえお\nかきくけこ\nさしすせそ```", // ここを変更
  "username" : "ロボット",
  "icon_emoji" : ":robot_face:"
};

【拡張】リッチメッセージ

現在、書きかけの章です。今しばらくお待ち下さい。

さいごに

今回は、GASのUrlFetchApp.fetch(url, params)でSlackAPIのchat.postMessageを叩いて、GASからSlackにメッセージを投稿する方法を紹介しました。

BotやSlackアプリの開発や仕事の効率化に活かしてくださいーー。

それでは