Carpe Diem

備忘録

Slackアプリで開発する時によく参照するもの

概要

自分がSlackアプリで開発する時によく参照するものをまとめました。

メッセージ

改行

https://api.slack.com/reference/surfaces/formatting#line-breaks

コード

こんにちは\nご機嫌いかが

結果

こんにちは
ご機嫌いかが

チャンネルへのリンク

https://api.slack.com/reference/surfaces/formatting#linking-channels

コード

フォーマットは<#{チャンネルID}>です。

こんにちは、<#C123ABC456>に来てください。

チャンネルIDの確認方法

結果

ユーザーへのメンション

https://api.slack.com/reference/surfaces/formatting#mentioning-users

コード

フォーマットは<@{メンバーID}>です。

こんにちは、<@U012AB3CD>さん

※前後に半角スペースは無くてもOKでした

メンバーIDの確認方法

結果

グループへのメンション

https://api.slack.com/reference/surfaces/formatting#mentioning-groups

コード

フォーマットは<!subteam^{グループID}>です。

こんにちは、<!subteam^SAZ94GDB8>チームさん

※前後に半角スペースは無くてもOKでした

グループIDの確認方法

結果

@here, @channel

https://api.slack.com/reference/surfaces/formatting#special-mentions

コード

こんにちは、<!here>
こんにちは、<!channel>

※前後に半角スペースは無くてもOKでした

結果

Attachments

AttachmentsはSlackメッセージをよりインタラクティブで視覚的に魅力的にするための機能です。

https://api.slack.com/reference/surfaces/formatting#when-to-use-attachments

しかし現在ではDeprecatedなので、もう使わないことが推奨されます。
ただし左にカラーバー(色の付いた縦棒)が使えるのは現状attachmentsだけです。

{
  "text": "",
  "blocks": [],
  "attachments": [
    {
      "color": "#00FF00",
      "blocks": []
    }
  ]
}

There is one exception, and that's the color parameter, which currently does not have a block alternative. If you are strongly attached (🎺) to the color bar, use the blocks parameter within an attachment.

ref: https://api.slack.com/messaging/attachments-to-blocks#direct_equivalents

ちなみに後述のBlocksとは共存できます。

Blocks

BlocksはAttachmentsの後に生まれたSlackのメッセージをより柔軟に構築できるように設計されたUIフレームワークです。
テキスト、画像、ボタン、セレクターなどさまざまなタイプのブロックを組み合わせて、よりリッチでインタラクティブなメッセージを作成することができます。

https://app.slack.com/block-kit-builder/

で試せます。

Goで次のように組み立てることができます。

func main() {
        client := NewClient(slack.New(token))
        opts := []slack.MsgOption{
                slack.MsgOptionUsername("テストボット"),
                slack.MsgOptionBlocks(
                        slack.SectionBlock{
                                Type: slack.MBTSection,
                                Text: &slack.TextBlockObject{
                                        Type: slack.MarkdownType,
                                        Text: fmt.Sprintf("こんにちは、<@%s>さん", userID),
                                },
                        },
                        slack.SectionBlock{
                                Type: slack.MBTSection,
                                Text: &slack.TextBlockObject{
                                        Type: slack.MarkdownType,
                                        Text: "これはテストです",
                                },
                        },
                ),
        }
        resp, _, err := client.cli.PostMessage(channelID, opts...)
        if err != nil {
                log.Fatal(err)
        }
        log.Printf("Message sent: %v", resp)
}

※前述のメンションやリンクは、Goならslack.MarkdownTypeじゃないといけません。

アイコン

別記事にまとめました。

christina04.hatenablog.com

アプリをチャンネルから消したい

アプリはチャンネル詳細のメンバーに載っておらず、そこから消すことはできず地味に削除方法に困ったりしますが、

/remove アプリ名

で簡単に消せます。

まとめ

自分がSlackアプリを開発する際によく参照するものをまとめました。
都度追加すると思います。