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

Отправка интерактивных сообщений

Это руководство содержит информацию об отправке интерактивных сообщений каждого типа. Интерактивные сообщения упрощают пользователям поиск и выбор необходимых вариантов при взаимодействии с вашей компанией в WhatsApp. Во время тестирования чат-боты, использующие функции интерактивных сообщений, обеспечили значительно более высокую долю отклика и коэффициент конверсии по сравнению с простыми текстовыми ботами.

Типы интерактивных сообщений:

  • Сообщения со списками. Это сообщения с меню, содержащим до 10 пунктов. Они позволяют упростить и унифицировать процедуру выбора пользователем нужного ему варианта при взаимодействии с компанией.
  • Сообщения с кнопками ответов. Эти сообщения содержат до трех вариантов выбора, каждый из которых представлен в виде кнопки. В таких сообщениях пользователи могут быстрее выбрать в меню нужный вариант при взаимодействии с компанией. Для кнопок ответов применяется тот же пользовательский интерфейс, что и для интерактивных шаблонов с кнопками.
  • Сообщения об одном товаре. Сообщения, содержащие информацию об одном товаре из каталога компании. Дополнительную информацию см. в статье Предоставление клиентам информации о товарах.
  • Сообщения о нескольких товарах. Сообщения со списком товаров (до 30 наименований) из каталога компании. Дополнительную информацию см. в статье Предоставление клиентам информации о товарах.
  • Сообщения с запросом геоданных. Сообщения, содержащие запрос геоданных пользователя.
  • Сообщения Flows. Сообщения для структурированного взаимодействия. Дополнительную информацию см. в статье Сообщения Flows.

Характеристики интерактивных сообщений

  • Интерактивные сообщения можно комбинировать в рамках одной переписки.
  • Пользователи не могут выбирать более одного варианта за раз из сообщений со списками или с кнопками ответов, однако они могут вернуться и повторно открыть предыдущее сообщение.
  • Сообщения со списками или с кнопками ответов нельзя использовать в качестве уведомлений. В настоящий момент такие сообщения можно отправлять только в течение 24 часов с момента отправки пользователем последнего сообщения. Попытка отправить сообщение вне 24-часового окна приведет к ошибке.
  • Поддерживаемые платформы: iOS, Android и веб-платформа (сообщения Flows не поддерживаются на веб-платформе).

Сравнение тестовых и интерактивных сообщений:


Пример комбинирования сообщений со списками и с кнопками ответа в одной переписке:

Произошла ошибка
Не удается воспроизвести видео.

Обзор

Зачем это нужно?

Пользовательское восприятие

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

Повышение эффективности компании

Во время тестирования чат-боты, использующие функции интерактивных сообщений, обеспечили значительно более высокую долю отклика и коэффициент конверсии по сравнению с простыми текстовыми ботами.

Персонализация

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

Никаких шаблонов

Интерактивным сообщениям не требуются шаблоны и предварительные подтверждения.

Когда это следует использовать

Сообщения со списками лучше всего подходят для предложения нескольких вариантов, например:

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

Кнопки ответов лучше всего подходят для того, чтобы предложить быстрые ответы из ограниченного списка вариантов, например:

  • пополнение мобильного счета;
  • изменение персональных данных;
  • повторное оформление предыдущего заказа;
  • запрос возврата;
  • дополнение продуктов в заказ;
  • выбор способа оплаты.

Кнопки ответов особенно полезны для "персонализированных" вариантов использования, когда общего ответа недостаточно.

Сообщения Flows лучше всего подходят для структурированной коммуникации в рамках одного или нескольких экранов, например:

  • запись на встречи;
  • просмотр товаров;
  • сбор отзывов клиентов;
  • получение лидов для продаж.

Благодаря сообщениям Flows компании могут предлагать более функциональное и вовлекающее взаимодействие с пользователями, что поможет им быстрее решать свои задачи в WhatsApp, не переключаясь при этом на другие приложения и не переходя на какие-либо сайты.

Как использовать этот процесс?

