Q&A

Messaging APIでリッチメニューとユーザーをリンクしても、リッチメニューが切り替わらない

以下のドキュメントに沿って特定のユーザーに対して、リッチメニューをリンクするようにAPIを実行 https://developers.line.biz/ja/reference/messaging-api/#link-rich-menu-to-user

するとステータスコード200OKと空のJSONオブジェクトが返却されました。 以下のドキュメントによると、Messaging APIから200OKの返却はリクエストの成功を意味する記載があります。 https://developers.line.biz/ja/reference/messaging-api/#status-codes

しかし、確認するとリッチメニューが変わっておりません。試しに以下ドキュメントを参考に https://developers.line.biz/ja/reference/messaging-api/#get-rich-menu-id-of-user ユーザーに紐付いたリッチメニューのIDを取得すると「the user has no richmenu」というメッセージが返されます。

そこで疑問点が2つあります。 1.200OKと空のJSONオブジェクトが返却されたにもかかわらず、成功しない原因はなにか。 2.上記の手順で期待動作するbotと、期待動作しないbotがあるが、botの設定によるものなのか。

※期待動作しないbotは何度やっても期待動作せず、期待動作するbotは何度やっても期待動作します。

以上、どなたか本件に関してご存知の情報ありましたらご教授いただけないでしょうか。 LINEに直接問い合わせもしておりますが、素っ頓狂な回答しかもらえず、且つ回答までに毎回1週間以上かかっており困っております。。 LINE側のバグの様な気がしてならないのですが、こちらの見落としでしたらすいません。。

  • 1
  • 2
  • 2263
  • twitter facebook

近しい事象に直面したので直接的ではないかもですが回答と備忘録を残します。

まず期待動作するしないで別れるのは、削除や作成を繰り返す中でリッチメニューidと「リッチメニューのエイリアスと紐づくリッチメニューid」が一致しない(もしくは削除済みのリッチメニューidがエイリアスと紐づいてしまっている)などで不整合が出たからではないかと推察します(自分の場合はこの状態になっており、デフォルトのリッチメニューの変更すら反映されない状態に陥りました)。

これは全てのリッチメニューとエイリアスを削除して作り直し、新しいリッチメニューをデフォルトのリッチメニューとして設定しなおし、ユーザーが友達追加し直すことで元に戻りました。

【回答、というか推察終わり。ここからは備忘録】

デフォルトのリッチメニューが適用されてリッチメニューが表示されているユーザーは、そのリッチメニューとリンクされている扱いにならず、ユーザーのリッチメニューのIDを取得しても「the user has no richmenu」というエラーメッセージとともに404エラー扱いになります。

200 OK が返ってきていればリンクは基本されると思います。 がもしリッチメニューの内容の更新をしたくて、リッチメニューのcreate/deleteをやっている場合は特殊な挙動をしました(LINE APIにはリッチメニューのupdate API がない)。

  1. リッチメニューとユーザーのリンクを解除
  2. 新しいリッチメニューとユーザーをリンク
  3. 古いリッチメニューを削除

本来上記の順序でリンクのし直しをしないといけないのですが、リンクを解除せずにリッチメニューを削除した場合はユーザーにデフォルトのリッチメニューが強制適用されます。単純にリンクするだけであればリンクの解除は不要なはずですが、リッチメニューの削除が行われる場合は先に解除して新しい方とリンクし直し、をやっておかないとデフォルトのリッチメニューに変更されてしまうようです。

【余談】 自分のブログに書く方が広告収益も入るしそうしようかと思いましたが、検索で辿り着く人が多いのはこっちだろうと思いこっちに書きました。ただこう言った貢献に対する報いは通知こない「いいね」だけ…。Web3.0になれば投稿はみんなで1つの場所に、しかし所有権や収益化は自分にという世界が実現できそうやなぁ。

  • 0

「期待動作しないbot」からメッセージ送信した場合、メッセージが受信できるでしょうか。もしできないならユーザIDが間違っていると思います。ユーザIDはchannelごとに変わるので、別のchannelで入手したユーザIDは他のchannelで使用できないです。

  • 3
Are you sure? question.vm