概要
SlackのAPIを使用してメッセージを送信するまでの操作メモです。
環境
- [Slack] (https://slack.com/) (Free plan).
- curl (Windows版)
参考
- [Welcome to the Slack API] (https://api.slack.com/)
API
Slackの外部からメッセージを送信するにはWEB APIを使用する方法と、Incoming webhooksを使用する方法があります。
[WEB API] (https://api.slack.com/web)
The Slack APIs allow you to integrate complex services with Slack to go beyond the integrations we provide out of the box.
WEB APIを利用するには事前にTOKENを取得する必要があります。
用意されているメソッドは[API Methods] (https://api.slack.com/methods)で確認できます。
TOKENの取得
左側メニューのチーム名をクリックしコンテキストメニューからConfigure Integrationsを選択します。
IntegrationsページのAll ServicesタブにあるSlack API(ページの下の方にあります)をクリックします。
左側メニューのAPIS -> Web APIをクリックします。
AuthenticationのCreate tokenボタンをクリックしてTokenを取得します。
auth.test
tokenのテストができるAPIが用意されていますので、それを使って確認してみます。
curl -XPOST "https://slack.com/api/auth.test?token=<TOKEN>&pretty=1"
または
curl -XPOST -d "token=<TOKEN>" -d "pretty=1" "https://slack.com/api/auth.test"
response
okキーの値がtrueであれば成功です。
chat.postMessage
chat.postMessage APIを使ってメッセージを送信してみます。
tokenパラメータに取得したトークンを指定します。
curl -XPOST "https://slack.com/api/chat.postMessage?token=<TOKEN>&channel=%23general&text=Hello%20@rubytomato&username=rubybot"
- URLはパーセントエンコードする必要があります。
または
curl -XPOST -d "token=<TOKEN>" -d "channel=#general" -d "text=Hello @rubytomato" -d "username=rubybot" "https://slack.com/api/chat.postMessage"
response
[Incoming WebHooks] (https://api.slack.com/incoming-webhooks)
Incoming Webhooks are a simple way to post messages from external sources into Slack. They make use of normal HTTP requests with a JSON payload, which includes the message and a few other optional details described later.
Incoming WebHooksを使用するには事前にIntegration serviceに登録する必要があります。
Integration serviceに登録
Slackの左側メニューのチーム名をクリックしコンテキストメニューからConfigure Integrationsを選択します。
IntegrationsページのAll ServicesタブにあるIncoming WebHooks(ページの下の方にあります)をクリックします。
Post to Channelでchannelを選択して登録します。
登録するとWebhook URLが発行されますので、そのURLに対してメッセージ登録のHTTPリクエストを発行します。
Webhook URLは下記のような形式です。
https://hooks.slack.com/services/Txxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxx
メッセージの送信
channelキーを省略するとIncoming WebHooksを登録するときに選択したchannelがデフォルトの送信先となりますが、channelキーを上書きすることで他のchannelへメッセージを送信することができます。
curl -X POST "<Webhook URL>" -d @message.json
payload={
"channel": "#general",
"username": "webhookbot",
"text": "This is posted to #general and comes from a bot named webhookbot.",
"icon_emoji": ":ghost:"
}
response
Direct Message
channelキーに@ユーザー
を指定するとそのユーザーへDirect Messageを送信できます。
"channel": "@rubytomato"
メモ
curl
Windows版のcurlでhttpsに対してリクエストを送ると下記のエラーが発生することがあります。
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
このエラーが発生する場合は、http://curl.haxx.se/docs/caextract.htmlにアクセスして最新の証明書を取得します。
このページのca-bundle.crtというテキストリンクをクリックしてその内容をcurl-ca_bundle.crtとしてcurl.exeと同じディレクトリに保存します。
API TEST
curl -XPOST "https://slack.com/api/api.test"
{"ok":true}
クエリにerrorというパラメータが存在するとリクエストは必ず失敗するようになります。
curl -X POST "https://slack.com/api/api.test?error=test&foo=bar&pretty=1"
または
curl -X POST -d "error=test" -d "foo=bar" -d "pretty=1" "https://slack.com/api/api.test"
{
"ok": false,
"error": "test",
"args": {
"error": "test",
"foo": "bar",
"pretty": "1"
}
}
この形式のリクエストはできないようです。
curl -X POST --data-urlencode "{\"error\":\"test\", \"foo\":\"bar\", \"pretty\":1}" "https://slack.com/api/api.test"
Slackのメモ
Public Channel
This will create a new public channel that anyone on your team can join.
If you need this conversation to be private, you should create a new Private Group instead.
チームに招待されたメンバーであればだれでも参加できるチャネルです。
Direct Message
Direct messages are private, 1-to-1 messages. Once you invite people, you'll be able to chat with them here.
指定するユーザーと直接メッセージの交換ができます。
Private Group
A private group is only visible to its members, and only members of a private group can read or search its contents.
招待したメンバーしか参加できないグループです。
Invite People
ユーザーには下記のroleがあり、roleによって操作できる内容が異なります。
- Owner
- Admin
- Member
- Restricted Account
- Single-Channel Guest
Full Members
Full Members can access messages and files in any public channel and access the full team directory.
Team members have access to standard features like joining any public channel, uploading files, and other optional abilities. This is the default for new people added to your team.
Restricted Accounts
Restricted Accounts see a partial team directory and can only access messages and files from selected channels and groups.
These accounts can access only a limited set of channels. Restricted accounts are not able to view the entire team directory or search messages and files outside of their permitted channels.
Single-Channel Guest
Single-Channel Guests can only access messages and files in a single channel. This account type is free.
Guests are a type of Restricted Account that are only allowed to join a single channel or group.
- Free planではRestricted Accounts、Single-Channel Guestは利用できません。
- 有料planではRestricted Accounts、Single-Channel Guestを利用できます。
Integrations
Integration serviceを登録するにはチーム名をクリックしコンテキストメニューから"Configure Integrations"をクリックします。
free planでは登録数に制限があります。
- Free planでは
10 service integrations
。 - 有料planでは
Unlimited service integrations
。
下記もIntegration Serviceの1つなので使用するなら有効にする必要があります。
- Incoming WebHooks
- Outgoing WebHooks
- Slackbot
Desktop Apps for Windows
[Desktop Apps] (https://slack.com/apps)よりダウンロードできます。