2020.12.28
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
要点
Chatwrok API でダイレクトチャットに特殊な通知をしたい場合は、
https://api.chatwork.com/v2/contacts でコンタクト一覧が手に入るので、
そこにある該当アカウントの room_id にメッセージを送ります。
背景
- アカウント作成を ChatOps でやりたい
- パスワードも自動発行して、発行コマンドを叩いたユーザーにだけ通知させたい
たったこれだけです。
これだけですが、正式名称であるダイレクトチャットで探しても出ない出ない。
「Chatwork API ダイレクトチャット」などで Google 検索しても、「結局どうするの?」状態です。
私の探し方が悪いのかもしれませんが、このままだと癪なので、自分で方法を書くことにしました。
ダイレクトチャットへの送信方法
1. ダイレクトチャット用の部屋番号を取得
まずダイレクトチャット用の部屋番号を取得します。
というよりも、ここができたら後は幾らでもネット上に情報があります。
以下、 curl での実行例です。
curl -H "X-ChatWorkToken: APIトークン" "https://api.chatwork.com/v2/contacts"
この結果、以下のような JSON がレスポンスとして返ってきます。
[
{
"account_id": 000000,
"room_id": 000000000,
"name": "チャットワーク",
"chatwork_id": "chatwork",
"organization_id": 000000,
"organization_name": "チャットワーク",
"department": "",
"avatar_image_url": "https://appdata.chatwork.com/avatar/ico_avatar_notfound.png"
},
.
.
.
]
ダイレクトチャットを送りたいアカウントのID と同じ account_id でフィルタリングを行い、
room_id を取得します。
jq で取得するならこうです。
curl -H "X-ChatWorkToken: APIトークン" "https://api.chatwork.com/v2/contacts" | jq ".[] | select(.account_id==ダイレクトチャットを送りたいアカウントのID)" | jq ".room_id"
2回パイプ噛ませる必要はない気もしますが、jq で複雑な条件のフィルタリングをしようとするとやり方を忘れるので、こうしています。
2. ダイレクトチャットを送信する
上で取得した部屋番号に送るだけです。
それ以外は通常の使い方のままです。
まとめ
Chatwrok API でダイレクトチャットに特殊な通知をしたい場合は、
https://api.chatwork.com/v2/contacts でコンタクト一覧が手に入るので、
そこにある該当アカウントの room_id にメッセージを送る!