Q&A

任意のUIDのリストに対し、チャネルの友だちであるユーザにのみメッセージをマルチキャストしたい

前提・実現したいこと

Webhookを設定し、サーバサイドをJava SDKを使って実装しています。 任意の複数ユーザ(UID指定)に対してお知らせを一斉送信(マルチキャスト)するメソッドを実装したいです。

発生している問題・エラーメッセージ

LineMessagingClientのmulticast()を使うことで実現し、「全て正しいUID」のリストが指定された場合は送信されるのですが、不正なUIDが1件でも含まれていると下記Bad Requestとなり、他の正しいUIDにも送信されません(稀に、「不正なUID」が含まれていても、正しいUIDにのみ送信される場合があります。不正なIDが「UIDとしてのパターンは守れていそうな文字列(例えば、正しいUIDの一文字違い 等)」の時にこれが発生します)。

最終的には、下記2つ(①は必須、②はできれば)を実現・解決したいです。 ①不正なUIDがリストに含まれていても、そのうち正しいUIDにのみメッセージを正常にマルチキャストしたい ②①で送信できなかったUIDを特定したい

該当のソースコード

final LineMessagingClient client = LineMessagingClient
		.builder(channelToken)
		.build();
Multicast multicast = new Multicast(uids, messages);
client.multicast(multicast);

※uids = HashSet<String>{正しいUID①, 'xxx', 正しいUID②}

試したこと

・multicast()のレスポンスであるCompletableFuture<BotApiResponse>からレスポンス情報が取れるかと思いましたが、それらしい情報は取得できず。 ・multicast()の前に、事前にUIDリストに対して「当該チャネルの友だちかどうか」を検証することを考え手段を調べましたが、方法が見つけられず。

補足情報(FW/ツールのバージョンなど)

全体的にJava SDKのリファレンスが少ない認識なのですが、ここを参照すべしというものがあればご教示いただければ幸いです。

  • 0
  • 2
  • 548
  • twitter facebook

早速のご回答ありがとうございます。

基本的にAPIやwebhookからしかidを得ることはできないと思うのですが、「不正なid」はどこからやってくるのでしょうか。 ご指摘の通り、"基本的には"正しいUIDしか得られないのですが、DBに保存したUIDを使うケースを想定しており、(DBが書き換えられる以上は)よりセーフティに作りたかったという意図です。

リンクを頂いたリファレンスの記載は把握していました(質問に書いておらずすみません)が、期待と異なりbadrequestが返ってきたため、こちらに投稿させていただいた次第です。

正しかったとして、メッセージを送ることに問題がなければpushの結果を1件1件保存すれば良いと思います。 失敗していればmulticastと同様にbadrequestとなるはずです。 pushをループで使うという手ですね・・・!ありがとうございます。こちら試してみようと思います。

  • 0

基本的にAPIやwebhookからしかidを得ることはできないと思うのですが、「不正なid」はどこからやってくるのでしょうか。正しい使い方をしていればbadrequestにはならない気がします。 また、multicastのドキュメントを読むとhttps://developers.line.biz/ja/reference/messaging-api/#get-profile 、不正なidが含まれていてもステータスコード200が返ってくると書かれています。本当にbadrequestが返ってきましたか?

正しかったとして、メッセージを送ることに問題がなければpushの結果を1件1件保存すれば良いと思います。 失敗していればmulticastと同様にbadrequestとなるはずです。

  • 0
Are you sure? question.vm