- GASからSlackにメッセージを投稿する方法を、1から知りたい
- 投稿するテキストに、Slack特有のマークダウン記法やメンションを使いたい
GASからSlackにメッセージを投稿するためには、SlackAPIのchat.postMessage
と、GASでHTTPリクエストを行うUrlFetchApp.fetch(url, params)
を使用します。
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分以内に取得できると思います。
1.サイトにアクセスして、Create New Appボタンを選択する
2.アプリ名を入力し、ワークスペースを選択したら、Create Appボタンを選択する
1.OAuth & Permissionsを選択する
2.ScopesのSelect Permission Scopesで必要なスコープを選択する
今回は、SlackAPIのchat.postMessage
を使用しているので、chat:write:bot
とchat:write:user
の2つを選択します。
他のスコープ一覧は公式ドキュメントを確認してください。
3.Save Changesボタンを選択して、スコープ設定を保存する
1.OAuth & Permissionsに戻り、Install App to Workspaceボタンを押す
2.許可するボタンを押す
許可するボタンを押すと、OAuth & Permissionsにアクセストークンが表示されるようになります。
[非推奨]レガシートークンを使う
レガシートークンは、Slackのほぼすべての機能を使えるトークンです。
公式で使用することを推奨されていませんが、ワークスペースに接続されるアプリ数を抑えたり(Slack API Testerの1つだけで済む)、とりあえずSlackAPIの動作確認をしたい場合に重宝します。
ページの中盤の方にあるCreate tokenボタンをクリックして、GASからメッセージを投稿したいワークスペースのレガシートークンを作成します。
チャンネルIDを取得する
ブラウザ版Slackの場合
https://app.slack.com/client/ワークスペースID/チャンネルID
デスクトップアプリケーション版Slackの場合
https://xxxxx.slack.com/messages/チャンネルID
投稿ユーザー設定
SlackAPIのchat.postMessage
には、投稿するユーザーを『アカウント』と『Bot』の2パターンに切り分けられることができるパラメータが用意されています。
アカウントで投稿する
実際のアカウントでメッセージを投稿したい場合は、chat.postMessage
のas_user
パラメータの値をtrue
にしてURLを渡します。
var payload = {
"token" : "アクセストークン",
"channel" : "チャンネルID or チャンネル名",
"text" : "あいうえおかきくけこ",
"as_user" : true // デフォルト:false
};
Botで投稿する
Botでメッセージを投稿したい場合は、chat.postMessage
のusername
パラメータにBotの名前とicon_emoji
パラメータにBotのアイコンをセットして、URLを渡します。
:
で囲む文字列は英語でなくてはいけません。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:"
};
特定のユーザーに通知|@ユーザー名(表示名)
https://app.slack.com/team/メンバーID
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アプリの開発や仕事の効率化に活かしてくださいーー。
それでは