やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

LINE Messaging APIでグループメンバーのプロファイルを取得する新API #linebot

今年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との友だち登録を必要とする」というのは現実的ではありませんでした。

この(従来の)方式についての詳細は、下記エントリの「プロファイル取得の制限」セクションを参照してください。

nowsprinting.hatenablog.com

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でプロファイルを取得できました。

簡単な(汚い)サンプルコードを公開していますので、参考にしてください。

github.com

Get group/room member user IDs API

7月の更新では、グループ/ルームのメンバー全員のユーザIDを取得できるAPIも追加されています。しかしこちらは「認証済みLINE@アカウントまたは公式アカウント専用機能」とのことで、未検証です。

参考

関連書籍

LINE BOTを作ろう!  Messaging APIを使ったチャットボットの基礎と利用例

LINE BOTを作ろう! Messaging APIを使ったチャットボットの基礎と利用例

*1:表示名、プロフィール画像URL、ステータスメッセージ

*2:以前は、友だち登録した後にブロックした場合でもプロファイルが取得できていましたが、現在はブロックしたら404が返るようになりました