На уровне API интерактивные сообщения настраиваются путем установки для параметра type сообщения значения interactive и добавления объекта interactive. Такие сообщения обычно состоят из четырех основных частей: header, body, footer и action.

{
  "recipient_type": "individual",
  "to" : "whatsapp-id",
  "type": "interactive" 
  "interactive":{
    "type": "list" | "button" | ...,
    "header": {},
    "body": {},
    "footer": {},
    "action": {}
  }
}
Вот как сочетаются основные части для сообщений со списками:

Вот как сочетаются основные части для сообщений с кнопками ответа:

Ниже приведена информация об отправке этих сообщений.

Начало работы

Перед отправкой каждого сообщения вам необходимо получить ID WhatsApp получателя, выполнив вызов к узлу /contacts.

Рекомендуем настроить Webhooks для получения статуса сообщений и уведомлений о входящих сообщениях. Это позволит вам отслеживать как отправку ваших сообщений, так и получение ответов от пользователей. Дополнительную информацию см. в статье о Webhooks.

Шаг 1. Создайте объект interactive

Сообщения со списками

Для отправки сообщения со списками вам необходимо создать объект interactive типа list с использованием следующих компонентов:

ОбъектОписание

header

Необязательный параметр.

Если вы решите включить его, вам необходимо в качестве типа заголовка указать текст и добавить поле текста с желаемым контентом. Не более 60 символов.


См. все доступные поля объекта header.

body

Обязательный параметр.

Основная часть вашего сообщения. Не более 1024 символов.


См. все доступные поля объекта body.

footer

Необязательный параметр.

Нижний колонтитул вашего сообщения.


См. все доступные поля объекта footer.

action

Обязательный параметр.

Внутри действия вам необходимо разместить:

  • Поле button с контентом вашей кнопки, макс. 20 символов
  • Как минимум один объект section (не более 10) с максимальным количеством 24 символа для title для section

Внутри section вам необходимо добавить хотя бы один объект rows. Не более 24 символов для title в строке и не более 72 символов для description в строке.


См. все доступные поля объекта action.

См. все доступные поля объекта section.

В итоге ваш объект interactive должен выглядеть примерно так:

"interactive":{
  "type": "list",
  "header": {
    "type": "text",
    "text": "your-header-content"
  },
  "body": {
    "text": "your-text-message-content"
  },
  "footer": {
    "text": "your-footer-content"
  },
  "action": {
    "button": "cta-button-content",
    "sections":[
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      {
        "title":"your-section-title-content",
        "rows": [
          {
            "id":"unique-row-identifier",
            "title": "row-title-content",
            "description": "row-description-content",           
          }
        ]
      },
      ...
    ]
  }
}

Кнопки ответа

Для отправки сообщения с кнопками ответа вам необходимо создать объект interactive типа button с использованием следующих компонентов:

ОбъектОписание

header

Необязательный параметр.

Для интерактивных сообщений button вы можете использовать следующие типа заголовка: text, video, image или document.


Выберите необходимое значение type и добавьте соответствующие объекты или поля с дополнительной информацией:

Пример:

"header": {
      "type": "text" | "image" | "video" | "document",
      "text": "your text"
      # OR
      "document": {
        "id": "your-media-id",
        "filename": "some-file-name"
      }
      # OR
      "document": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name",
        },
        "filename": "some-file-name"
      },
      # OR
      "video": {
        "id": "your-media-id"
      }
      # OR
      "video": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
      # OR
      "image": {
        "id": "your-media-id"
      }
      # OR
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    }

См. все доступные поля объекта header.

body

Обязательный параметр.

См. все доступные поля объекта body.

footer

Необязательный параметр.

См. все доступные поля объекта footer.

action

Обязательный параметр.

Вы должны добавить хотя бы одно значение button, а также включить type, title и id для своих кнопок. Нельзя добавлять более 3 кнопок. Макс. 20 символов для title.

При настройке идентификатора в начале и в конце нельзя поставить пробелы.


Пример:

"action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "First Button’s Title" 
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "Second Button’s Title" 
          }
        }
      ] 
    }

См. все доступные поля объекта action.

В итоге ваш объект interactive должен выглядеть примерно так:

