このドキュメントでは、プログラムを使って固定メニューをメッセージエクスペリエンスに追加する方法について説明します。
Android (v276以上)のMessengerアプリでは、固定メニューのネストがサポートされなくなります。メニュー項目のネストを含むページは、すべてのサーフェス(ウェブ、iOS、Android (v276以上))で、階層レベルのないリストとしてレンダリングされます。Metaでは、その方がMessengerの利用者にとってエクスペリエンスが向上すると考えています。メニューのネストのサポートは、グラフAPI v8.0のMessengerプロフィールAPIとカスタマーユーザー設定APIの両方から削除され、すべてのバージョンで2年以内に重要な変更が適用されます。
処理の概要固定メニューを利用すると、営業時間、店舗情報、商品など、ビジネスの主な特徴についてのメニューを作成し、それを送信することができます。これは、利用者とビジネスとのMessengerスレッドに常に表示されます。 利用者がメニュー内の項目をクリックすると、 |
コマンドが設定されている場合、固定メニューより優先されます。
固定メニューを表示するには、次の条件が満たされている必要があります。
pages_messaging
アクセス許可が付与されている。固定メニューを設定するには、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回の呼び出しというレート制限があります。
これにより、このユーザーの現在のページレベル設定がオーバーライドされます。
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/v21.0
/me/custom_user_settings?access_token=<PAGE_ACCESS_TOKEN>"
これにより、現在のユーザーレベル設定とページレベル設定が取得されます。ユーザーレベル設定が存在しない場合は、ページレベル設定のみが返されます。
curl -X GET "https://graph.facebook.com/v21.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... ] } ] }
これにより、ユーザーレベル設定が削除されます。設定済みのページレベルメニューがあれば、それはそのまま残されます。
curl -X DELETE 'https://graph.facebook.com/v21.0
/me/custom_user_settings?psid=<PSID>¶ms=[%22persistent_menu%22]&access_token=<PAGE_ACCESS_TOKEN>'
チャットプラグインのボットで固定メニューを無効にすることが望ましいケースがあります。これを行うには、固定メニューを設定するときに、"disabled_surfaces": ["CUSTOMER_CHAT_PLUGIN"]
を追加します。
{
"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つに抑えるようにしてください。
メニューにユーザー固有のデータが含まれることを想定しないでください。メニューはローカライズできますが、ボット利用者に表示されるメニューはすべて同一です。
メニューを含むメッセージをユーザーに送信する「メニュー」ボタンをメニューに配置しないでください。コンテンツはメニューに直接配置しましょう。そのためにメニューがあるのです。
「再スタート」のような一般的なアクションをメニューに配置しないでください。
会社情報、利用規約、プライバシーポリシー、提供元などの二次的な「奥付」スタイルの情報に貴重なメニュー領域を使うのではなく、ボットの主要な機能だけを表示してください。