CrystalでSlackに通知を送る


SlackにはAPIが備わっており,APIを使えば簡単にSlackに 通知を送ることが出来ます.

今回はIncoming WebHooks APIを使ってCrystalでSlackに通知を送る方法を紹介します.

手順としては次のようになります.

  1. Webhook URLの発行
  2. Wbehook URLに対してpostする

1. Webhook URLの発行

まずWebhook URLを発行します.

Slackのアプリケーションから通知を送りたいチームの設定の Apps & Custom Integrations を開きます.

まだチームに追加していない場合はIncoming WebHooksをチームに追加しましょう.

Incoming WebHooksの設定ページで 「Add Configuration」 ボタンを押し, 通知を送りたいチャンネルを選択することでWebhook URLが発行できます.


2. Webhook URLに対してpostする

Slackに通知を送るには拙作のslack-incoming-webhooksを使います.

インストール

shard.ymlのdependenciesに以下を追加してください.

slack-incoming-webhooks:
  github: CastellaFactory/slack-incoming-webhooks
  branch: master

追加できたら

shards install

もしくは

crystal deps

でインストールできます.


簡単な使い方

require "slack-incoming-webhooks"

slack = Slack::IncomingWebhooks.new "Your WEBHOOK_URL"

slack.post "Hello"

img1

また,通知を送るチャンネルやユーザ名,アイコンの絵文字なども指定することが出来ます.

slack = Slack::IncomingWebhooks.new "Your WEBHOOK_URL", channel: "#hoge",
                                                        username: "Bot",
                                                        icon_emoji: ":ghost:"

img2

指定できるオプションはこちらを参照してください.


Attachments

attachmentsを使うことで, よりリッチなフォーマットのテキストを送ることが出来ます.

require "slack-incoming-webhooks"

slack = Slack::IncomingWebhooks.new "Your WEBHOOK_URL"

attachment = Slack::Attachment.new author_name: "hoge",
                                   color: "#36a64f",
                                   title: "TITLE",
                                   title_link: "https://www.google.com"

slack.post "text with attachments", attachments: [attachment]

img3

指定できるオプションはこちらを参照してください.


所感

初めてのCrystalでしたが, ドキュメントを読みながらなんとか動くところまでいけました.

(なぜかRubyではなくCrystalから入ってしまった)

Crystal(やRuby)のことを分かっていないので,良くない点が多々あるとは思います.

“ここがよくない”

“ここはこうしたほうが良い”

など,コメントがありましたら CastellaFactory/slack-incoming-webhooksまでお願いします.