ぶていのログでぶログ

思い出したが吉日

hubot-slackでattachmentsを使う

この記事は、Pepabo Advent Calendar 2015の3日目の記事です。 昨日は私のプロンプトにランダムに絵文字を表示すると楽しい 😄 でした。


現在、 2015年12月3日の25時です!!!

hubot-slackでAttachmentsを使う方法を共有します!

Attachmentsとは?

Attachmentsとは何か? SlackのIntegrationで見られるリッチな表示になっているメッセージです。 例えば、↓のような表示です。

通常、hubot-slackで msg.send すると簡単なテキストしか送信できませんが、 Attachmentsを使うことで↑のようなリッチなテキストを送信することができます!

対象のバージョン

hubot-slackのv2系では使えていたようなのですが、v3系になってこの機能は削除されたようです。。 しかし、沢山の要望があったのかv3.3.0から復活しています。

github.com

書き方

msg.send の代わりに robot.emitを使います。

robot.emit 'slack.attachment',
    # msg.messageは必須
    message: msg.message
    content: [{
        # see https://api.slack.com/docs/attachments
        text: "Attachment text"
        fallback: "Attachment fallback"
        fields: [{
            title: "Field title"
            value: "Field value"
        }]
    },
    {
        pretext: "[Pretext] *bold text* _italic text_ `fixed-width text`"
        color: "#439FE0"
        mrkdwn_in: ["text", "pretext", "fields"]
        text: """
        ・ *bold test*
        ・ _italic text_
        ・ `fixed-witdh text`
        > block quote
        ```
        #include <iostream>
        using namespace std%3B
        void main() {
            cout << \"hello world\" << endl%3B
        }
        ```
        """
        fields: [{
            title: "Field 1"
            value: "*bold text* _italic text_ `fixed-witdh text`"
            short: 1
        },{
            title: "Field 2"
            value: "*bold text* _italic text_ `fixed-witdh text`"
            short: 1
        }]
    },

使用できるパラメータはSlackのドキュメントに詳しく書かれています。 Attachments | Slack

他アダプター時のフォールバック

msg.send していた部分はそのまま robot.emit に書き換えてしまうと、 hubot-slackアダプタ以外で動作しているときにエラーとなってしまいます。 (例えば、CLIで実行した時とか)

そこで以下のようにAdapterがhubot-slackの時のみ robot.emit を使うようにすると良いと思います。

unless robot.adapter instanceof slack.SlackBot
    # hubot-slack以外の場合はmsg.send
    msg.send "hoghoge"
else
    # hubot-slackの時はattachmentsを使う
    robot.emit 'slack.attachment',
        message: msg.message
    -- -- snip -- --

まとめ

Attachmentsを使うとリッチなテキストをbotから送信できるようになります。 単純なテキストだとどうしても味気ない感じになってしまいますが、 Attachmentsを使うことで見栄えを良くすることができると思います!

Let's enjoy !