Slack APIでメッセージ送信

定期的に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](https://api.slack.com/methods/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](https://qiita-image-store.s3.amazonaws.com/0/53476/db7832c6-6348-00b0-e067-abf3d4d02d7c.png)

### ■「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](https://qiita-image-store.s3.amazonaws.com/0/53476/b1a1ff42-4867-17a0-4592-da43900dba5f.png)

### ■「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](https://qiita-image-store.s3.amazonaws.com/0/53476/7b028bf5-04f2-869c-16d1-6562771019a2.png)

### ■「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](https://qiita-image-store.s3.amazonaws.com/0/53476/0bcbf2f6-da65-a11a-092d-79ecc0ea521c.png)

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