Постоянное меню

В этом документе объясняется, как добавить постоянное меню в интерфейс обмена сообщениями программным путем.

Вложенные постоянные меню

В приложении Messenger from Meta для Android (версии 276 и более поздних) прекращена поддержка вложенных постоянных меню. Пункты вложенных меню на содержащих их страницах на всех платформах (в браузерах, iOS и Android версий 276 и более поздних) будут отображаться в виде одноуровневых списков. Мы считаем, это сделает Messenger ещё удобнее для пользователей. Поддержка вложенных меню будет убрана из API Messenger Profile и API индивидуально настраиваемых параметров пользователей в версии 8.0 API Graph (изменения во всех версиях вступают в силу через 2 года).

Принцип работы

Постоянное меню позволяет создавать и отправлять перечень важных сведений о вашей компании, например часы работы, адреса магазинов и предлагаемые товары. Это меню всегда видно пользователю в переписке с вашей компанией в Messenger.

Когда пользователь выбирает пункт в меню, на ваш сервер отправляет уведомление Webhooks postback. Это уведомление Webhooks содержит информацию о том, какой пункт меню был выбран и кем. Выбор пункта меню открывает стандартное окно сообщений. Вы должны ответить пользователю в течение 24 часов.

Если задан параметр Команды, он имеет приоритет над постоянным меню.

Требования

Для работы постоянного меню должны выполняться следующие условия:

  • у человека должен быть установлен Messenger версии 106 или более поздней на iOS или Android;
  • страница Facebook, с которой связан бот, должна быть опубликована;
  • в настройках бота должно быть указано, что он является общедоступным;
  • у бота должно быть разрешение pages_messaging;
  • для бота должна быть настроена кнопка "Начать".

Поддерживаемые кнопки

Постоянное меню представляет собой ряд кнопок. Поддерживаются следующие кнопки:

Настройка постоянного меню

Чтобы настроить постоянное меню, отправьте запрос POST к API Messenger Profile и установите свойство persistent_menu профиля Messenger вашего бота.

Вместо упраздняемых вложенных меню мы позволяем добавить до 20 кнопок в массиве call_to_actions для API Graph 8.0 и более поздних версий.

{
    "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"
                }
            ]
        }
    ]
}

Вложенные постоянные меню

Эта функция упразднена начиная с версии 8.0.

Отключение поля для публикаций

При необходимости можно отключить поле для публикаций, чтобы люди могли взаимодействовать с ботом только через постоянное меню. Это пригодится, если бот имеет узкую специализацию или предлагает ограниченные возможности.

Чтобы отключить поле для публикаций, задайте параметр "composer_input_disabled":true при создании постоянного меню.

Локализация

Вы можете предоставить локализованный текст и текст по умолчанию, который будет отображаться на кнопках постоянного меню в зависимости от языка пользователя.

Для этого укажите отдельный объект в массиве persistent_menu для каждого языка. Чтобы указать язык для каждого объекта, задайте в свойстве locale один из поддерживаемых языков и регионов.

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

Меню уровня пользователя

Новая функция

4 декабря 2019 года мы внесли некоторые улучшения в постоянные меню, чтобы реализовать возможность динамических изменений на уровне пользователя для более глубокой персонализации интерфейса переписок.

Постоянное меню уровня Страницы можно переопределить путем настройки на уровне пользователя. Это позволяет динамически контролировать:

  • клики по кнопкам действий в меню для пользователя;
  • видимость поля для публикаций для пользователя.

Для включения и отключения настройки на уровне пользователя применяется отдельная конечная точка custom_user_settings. Она поддерживает вызовы POST, GET и DELETE.

Для постоянного меню уровня пользователя применяются те же конфигурации, что и на уровне Страницы. Основное отличие заключается в использовании параметра psid. Он указывает пользователя, для которого действует переопределение.

ПРИМЕЧАНИЕ. Обновление постоянного меню на уровне пользователя происходит в режиме реального времени, однако обновление постоянного меню на уровне Страницы может занять до 24 часов.

Для настроек на уровне пользователя действует ограничение в 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 Profile 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"
        }
      ]
    }
  ]
}

Рекомендации

Как и кнопки, элементы меню могут запускать веб-представление или обратную передачу. Помните, что меню второго уровня не поддерживаются.

Используйте меню в качестве точек входа в функции бота.

Подробно расскажите людям, что может делать ваш бот. Так пользователи сразу смогут понять, чем им поможет бот.

Выберите основные функции своего бота и постарайтесь, чтобы в меню не было более пяти пунктов.

Меню не может содержать данные для конкретного человека. Оно выглядит одинаково для всех (однако его можно локализовать).

Не добавляйте кнопку "Меню", которая отправляет человеку сообщение с меню. Просто добавьте в меню нужный контент.

Не добавляйте в меню общие действия, например "Перезапустить".

Не добавляйте в основное меню второстепенную информацию, например сведения о компании, условия обслуживания, политику конфиденциальности или "От...", вместо основных функций бота.

Поддержка разработчиков