固定メニュー

このドキュメントでは、プログラムを使って固定メニューをメッセージエクスペリエンスに追加する方法について説明します。

固定メニューのネスト

Android (v276以上)のMessengerアプリでは、固定メニューのネストがサポートされなくなります。メニュー項目のネストを含むページは、すべてのサーフェス(ウェブ、iOS、Android (v276以上))で、階層レベルのないリストとしてレンダリングされます。Metaでは、その方がMessengerの利用者にとってエクスペリエンスが向上すると考えています。メニューのネストのサポートは、グラフAPI v8.0のMessengerプロフィールAPIとカスタマーユーザー設定APIの両方から削除され、すべてのバージョンで2年以内に重要な変更が適用されます。

処理の概要

固定メニューを利用すると、営業時間、店舗情報、商品など、ビジネスの主な特徴についてのメニューを作成し、それを送信することができます。これは、利用者とビジネスとのMessengerスレッドに常に表示されます。

利用者がメニュー内の項目をクリックすると、postback Webhook通知がサーバーに送信されます。Webhook通知には、だれがどの項目を選択したかに関する情報が含まれます。この項目選択アクションにより、標準メッセージ時間枠が開きます。24時間以内に返信する必要があります。

コマンドが設定されている場合、固定メニューより優先されます。

要件

固定メニューを表示するには、次の条件が満たされている必要があります。

  • 利用者がiOSまたはAndroidでMessenger v106以上を実行している。
  • MessengerボットがフォローするFacebookページが公開されている。
  • Messengerボットがアプリ設定で「公開」に設定されている。
  • Messengerボットにpages_messagingアクセス許可が付与されている。
  • Messengerボットにスタートボタンが設定されている。

サポートされるボタン

固定メニューはボタンの配列で構成されます。固定メニューで使用できるボタンタイプは次のとおりです。

固定メニューを設定する

固定メニューを設定するには、POSTリクエストをMessengerプロフィールAPIに送信して、ボットのMessengerプロフィールのpersistent_menuプロパティを設定します。

廃止されたネストレベルメニューの代わりに、グラフAPI v8.0以上のcall_to_actions配列にある最大20個のボタンを使うことができます。

{
    "persistent_menu": [
        {
            "locale": "default",
            "composer_input_disabled": false,
            "call_to_actions": [
                {
                    "type": "postback",
                    "title": "Talk to an agent",
                    "payload": "CARE_HELP"
                },
                {
                    "type": "postback",
                    "title": "Outfit suggestions",
                    "payload": "CURATION"
                },
                {
                    "type": "web_url",
                    "title": "Shop now",
                    "url": "https://www.originalcoastclothing.com/",
                    "webview_height_ratio": "full"
                }
            ]
        }
    ]
}

固定メニューのネスト

この機能はv8.0以上で廃止されました。

コンポーザーを無効にする

コンポーザーを無効にして、利用者がMessengerボットと対話する方法を固定メニューのみに制限できます。これは、ボットの目的またはオプションセットが非常に限定されている場合に役立ちます。

コンポーザーを無効にするには、固定メニューを作成する際に"composer_input_disabled":trueを設定します。

ローカリゼーション

利用者のロケールに基づいて表示される、デフォルトのローカライズされたボタンテキストを固定メニューに付けることができます。

そのためには、ロケールごとにpersistent_menu配列で個別のオブジェクトを指定します。オブジェクトごとにロケールを指定するには、localeプロパティをサポートされているロケールに設定します。

{
  "locale":"default",
  "call_to_actions":[...]
},
{
  "locale: "zh_CN",
  "call_to_actions":[...]
}

ユーザーレベルメニュー

新機能

2019年12月4日、Metaは動的な変更をサポートするために固定メニューを改善し、スレッドのエクスペリエンスをさらにパーソナライズしました。

ページレベルの固定メニューをユーザーレベルの設定にオーバーライドできます。これにより、アプリは次のものを動的に制御できます。

  • 特定のユーザーのメニューにあるアクションボタンのクリック。
  • 特定のユーザーに対するコンポーザーの可視性。

ユーザーレベル設定を有効または無効にするには、custom_user_settingsという別のエンドポイントを使います。このエンドポイントは、POST、GET、およびDELETE呼び出しをサポートします。

ページレベルの固定メニューで使用できる構成が、ユーザーレベルでも適用されます。主な違いは、このオーバーライドが適用されるユーザーを示すためにpsidパラメーターが必要であることです。

