読者です 読者をやめる 読者になる 読者になる

ハウテレビジョン開発者ブログ

『外資就活ドットコム』を日夜開発している技術陣がプログラミングネタ・業務改善ネタ・よしなしごとについて記していきます。

Slack WebAPIでナイスなフォーマットのメッセージを送る

こんにちは。xyz_iです。

弊社ではチャットツールとしてSlackを使用しています。 メンバー同士のやりとりはもちろん、いろいろなイベントの通知先としてもとても重宝しています。 例えば、WebAPIを使い、Capistranoによるデプロイの実行時にSlack通知する方法のように使ったりもしています。

この記事は、Slack WebAPIでメッセージを投稿するとき、Message Attachmentsを使うといいことがありますよというお話です。

WebAPIにおけるメッセージ

Slackにメッセージを投稿する際、メッセージのフォーマットとして以下のような選択肢があります。

  1. プレーンテキスト
  2. Markdownテキスト
  3. Message Attachments

おそらく人間がSlackを使う場合は、1または2の書き方をすると思いますが、 githubなどの通知BOT(下の画像参照)を見てみると、より進んだ感じのメッセージになっていることがわかります。 このようなフォーマットで表示させるには、3のMessage Attachmentsを使います。

f:id:xyz_i:20150409095744p:plain

Message Attachments

Message Attachmentsは、メインのテキスト以外にもいろいろなメタ情報を含むことができます。 例えば、以下のようなものです。

  • pretext(概要などを入れたりする)
  • 著者(例えば、「ブログに記事が投稿されました」という通知の場合、ブログの作者)
  • タイトル
  • 画像

これらを決められた形のJSONフォーマットでWebAPIに送信することで、Slackがいい感じに処理してくれます。

やってみる

百聞は一見にしかずということで、とりあえずやってみます。

Incoming WebHooksを設定

https://○○○.slack.com/services/new(○○○は適宜変更してください。)にアクセスして、Incoming WebHooks欄のAddボタンを押します。

f:id:xyz_i:20150409102456p:plain

次の画面でチャンネルを選択すると、Webhook URLができていると思います。 それがAPIのエンドポイントになりますので、大事にメモしておいてください

メッセージの投稿

同じ画面にいろいろな説明と下のようなExampleがあると思います。

一度それを実行してみましょう。 (読みやすいように少し整形してあります。)

curl -X POST --data-urlencode\
  'payload={
    "channel": "#testroom",
    "username": "webhookbot",
    "text": "This is posted to #testroom and comes from a bot named webhookbot.",
    "icon_emoji": ":ghost:"
  }' \
  <Webhook URL>

okと返って来れば成功です。 以下のようなメッセージが投稿されていると思います。

f:id:xyz_i:20150409110532p:plain

Message Attachmentsで投稿

先ほどのcurlコマンドをベースに、メッセージの本文をMessage Attachmentsを使って書きなおしてみます。

curl -X POST --data-urlencode \
  'payload={
    "channel": "#testroom", 
    "username": "webhookbot", 
    "attachments": [
      {
        "fallback": "ブログに記事が投稿されました。(http://blog.howtelevision.co.jp/entry/2015/04/09/xxxxxx)",
        "color": "#36a64f",
        "pretext": "ブログに記事が投稿されました。",
        "author_name": "xyz_i",
        "author_link": "http://howtelevision.jp/",
        "title": "Slack WebAPIでナイスなフォーマットのメッセージを送る",
        "title_link": "http://blog.howtelevision.co.jp/entry/2015/04/09/xxxxxx",
        "text": "(ブログの冒頭や本文を全部入れても良いかもしれません。)"
      }
    ],
    "icon_emoji": ":ghost:"
  }' \
  <Webhook URL>

f:id:xyz_i:20150409110541p:plain

誰が何をしたかが明確に表せていると思います。 (画像ではわからないですが「xyz_i」という部分にもリンクがついています。)

今回はメッセージの本文がどう変わるかというところを強調したかったため、webhookbotという名前や:ghost:アイコンは変更していませんが、通知する内容によって適宜変更すると、より適切なメッセージにできます

まとめ

SlackのMessage Attachementsを使うことにより、メッセージをリッチにすることができます。 メタ情報が加わることでメッセージの情報量を整然と増やすことができ、色情報が加わることでひと目で何についての通知か(もしくは通知内容のステータスなど)認識できるようになります。

より良いSlackライフを!