今年5月、グループ/トークルーム内のトークを発信したユーザのIDをLINE Messaging APIで取得できるようになりましたが、ユーザIDからそのユーザのプロファイル*1を取得できないケースがありました。
新たに7月に追加されたエンドポイントでは、グループ/ルームのメンバーであれば制限なくプロファイルを取得できるようになりました。
過去記事のフォローアップとして、新エンドポイントについてまとめます。
Get profile APIの制約
ユーザのプロファイルを取得するには、GET https://api.line.me/v2/bot/profile/{userId}
(golang SDKではlinebot.Client.GetProfile()
)を使用します。
しかし、このAPIでは、指定したユーザがBotと友だち登録した状態でないと404エラー(golang SDKではlinebot: APIError 404 Not found
)が返ります*2。
グループ/ルームにメンバーとしてBotを追加して運用するケースにおいて、「すべてのメンバーがBotとの友だち登録を必要とする」というのは現実的ではありませんでした。
この(従来の)方式についての詳細は、下記エントリの「プロファイル取得の制限」セクションを参照してください。
Get group/room member profile API
7月に、グループ/ルームメンバーのプロファイルを取得するためのエンドポイントが追加されました(golang SDKへの追加は9月)。
- グループの場合、
GET https://api.line.me/v2/bot/group/{groupId}/member/{userId}
(golang SDKではlinebot.Client.GetGroupMemberProfile()
) - トークルームの場合、
GET https://api.line.me/v2/bot/room/{roomId}/member/{userId}
(golang SDKではGetRoomMemberProfile()
)
こちらを使用すれば、友だち登録状況に関係なくプロファイルを取得できます。パラメタとして、対象のユーザIDに加えて、グループ/ルームのIDが必要です。
友だち登録していないユーザ、また、友だち登録後ブロックしたユーザで試しましたが、いずれもこのAPIでプロファイルを取得できました。
簡単な(汚い)サンプルコードを公開していますので、参考にしてください。
Get group/room member user IDs API
7月の更新では、グループ/ルームのメンバー全員のユーザIDを取得できるAPIも追加されています。しかしこちらは「認証済みLINE@アカウントまたは公式アカウント専用機能」とのことで、未検証です。
参考
- https://developers.line.me/en/news/2017/07/
- https://developers.line.me/ja/docs/messaging-api/reference/#get-group-member-profile
- https://developers.line.me/ja/docs/messaging-api/reference/#get-room-member-profile
関連書籍

LINE BOTを作ろう! Messaging APIを使ったチャットボットの基礎と利用例
- 作者: 立花翔
- 出版社/メーカー: 翔泳社
- 発売日: 2017/05/12
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る