注: ユーザーレベルの固定メニューの更新はリアルタイムで実施されますが、ページレベルの固定メニューの更新には最大24時間かかることがあります。

ユーザーレベル設定には、1ユーザーにつき10分あたり10回の呼び出しというレート制限があります。

POSTリクエストの例

これにより、このユーザーの現在のページレベル設定がオーバーライドされます。

curl -X POST -H "Content-Type: application/json" -d '{
  "psid": "<PSID>",
  "persistent_menu": [
        {
            "locale": "default",
            "composer_input_disabled": false,
            "call_to_actions": [
                {
                    "type": "postback",
                    "title": "Talk to an agent",
                    "payload": "CARE_HELP"
                },
                {
                    "type": "postback",
                    "title": "Outfit suggestions",
                    "payload": "CURATION"
                },
                {
                    "type": "web_url",
                    "title": "Shop now",
                    "url": "https://www.originalcoastclothing.com/",
                    "webview_height_ratio": "full"
                }
            ]
        }
    ]
}' "https://graph.facebook.com/v19.0/me/custom_user_settings?access_token=<PAGE_ACCESS_TOKEN>"

GETリクエストの例

これにより、現在のユーザーレベル設定とページレベル設定が取得されます。ユーザーレベル設定が存在しない場合は、ページレベル設定のみが返されます。

curl -X GET "https://graph.facebook.com/v19.0/me/custom_user_settings?psid=<PSID>&access_token=<PAGE_ACCESS_TOKEN>"

結果

{
    "data": [
      {
        "user_level_persistent_menu": [
            {
              "locale": "default",
              "composer_input_disabled": false,
              "call_to_actions": [
                  {
                      "type": "postback",
                      "title": "Talk to an agent",
                      "payload": "CARE_HELP"
                  },
                  {
                      "type": "postback",
                      "title": "Outfit suggestions",
                      "payload": "CURATION"
                  },
                  {
                      "type": "web_url",
                      "title": "Shop now",
                      "url": "https://www.originalcoastclothing.com/",
                      "webview_height_ratio": "full"
                  }
              ]
            }
        ],
        "page_level_persistent_menu": [
          Original Page Menu...
        ]  
      }
  ]
}

DELETEリクエストの例

これにより、ユーザーレベル設定が削除されます。設定済みのページレベルメニューがあれば、それはそのまま残されます。

curl -X DELETE 'https://graph.facebook.com/v19.0/me/custom_user_settings?psid=<PSID>&params=[%22persistent_menu%22]&access_token=<PAGE_ACCESS_TOKEN>'

固定メニューを無効にする

チャットプラグインのボットで固定メニューを無効にすることが望ましいケースがあります。これを行うには、固定メニューを設定するときに、"disabled_surfaces": ["CUSTOMER_CHAT_PLUGIN"]を追加します。

MessengerプロフィールAPIペイロードの例

{
  "persistent_menu":[
    {
      "locale":"default",
      "disabled_surfaces": ["CUSTOMER_CHAT_PLUGIN"],
      "composer_input_disabled": false,      
      "call_to_actions":[
        {
          "title":"My Account",
          "type":"postback",
          "payload":"PAYBILL_PAYLOAD"
        }
      ]
    }
  ]
}

ベストプラクティス

メニュー項目では、ボタンと同じように、ウェブビューまたはポストバックを生成できます。第2レベルのメニューはサポートされないことにご注意ください。

ボットの機能へのエントリーポイントとしてメニューを使います。

ボットに何ができるかをメニューで説明して利用者に知らせます。それにより、ユーザーは今後ボットにアクセスする目的をすぐに理解できます。

最適なユーザーエクスペリエンスを実現するため、ボットのコア機能に対応するメニュー項目を厳選して最大5つに抑えるようにしてください。

メニューにユーザー固有のデータが含まれることを想定しないでください。メニューはローカライズできますが、ボット利用者に表示されるメニューはすべて同一です。

メニューを含むメッセージをユーザーに送信する「メニュー」ボタンをメニューに配置しないでください。コンテンツはメニューに直接配置しましょう。そのためにメニューがあるのです。

「再スタート」のような一般的なアクションをメニューに配置しないでください。

会社情報、利用規約、プライバシーポリシー、提供元などの二次的な「奥付」スタイルの情報に貴重なメニュー領域を使うのではなく、ボットの主要な機能だけを表示してください。

開発者サポート