背景
という状況の時に、1つのslackアプリでもメッセージ投稿でアイコンを変更する方法について紹介します。
環境
あらかじめslackアプリを用意しておきます。
見ての通りデフォルトのアプリアイコンには猫を設定しています。
方法
方法としては2つの対応をするだけです。
- slackアプリに
chat:write.customize
権限をつける - 投稿時にIcon変更のオプションをつける
slackアプリにchat:write.customize
権限をつける
OAuth & Permissions
にある、
Scopes
で、通常メッセージ投稿のためにchat:write
が付いていると思いますが、それに加えてchat:write.customize
権限をつけます。
この状態です。
2. 投稿時にIcon変更のオプションをつける
次に実装で
などを使います。
package main import ( "fmt" "log" "github.com/slack-go/slack" ) type Client struct { cli *slack.Client } func NewClient(cli *slack.Client) *Client { return &Client{ cli: cli, } } const ( token = "xoxb-xxx-xxx-xxx" channelID = "xxx" imgURL = "https://xxxx" ) func main() { client := NewClient(slack.New(token)) resp, _, err := client.cli.PostMessage(channelID, slack.MsgOptionText("Hello", false), // slack.MsgOptionIconURL(imgURL), slack.MsgOptionIconEmoji(":wave:"), ) if err != nil { log.Fatal(err) } fmt.Println(resp) }
絵文字は次のようなサイトでどんなものが使えるかを確認できます。
🎁 Emoji cheat sheet for GitHub, Basecamp, Slack & more
動作確認
期待通りデフォルトのアイコン以外のアイコンでメッセージが投稿されています。
※注意として投稿間隔が短いとUI上表示されないので動作確認できないです
その他
IconURLとIconEmoji両方設定するとEmojiが勝つ
次のように両方設定した場合だと、IconEmojiの方が勝ちます。
resp, _, err := client.cli.PostMessage(channelID, slack.MsgOptionText("Hello", false), slack.MsgOptionIconURL(imgURL), slack.MsgOptionIconEmoji(":wave:"), )
ドキュメントにも書いてあります。
ref: chat.postMessage method | Slack
まとめ
SlackのBotメッセージを投稿する際にアイコンを都度変更する方法を紹介しました。