"interactive": {
    "type": "button",
    "header": { # optional
      "type": "text" | "image" | "video" | "document",
      "text": "your text"
      # OR
      "document": {
        "id": "your-media-id",
        "filename": "some-file-name"
      }
      # OR
      "document": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name",
        },
        "filename": "some-file-name"
      },
      # OR
      "video": {
        "id": "your-media-id"
      }
      # OR
      "video": {
        "link": "the-provider-name/protocol://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
      # OR
      "image": {
        "id": "your-media-id"
      }
      # OR
      "image": {
        "link": "http(s)://the-url",
        "provider": {
          "name": "provider-name"
        }
      }
    }, # end header
    "body": {
      "text": "your-text-body-content"
    },
    "footer": { # optional
      "text": "your-text-footer-content"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "First Button’s Title" 
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "unique-postback-id",
            "title": "Second Button’s Title" 
          }
        }
      ] 
    } # end action   
  } # end interactive

Сообщения с запросом геоданных

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

Чтобы отправить сообщение с запросом геоданных, сначала создайте объект interactive с тем текстом, который должен отображаться в сообщении:

{
  "type": "location_request_message",
  "body": {
    "type": "text",
    "text": "<TEXT>"
  },
  "action": {
    "name": "send_location" 
  }
}
СвойствоОписание

type

Укажите значение location_request_message.

body.type

Укажите значение text.

body.text

Укажите текст, который должен отображаться над кнопкой Отправить геоданные.

action.name

Задайте значение send_location.

Сообщения Flows

Сообщения Flows содержат кнопку призыва к действию, которую пользователи могут нажать. При нажатии кнопки открывается пользовательский Flow.

Чтобы отправить сообщение Flows, необходимо создать объект interactive типа flow. Подробную информацию см. в этой статье.

Шаг 2. Добавьте общие параметры сообщений

Теперь, когда вы создали свой интерактивный объект, добавьте другие параметры, которые являются частью сообщения: recipient_type, to и type. Установите для параметра type значение interactive.

{
  "recipient_type": "individual",
  "to" : "whatsapp-id", // WhatsApp ID of your recipient
  "type": "interactive",
  "interactive":{
    // Your interactive object  
   }
  }

Параметры, общие для всех типов сообщений, см. здесь.

Шаг 3. Выполните вызов POST к /messages

Выполните вызов POST к конечной точке /messages с использованием объекта JSON, который вы создали в шагах 1 и 2. В случае успешной отправки сообщения вы получите следующий ответ:

{
  "messages": [{
    "id": "{message-id}"
  }]
}

Шаг 4. Проверьте Webhooks

Если вы настроили свои Webhooks, проверьте изменения статуса ваших сообщений, а также ответы, поступившие от пользователей.

Webhooks пользователей, отвечающих на интерактивные сообщения, включают в себя новый компонент interactive, который содержит информацию о выборе, сделанном пользователем. Дополнительную информацию см. в статье Webhooks, Компоненты.

Например, вот запрос Webhooks с описанием пользователя, который предоставил свои геоданные.

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "12345",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "12345",
              "phone_number_id": "12345"
            },
            "contacts": [
              {
                "profile": {
                  "name": "John Doe"
                },
                "wa_id": "12345"
              }
            ],
            "messages": [
              {
                "context": {
                  "from": "12345",
                  "id": "test-id"
                },
                "from": "123450",
                "id": "test-id",
                "timestamp": "16632",
                "location": {
                  "address": "1071 5th Ave, New York, NY 10128", #Optional
                  "latitude": 37.421996751527,
                  "longitude": -122.08407156636,
                  "name": "Solomon R. Guggenheim Museum" #Optional
                },
                "type": "location"
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Компонент location в полезных данных содержит указание географической широты и долготы местоположения пользователя. Обратите внимание, что для пользователя компоненты address и name являются необязательными и могут не включаться.

"location": {
  "address": "1071 5th Ave, New York, NY 10128", #Optional
  "latitude": 40.782910059774,
  "longitude": -73.959075808525,
  "name": "Solomon R. Guggenheim Museum" #Optional
}