Help us understand the problem. What is going on with this article?

Slack APIでメッセージ送信

More than 3 years have passed since last update.

定期的にSlackへメッセージを送ったり、
ある条件を満たした時にSlackへメッセージを送信するといったことを実現したい場合、
デフォルトで備わっているReminderやSlackbotを使って実現できなくはないですが、
少し凝ったことをしたいときには少し不便です。

そこで今回は、SlackのAPIを使ってメッセージを送信したいと思います。

APIを実行するためには「Token」が必要

  1. https://api.slack.com/web にアクセス
  2. 「Generate test tokens」をクリック
  3. 「Create token」をクリック
  4. 作成された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キャプチャ

image

■「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キャプチャ

image

■「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キャプチャ

image

■「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キャプチャ

image

以上、Slack API(chat.postMessage)の使用方法でした。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした