定期的にSlackへメッセージを送ったり、
ある条件を満たした時にSlackへメッセージを送信するといったことを実現したい場合、
デフォルトで備わっているReminderやSlackbotを使って実現できなくはないですが、
少し凝ったことをしたいときには少し不便です。
そこで今回は、SlackのAPIを使ってメッセージを送信したいと思います。
APIを実行するためには「Token」が必要
- https://api.slack.com/web にアクセス
- 「Generate test tokens」をクリック
- 「Create token」をクリック
- 作成されたTokenをメモ(API実行には必ず必要です。)
使用するAPI:chat.postMessage
その名の通り特定のChannelやユーザーに向けメッセージを送信するAPIです。
使用方法
// Webブラウザで実行
https://slack.com/api/chat.postMessage?{Arguments}
or
// コマンドラインで実行(POST or GET)
$ curl -XPOST -d '{Arguments}' 'https://slack.com/api/chat.postMessage'
or
$ curl 'https://slack.com/api/chat.postMessage?{Arguments}' ★要urlエンコード
主に使用するパラメーター(Arguments)
パラメーター名 | サンプル | 必須/任意 | 詳細 |
---|---|---|---|
token | xxxx-xxxxxxxxx-xxxx | 必須 | 上記で説明したToken |
channel | channel_name | 必須 | channel名 or @{user} |
text | Hello world | 必須 | 送信したいメッセージ |
as_user | true | 任意 | trueの場合、差出人がToken発行ユーザーとなる。falseの場合Botが差出人となる。 |
username | My Bot | 任意 | as_user=false時のBot名 |
icon_url | http://lorempixel.com/48/48 | 任意 | as_user=false時のBotアイコン |
attachments | [{"pretext": "pre-hello", "text": "text-world"}] | 任意 | 添付ファイル |
その他のパラメーターについては公式ページを参照してください。
https://api.slack.com/methods/chat.postMessage
実行例
■「test」チャンネルに「Hollo World」とメッセージを送信
パラメーター「username」を指定しない場合、Bot名はデフォルトの「Slack API Tester」となる。
実行コマンド
$ curl -XPOST -d 'token={token}' -d 'channel=test' -d 'text=Hello World' 'https://slack.com/api/chat.postMessage'
レスポンス
{
"channel": "C2HDVFWM7",
"message": {
"bot_id": "B2HDQ7VV3",
"subtype": "bot_message",
"text": "Hello World",
"ts": "1475138775.000006",
"type": "message",
"username": "Slack API Tester"
},
"ok": true,
"ts": "1475138775.000006"
}
Slackキャプチャ
■「test」チャンネルに「HelloWorldBot」という名前のBotで「Hello World!!」とメッセージを送信
Bot名が「HelloWorldBot」に変わる。
実行コマンド
$ curl -XPOST -d 'token={token}' -d 'channel=test' -d 'text=Hello World!!' -d 'username=HelloWorldBot' 'https://slack.com/api/chat.postMessage'
レスポンス
{
"channel": "C2HDVFWM7",
"message": {
"bot_id": "B2HDQ7VV3",
"subtype": "bot_message",
"text": "Hello World!!",
"ts": "1475140069.000007",
"type": "message",
"username": "HelloWorldBot"
},
"ok": true,
"ts": "1475140069.000007"
}
Slackキャプチャ
■「test」チャンネルに自分のユーザーで「@channel Hello World!!!!」とメッセージを送信
as_user=trueを付与すると差出人がBotではなく、Tokenを発行したユーザー(自分のユーザー)名でメッセージを送信できる。
また、チャンネル全体に通知する時につかう@channel を使いたい場合は、
Slack特有の記法に則らなければならない。
通知先 | 記法 | 備考 |
---|---|---|
@channel | <!channel> | チャンネル全体 |
@here | <!here> | チャンネルのActiveユーザー全体 |
@user | <@user> | 特定のユーザー |
※参考:http://qiita.com/Yinaura/items/539e59149b41b9d516c1
実行コマンド
$ curl -XPOST -d 'token={token}' -d 'channel=test' -d 'text=<!channel> Hello World!!!!' -d 'as_user=true' 'https://slack.com/api/chat.postMessage'
レスポンス
{
"channel": "C2HDVFWM7",
"message": {
"bot_id": "B2HDQ7VV3",
"text": "<!channel> Hello World!!!!",
"ts": "1475141074.000008",
"type": "message",
"user": "{user}"
},
"ok": true,
"ts": "1475141074.000008"
}
Slackキャプチャ
■「test」チャンネルに「猫Bot」という名前・猫アイコンのBotで「ニャ~ニャ~」とメッセージ送信
設定したいアイコンのURLを下記のように設定する。
icon_url=https://www.pakutaso.com/shared/img/thumb/HIRAorenobasyoosu_TP_V.jpg
実行コマンド
$ curl -XPOST -d 'token={token}' -d 'channel=test' -d 'text=ニャ~ニャ~' -d 'username=猫Bot' -d 'icon_url=https://www.pakutaso.com/shared/img/thumb/HIRAorenobasyoosu_TP_V.jpg' 'https://slack.com/api/chat.postMessage'
レスポンス
Slackの画像保存先ってAWS S3なんですね!知らなかった。
{
"channel": "C2HDVFWM7",
"message": {
"bot_id": "B2HDQ7VV3",
"icons": {
"image_48": "https://s3-us-west-2.amazonaws.com/slack-files2/bot_icons/2016-09-29/85490051489_48.png"
},
"subtype": "bot_message",
"text": "ニャ~ニャ~",
"ts": "1475141746.000009",
"type": "message",
"username": "猫Bot"
},
"ok": true,
"ts": "1475141746.000009"
}
Slackキャプチャ
以上、Slack API(chat.postMessage)の使用方法でした。