Slack API で @username メンションが通知されない問題の解決方法

Slack API で @username メンションが通知されない問題を解決する方法をご紹介します。

slack

原因) Slack API 仕様変更

Slack @username で通知されない問題の背景は Slack API 仕様変更によるものでした。

When evaluating messages to determine if your user or bot user is mentioned, look for a user ID, not a username.

A lingering farewell to the username | Slack

Slack API 仕様変更により @username ではなく @userID を使うべきということです。

正しい Slack @ メンション宛先の確認方法

Slack @userID の確認方法

https://api.slack.com/methods/users.list/test から @userID と @username を一覧で確認できます。

slack.com/api/users.list response 一部抜粋

{
    "ok": true,
    "members": [
        {
            "id": "UH3FW2ELW",
            "team_id": "T3491U6E5",
            "name": "youremail",
            "deleted": false,
            "color": "e7392d",
            "real_name": "Firstname Lastname",
            "tz": "Asia\/Tokyo",
            "tz_label": "Japan Standard Time",
            "tz_offset": 32400,
            "profile": {
                "title": "",
                "phone": "",
                "skype": "",
                "real_name": "Firstname Lastname",
                "real_name_normalized": "Firstname Lastname",
                "display_name": "changedname",
                "display_name_normalized": "changedname",
                "status_text": "",

“id”: “UH3FW2ELW” が @userID に対応する値です。自動発番です。

“name”: “youremail” が @username に対応する値です。Invite のとき Display Name に指定された値が使われます。Display Name を設定しなかった場合、Email Address の @ 以前が使われます。登録後に変更することはできません。

invite members to slack

Slack @username でも大丈夫

@userID だとソースコード上の視認性がイマイチだと思うので、個人的には @username を利用することにしています。上記の例だと @userID は @UH3FW2ELW で @username は @youremail です。

“id” と同様に “name” の部分も初回登録後に変更されることはありません。

登録後に、表示名 (Display Name) を変更しても “display_name” や “display_name_normalized” が変更されるだけで “name” はそのままです。

以上、Slack API 経由で @username メンションさせて生産性向上していきたい、現場からお送りしました。

参考情報