Боты Facebook Messenger

Мессенджеры *PHP *Facebook API * Tutorial В настоящее время наблюдается, действительно, бум чат-мессенджеров. Один за другим платформы для обмена мгновенными сообщениями объявляют о запуске платформы для разработки ботов. Не стал и исключением Facebook. 12 апреля на конференции F8 Facebook представила платформу для разработки ботов для своего мессенджера. В данной статье хочу поделиться опытом разработки чат-бота для Facebook на PHP.

Общая информация

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

Создание страницы

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

Регистрация и настройка приложения

Переходим к регистрации своего приложения в аккаунте разработчика. Заходим по ссылке developers.facebook.com/apps Нажимаем на добавление нового приложения, выбираем другой настройку вручную: Далее заполняем форму: image После создания приложения, в левом меню выбираем вкладку Messenger и кликаем на нее. Нажимаем «Начать». В первую очередь выбираем страницу, созданную для бота, и копируем token. Сохраняем его где-нибудь, он нам пригодится дальше. Дальше мы будем настраивать webhook для обработки входящих сообщений. На этом шаге, вам нужно закачать следующий скрипт на сервер, где будет размещен бот:

  $verify_token = ""; // Verify token  if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == $verify_token) {  echo $_REQUEST['hub_challenge'];  } 

В переменную $verify_token необходимо добавить какой-то текст. Скрипт загружаем на сервер. Допустим, наш скрипт доступен по адресу: domain.com/fbbot Возвращаемся ко вкладке Messenger в настройках приложения FB. Ищем блок «Webhooks» и кнопку «Setup Webhooks». Кликаем на нее. В поле «Обратный URL-адрес» указываем адрес нашего бота — domain.com/fbbot SSL — сертификат является обязательным. Самоподписанный сертификат не подойдет. В поле «Подтвердить маркер» указываем тот текст, который указали в переменной $verify_token в скрипте. В поле «Поля подписки» выбираем, какие уведомления мы хотим получать на наш webhook:

  • message_deliveries — уведомления о доставке сообщения
  • messages — сообщения, написанные пользователем боту
  • messaging_optins — callback при получении сообщения через кнопку на сайте (Send-to-Messenger Plugin)
  • messaging_postbacks — переходы по кнопкам из предыдущих сообщений бота (будет понятно далее)

Выбираем нужные и нажимаем кнопку «Подтвердить и сохранить».

Связываем приложение и страницу

Набираем в консоли:

curl -ik -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=-token-" 

-token- заменяем на токен вашей страницы.

Типы сообщений в FB Messenger

Сообщения могут быть либо просто текстовые, либо Structured Text, которые в свою очередь могут быть:

  • button — кнопки
  • generic — элементы
  • receipt — счет на оплату

Кнопки (button)

Данный тип предназначен для отправки сообщений, на которые требуется реакция пользователя. Выглядят они примерно так: Кнопки могут быть двух типов:

  1. Отправляющие ответ боту
  2. Переходящие по адресу в интернете

Важный момент: в одном таком сообщении может быть максимум 3 кнопки, при попытке отправить сообщение с бОльшим количеством кнопок — оно просто не дойдет до получателя.

Элементы (generic)

Данный тип предназначен для отправки карточек товаров или других элементов, имеющих похожую структуру. Каждый элемент может иметь: Заголовок, подзаголовок, описание, изображение и кнопки. В одном сообщении может содержаться до 10 элементов. При наличии более одного элемента, появляется горизонтальная прокрутка. Важный момент: в одном таком сообщении может быть максимум 3 кнопки, при попытке отправить сообщение с бОльшим количеством кнопок — оно просто не дойдет до получателя.

Счет на оплату (receipt)

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

Пишем код

На момент написания бота, на GitHub еще не было реализации API на PHP, поэтому пришлось писать PHP SDK самостоятельно. Устанавливаем PHP SDK для работы с FB Messenger API при помощи composer:

composer require "pimax/fb-messenger-php" "dev-master" 

Создаем файл index.php:

   $verify_token = ""; // Verify token $token = ""; // Page token  if (file_exists(__DIR__.'/config.php')) {     $config = include __DIR__.'/config.php';     $verify_token = $config['verify_token'];     $token = $config['token']; }  require_once(dirname(__FILE__) . '/vendor/autoload.php');  use pimaxFbBotApp; use pimaxMessagesMessage; use pimaxMessagesMessageButton; use pimaxMessagesStructuredMessage; use pimaxMessagesMessageElement; use pimaxMessagesMessageReceiptElement; use pimaxMessagesAddress; use pimaxMessagesSummary; use pimaxMessagesAdjustment;  $bot = new FbBotApp($token);  if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == $verify_token) {      // Webhook setup request     echo $_REQUEST['hub_challenge']; } else {       $data = json_decode(file_get_contents("php://input"), true);      if (!empty($data['entry'][0]['messaging']))      {             foreach ($data['entry'][0]['messaging'] as $message)             { // Получено сообщение // Основной код будет в этом блоке // ...             }    } } 

Пробуем отправить сообщение пользователю в ответ при получении любого сообщения от него. Для этого в блок получения сообщения, добавляем:

$bot->send(new Message($message['sender']['id'], ‘Hi there!')); 

Проверяем. Находим в мессенджере нашего бота и пробуем отправить ему любое сообщение. В ответ мы должны получить от него «Hi there!». Важно: Пока приложение не прошло модерацию бот будет работать только для автора приложения. Если все работает как надо, идем дальше. В блок получения сообщения добавляем:

// Пропускаем обработку отметок о доставке сообщения if (!empty($message['delivery'])) {     continue; }  $command = ""; // Получено сообщение от пользователя, записываем как команду if (!empty($message['message'])) {     $command = $message['message']['text'];     // ИЛИ Зафиксирован переход по кнопке, записываем как команду } else if (!empty($message['postback'])) {     $command = $message['postback']['payload']; }  // Обрабатываем команду switch ($command) {      // When bot receive "text"     case 'text':         $bot->send(new Message($message['sender']['id'], 'This is a simple text message.'));         break;      // When bot receive "button"     case 'button':       $bot->send(new StructuredMessage($message['sender']['id'],           StructuredMessage::TYPE_BUTTON,           [               'text' => 'Choose category',               'buttons' => [                   new MessageButton(MessageButton::TYPE_POSTBACK, 'First button'),                   new MessageButton(MessageButton::TYPE_POSTBACK, 'Second button'),                   new MessageButton(MessageButton::TYPE_POSTBACK, 'Third button')               ]           ]       ));     break;      // When bot receive "generic"     case 'generic':          $bot->send(new StructuredMessage($message['sender']['id'],             StructuredMessage::TYPE_GENERIC,             [                 'elements' => [                     new MessageElement("First item", "Item description", "", [                         new MessageButton(MessageButton::TYPE_POSTBACK, 'First button'),                         new MessageButton(MessageButton::TYPE_WEB, 'Web link', 'http://facebook.com')                     ]),                      new MessageElement("Second item", "Item description", "", [                         new MessageButton(MessageButton::TYPE_POSTBACK, 'First button'),                         new MessageButton(MessageButton::TYPE_POSTBACK, 'Second button')                     ]),                      new MessageElement("Third item", "Item description", "", [                         new MessageButton(MessageButton::TYPE_POSTBACK, 'First button'),                         new MessageButton(MessageButton::TYPE_POSTBACK, 'Second button')                     ])                 ]             ]         ));      break;      // When bot receive "receipt"     case 'receipt':          $bot->send(new StructuredMessage($message['sender']['id'],             StructuredMessage::TYPE_RECEIPT,             [                 'recipient_name' => 'Fox Brown',                 'order_number' => rand(10000, 99999),                 'currency' => 'USD',                 'payment_method' => 'VISA',                 'order_url' => 'http://facebook.com',                 'timestamp' => time(),                 'elements' => [                     new MessageReceiptElement("First item", "Item description", "", 1, 300, "USD"),                     new MessageReceiptElement("Second item", "Item description", "", 2, 200, "USD"),                     new MessageReceiptElement("Third item", "Item description", "", 3, 1800, "USD"),                 ],                 'address' => new Address([                     'country' => 'US',                     'state' => 'CA',                     'postal_code' => 94025,                     'city' => 'Menlo Park',                     'street_1' => '1 Hacker Way',                     'street_2' => ''                 ]),                 'summary' => new Summary([                     'subtotal' => 2300,                     'shipping_cost' => 150,                     'total_tax' => 50,                     'total_cost' => 2500,                 ]),                 'adjustments' => [                     new Adjustment([                         'name' => 'New Customer Discount',                         'amount' => 20                     ]),                      new Adjustment([                         'name' => '$10 Off Coupon',                         'amount' => 10                     ])                 ]             ]         ));      break;      // Other message received     default:         $bot->send(new Message($message['sender']['id'], 'Sorry. I don’t understand you.')); } 

Пробуем отправить боту сообщения:

  • text
  • button
  • generic
  • receipt

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

Реальный пример Бота для фриланс-биржи Job4Joy

Итак, наша цель, реализовать бота, который по нашему запросу будет выдавать новые проекты в соответствующей категории. Данные будем получать по RSS, используя picoFeed — github.com/fguillot/picoFeed Выполняем:

composer require fguillot/picofeed @stable composer require "pimax/fb-messenger-php" "dev-master" 

Создаем файл index.php следующего содержания (комментарии приведены в коде):

   $verify_token = ""; // Verify token $token = ""; // Page token $config = []; // config  if (file_exists(__DIR__.'/config.php')) {     $config = include __DIR__.'/config.php';     $verify_token = $config['verify_token'];     $token = $config['token']; }  require_once(dirname(__FILE__) . '/vendor/autoload.php');  use PicoFeedReaderReader; use pimaxFbBotApp; use pimaxMessagesMessage; use pimaxMessagesMessageButton; use pimaxMessagesStructuredMessage; use pimaxMessagesMessageElement;  $bot = new FbBotApp($token);  if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == $verify_token) {     // Webhook setup request     echo $_REQUEST['hub_challenge']; } else {      $data = json_decode(file_get_contents("php://input"), true);     if (!empty($data['entry'][0]['messaging']))     {         foreach ($data['entry'][0]['messaging'] as $message)         {             if (!empty($data['entry'][0])) {                  if (!empty($data['entry'][0]['messaging']))                 {                     foreach ($data['entry'][0]['messaging'] as $message)                     {                         if (!empty($message['delivery'])) {                             continue;                         }                          $command = "";                          if (!empty($message['message'])) {                             $command = $message['message']['text'];                         } else if (!empty($message['postback'])) {                             $command = $message['postback']['payload'];                         }                          if (!empty($config['feeds'][$command]))                         {                             getFeed($config['feeds'][$command], $bot, $message);                         } else {                             sendHelpMessage($bot, $message);                         }                     }                 }             }         }     } }  /**  * Send Help Message  *  * @param $bot Bot instance  * @param array $message Received message  * @return bool  */ function sendHelpMessage($bot, $message) {     $bot->send(new StructuredMessage($message['sender']['id'],         StructuredMessage::TYPE_BUTTON,         [             'text' => 'Choose category',             'buttons' => [                 new MessageButton(MessageButton::TYPE_POSTBACK, 'All jobs'),                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Web Development'),                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Software Development & IT')             ]         ]     ));      $bot->send(new StructuredMessage($message['sender']['id'],         StructuredMessage::TYPE_BUTTON,         [             'text' => ' ',             'buttons' => [                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Design & Multimedia'),                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Mobile Application'),                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Host & Server Management')             ]         ]     ));       $bot->send(new StructuredMessage($message['sender']['id'],         StructuredMessage::TYPE_BUTTON,         [             'text' => ' ',             'buttons' => [                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Writing'),                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Mobile Application'),                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Marketing')             ]         ]     ));      $bot->send(new StructuredMessage($message['sender']['id'],         StructuredMessage::TYPE_BUTTON,         [             'text' => ' ',             'buttons' => [                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Business Services'),                 new MessageButton(MessageButton::TYPE_POSTBACK, 'Translation & Languages')             ]         ]     ));       return true; }  /**  * Get Feed Data  *  * @param $url Feed url  * @param $bot Bot instance  * @param $message Received message  * @return bool  */ function getFeed($url, $bot, $message) {     try {         $reader = new Reader;         $resource = $reader->download($url);          $parser = $reader->getParser(             $resource->getUrl(),             $resource->getContent(),             $resource->getEncoding()         );          $feed = $parser->execute();         $items = array_reverse($feed->getItems());          if (count($items)) {             foreach ($items as $itm)             {                 $url = $itm->getUrl();                 $message_text = substr(strip_tags($itm->getContent()), 0, 80);                  $bot->send(new StructuredMessage($message['sender']['id'],                     StructuredMessage::TYPE_GENERIC,                     [                         'elements' => [                             new MessageElement($itm->getTitle(), $message_text, '', [                                 new MessageButton(MessageButton::TYPE_WEB, 'Read more', $url)                             ]),                          ]                     ]                 ));             }          } else {             $bot->send(new Message($message['sender']['id'], 'Not found a new projects in this section.'));         }     }     catch (Exception $e) {         writeToLog($e->getMessage(), 'Exception');     }      return true; }  /**  * Log  *  * @param mixed $data Data  * @param string $title Title  * @return bool  */ function writeToLog($data, $title = '') {     $log = "n------------------------n";     $log .= date("Y.m.d G:i:s") . "n";     $log .= (strlen($title) > 0 ? $title : 'DEBUG') . "n";     $log .= print_r($data, 1);     $log .= "n------------------------n";      file_put_contents(__DIR__ . '/imbot.log', $log, FILE_APPEND);      return true; } 

И файл config.php следующего содержания:

   return [     'token' => '',   // Токен страницы     'verify_token' => '',  // Проверочный токен     'feeds' => [         'All jobs' => 'https://job4joy.com/marketplace/rss/',         'Web Development' => 'https://job4joy.com/marketplace/rss/?id=3',         'Software Development & IT' => 'https://job4joy.com/marketplace/rss/?id=5',         'Design & Multimedia' => 'https://job4joy.com/marketplace/rss/?id=2',         'Mobile Application' => 'https://job4joy.com/marketplace/rss/?id=7',         'Host & Server Management' => 'https://job4joy.com/marketplace/rss/?id=6',         'Writing' => 'https://job4joy.com/marketplace/rss/?id=8',         'Customer Service' => 'https://job4joy.com/marketplace/rss/?id=10',         'Marketing' => 'https://job4joy.com/marketplace/rss/?id=11',         'Business Services' => 'https://job4joy.com/marketplace/rss/?id=12',         'Translation & Languages' => 'https://job4joy.com/marketplace/rss/?id=14',     ] ]; 

Публикация в каталоге для всех

Пока бот доступен только для владельца аккаунта. Чтобы бот был доступен для всех, нужно На странице App Review — опубликовать приложение: После этого нужно запросить модерацию мессенджера. Для этого переходим на вкладку — Messenger. В блоке «App Review for Messenger» нажимаем кнопку «Request Permissions». В появившемся окне выбираем «pages_messaging» и нажимаем «Add items». Теперь остается только дождаться модерации. На момент написания этой статьи, модерация нашего первого бота не завершена, хотя прошло уже более двух рабочих дней с момента подачи заявки.

Заключение

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

Полезные ссылки

  1. Getting Started with FB Chatbots — developers.facebook.com/docs/messenger-platform/quickstart
  2. Web hook Reference — developers.facebook.com/docs/messenger-platform/webhook-reference
  3. FB Messenger PHP API — github.com/pimax/fb-messenger-php
  4. Примеры использования PHP API — github.com/pimax/fb-messenger-php-example
  5. Job4Joy FB Bot — github.com/pimax/job4joy_fb
  • Таргет
  • Таргет
  • Стратегия
  • 30.07.2019
  • Для специалистов

Маркетолог в SendPulse Дарья Сорокина подготовила материал, в котором поделилась способами создания чат-ботов для Facebook Messenger, а также провела обзор популярных конструкторов и рассказала об их особенностях.

Чат-бот — это конструктор из сообщений, кнопок и быстрых ответов. Процесс его создания можно сравнить со складыванием Lego: из одинаковых элементов каждая компания создает свой оригинальный сценарий. Освоить саму технологию довольно просто, поэтому чат-бот вполне доступен для малого и среднего бизнеса.

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

Эти виртуальные помощники помогают автоматизировать рутинные процессы, снять часть задач с менеджеров и улучшить качество обслуживания клиентов благодаря быстрой скорости ответов. Здесь стоит подчеркнуть, что в отличие от персонала, боты работают 24/7. Еще одно преимущество чат-бота — адаптивность: его можно использовать в разных направлениях бизнеса.

Примеры чат-ботов: от рекламной студии до офлайн-магазина

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

А вот компания «Архимир» с помощью чат-бота предлагает клиентам заказать дизайн-проект или консультацию специалиста. Также, нажав на соответствующую кнопку, пользователь может обратиться к ним по вопросам рекламы.

Однако чат-бот — это не всегда информационные, сухие сообщения. Диалог может быть вполне веселым и непринужденным. Именно поэтому мы включили в подборку виртуального помощника Food Network. Благодаря интересным коротким сообщениям и быстрым ответам американской компании удалось имитировать действительно живой диалог.

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

Способы создания чат-ботов

Существует два типа чат-ботов: самообучающиеся и запрограммированные. Первые наделены технологией искусственного интеллекта, вторые — работают по прописанному сценарию, хотя и могут содержать машинное обучение. Стоимость создания чат-бота профессиональными разработчиками начинается от $200. Чем шире возможности, тем сложнее код и выше цена.

Разработка виртуального помощника на основании искусственного интеллекта требует привлечения целой команды программистов. Процесс создания может занимать до полугода и более. Стоимость такого бота будет измеряться десятками тысяч долларов.

Однако, цена «разумного агента» не ограничивается написанием кода. Необходимо еще оплатить хостинг и техническую поддержку. Поэтому, если ваша цель — создать автономного бота, будьте готовы к крупным финансовым вложениям.

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

Дальше мы рассмотрим процесс подготовки бота и тарифы нескольких популярных конструкторов.

С чего начать подготовку чат-бота

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

Затем поработайте над сценарием. Для этого используйте такие программы, как XMind, MindMeister и так далее. Или просто воспользуйтесь чистым листом бумаги. Разработайте последовательность сообщений и команд, из которых будет состоять бот. Визуализация диалога упростит дальнейшую работу и поможет не упустить важные детали.

Ниже вы видите пример сценария для чат-бота.

Конструкторы для создания чат-ботов

Сегодня на рынке существуют сотни конструкторов для чат-ботов. Есть тарифные планы на любой бюджет. Разберем несколько наиболее известных и надежных сервисов.

ManyChat

Это конструктор с англоязычным интерфейсом. Есть два тарифных плана: платный и бесплатный. Стоимость пакета Pro зависит от количества подписчиков. Так, если на бота компании подписано до 500 человек, цена составит $10 в месяц.

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

SendPulse

Мультиканальная маркетинговая платформа с русскоязычным интерфейсом. Позволяет бесплатно использовать конструктор чат-ботов независимо от количества подписчиков и отправленных сообщений. Но в этом случае на всех виджетах будет логотип SendPulse. Чтобы его убрать, необходимо приобрести план White label за $9,85 в месяц.

В SendPulse можно отслеживать подробную статистику и действия подписчиков, настраивать виджет подписки, делать рассылки сообщений и многое другое. Среди преимуществ платформы стоит отметить простоту конструктора и широкие возможности, доступные даже в бесплатной версии. Читайте подробнее о том, как создать чат-бота для Facebook.

Chatfuel

Пожалуй, один из самых известных конструкторов. Имеет англоязычный интерфейс и предоставляет готовые шаблоны чат-ботов для интернет-магазинов, фитнес-клубов, издательств и так далее. В Chatfuel есть три тарифных плана: Free, Pro, Premium. Бесплатный пакет имеет лимит подписчиков до 1000 человек и подразумевает наличие логотипа конструктора на всех сообщениях бота.

Чтобы использовать расширенные возможности сервиса, необходимо приобрести один из платных пакетов. Стоимость плана Pro зависит от числа подписчиков и начинается от $15 за 500 пользователей. Стартовая цена Premium пакета составляет $199.

Aimylogic

Конструктор имеет шесть тарифных планов: Business Basic, Business Standard, Business PRO, Community, Developer, Skill Master. Все они отличаются возможностями, количеством уникальных пользователей в месяц и ценой.

Пакеты Community и Skill Master можно использовать бесплатно. При этом вы получите до 30 групп фраз в чат-боте и базовую статистику — объем трафика и диалогов. Для отслеживания расширенных данных, подключения в диалог оператора и использования других полезных функций нужно приобрести один из платных пакетов, стоимость начинается от $15.

Botmother

Платформа с русскоязычным интерфейсом. Стоимость зависит от количества созданных чат-ботов. Так, цена одного бота составляет примерно $20 в месяц. При этом вы получаете полную статистику, можете подключать в диалог оператора, делать рассылки и т. д.

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

Рекомендации по созданию чат-ботов в конструкторе

  1. Создайте сообщение на случай возникновения недопонимания. У чат-бота не всегда будут ответы на все вопросы. Поэтому обязательно подготовьте сообщение из серии «Извините, я всего лишь робот» и предоставьте возможность вернуться в начало диалога или связаться с менеджером.
  2. Используйте кнопки и быстрые ответы. Так, вы сможете вести диалог, направлять клиентов и продвигать их вниз по воронке продаж.
  3. Добавляйте паузы между сообщениями. Это поможет сделать взаимодействие с ботом более размеренным. Особенно важно учитывать паузы, когда сообщения содержат несколько строчек, которые человеку нужно прочитать.
  4. Старайтесь, чтобы общение с ботом было более человечным. Персонализируйте сообщения. Если язык бренда позволяет, используйте эмодзи.
  5. Тестируйте. Прежде чем позволить клиентам взаимодействовать с чат-ботом, пообщайтесь с ним сами. Так вы устраните ошибки и избежите недопонимания с клиентами.
  6. Не обрывайте диалог. Переведите клиента на сайт, позвольте вернуться в начало беседы, чтобы изменить выбор или подключите к чату менеджера. Подведите диалог к логическому завершению.

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

Подпишитесь, чтобы получать полезные материалы о платном трафике

Читайте также

Как оплачивать рекламу в Telegram и других соцсетях и при этом не нарушать закон

03.08.22 402

Продвижение финтех-компании в соцсетях. На 44% больше подписчиков за полгода

27.07.22 273

Где лучше настроить продвижение: в VK Рекламе, в Бизнесе ВКонтакте или в рекламном кабинете PRO

27.07.22 564

Мануалы 12 ноября 2021 1Нравится Поделиться

Чат-боты предлагают огромные возможности. Они консультируют, принимают заказы, платежи и экономят бюджет. Facebook Messenger — относительно свежая платформа в маркетинговом плане, которая обладает большим потенциалом. Многие бренды ещё не успели оценить возможности чат-бота на этой платформе. Вместе с ребятами из MyLead разбираемся, кому стоит использовать этот инструмент, и как его запустить.

1. Что такое чат-бот, и как он работает

Чат-бот — это система, которая способна имитировать общение, вести беседу. Messenger — это платформа для обмена сообщениями, по этому принципу и работает чат-бот. Он ведёт диалог благодаря автоматической системе, а его запуск начинается после обращения пользователя. Обычно чат-бот работает по заданному сценарию.

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

2. Почему стоит задействовать чат-бота

По данным Sprout Social Index 40% пользователей ожидают, что бренды ответят на их сообщение в течение часа, 79% пользователей желают получить ответ в течение суток. Чтобы обрабатывать все запросы с этой скоростью, необходим большой штат сотрудников, в том числе работающих ночью. Такая организация требует немалого бюджета. Есть ли альтернатива? Да, чат-бот и есть этой альтернативой. Он оперативно отвечает на запросы, работает 24/7 и оптимизирует издержки.

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

Чат-бот оперативен, это доступный и удобный для клиентов вариант связи, он помогает повысить продажи. В будущем чат-боты будут ещё больше популярны.

2.1. Какому бизнесу будет полезен чат-бот в Messenger

  • Онлайн-магазины и сервисы → для консультирования по условиям работы / доставки, консультации по предложениям, навигации по сайту.
  • Оффлайн магазины → для информирования о новых поставках, распродажах, адресах точок прожаж.
  • Финансовые и страховые службы → для консультирования, отправки пакета информации по запросу.
  • Образовательные платформы → для информирования о курсах, учебных программах, расписании.
  • Техническое обеспечение, интернет-провайдеры → для технической поддержки пользователей, связи с саппортом, подключения услуг.
  • Турагентства → для автоматического подбора предложений по интересующему направлению, предоставления дополнительной информации.
  • Отельно-ресторанный бизнес и салоны красоты → для бронирования, информирования об актуальных предложениях, ценах.
  • Вебмастеры, которые зарабатывают на партнёрском маркетинге → для продвижения партнёрских ссылок.

3. Где использовать чат-бота

3.1. Сайт или лендинг

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

3.2. Социальные сети

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

3.3. Платная реклама

Можно подключить платную рекламу и использовать бот с ней. Facebook предоставляет специальную кнопку призыва к действию — «Отправить сообщение». Она позволяет легко начать разговор с ботом. Вместо того чтобы перенаправлять клиента на другие сайты, можно предложить ему более удобное решение.

3.4. Рефлинки

Есть возможность перенаправить клиента на определённый этап разговора — ему не нужно начинать беседу с нуля. Это полезная опция, если вы продвигаете своего бота в нескольких Facebook страницах. Например, в одной группе мы можем направлять пользователя на момент беседы о спортивной одежде, а во второй — на диалог о спортинвентаре. Рефлинк можно создать, кликнув на «Link» в выбранном текстовом блоке.

3.5. «Send to Messenger» или checkbox

Это решение даст возможность пользователю открыть окно конфигурации «Send to Messenger» и сообщить о желании начать диалог. После нажатия чат-бот автоматически отправляет приветственное сообщение. Клиент может ответить на это сообщение позже, поскольку разговор будет вестись не через сайт, а напрямую через Messenger. Эту функцию также используют в форме чекбокса, то есть пользователь ставит галочку, чтобы с ним связались.

3.6. Messenger Code

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

4. Недостатки чат-бота, и кому не подойдет инструмент

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

4.1. Кому чат-бот в Messenger не подойдёт

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

5. В каких сервисах можно создать чат-бота?

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

  • ManyChat. Имеет простой интерфейс, доступный на английском языке. Есть опция подключения живого менеджера к цепочке сообщений. Также возможно функция отслеживать статистику конверсий. Есть бесплатный вариант использования, платный стартует от 10$.
  • Chatfuel. Доступный англоязычный интерфейс и ассортимент готовых шаблонов. Есть бесплатный пакет, который подразумевает лого конструктора в сообщениях. Пакеты с расширенными возможностями и статистиками стоят от 15$.
  • Botmother. Этот конструктор доступен на русском, имеет удобный интерфейс. Позволяет сегментировать аудиторию и делать рассылки. Стоимость использования сервиса зависит от количества ботов, один обойдется в 20$ в месяц. Можно создать одного бота бесплатно, но использовать его скорее как тест, поскольку статистика, рассылки и подключения оператора будут недоступны.

6. Как создать чат-бота самостоятельно?

Создадим виртуального помощника на примере конструктора Botmother. Это можно сделать за семь несложных шагов.

  1. Шаг 1. После регистрации на сервисе мы попадаем на панель с началом создания бота. Нажимаем «Создать бота».
  2. Шаг 2. Затем выбираем «Пустой бот», чтобы создать бота с собственными конфигурациями.
  3. Шаг 3. Выбираем из меню желаемые надстройки и перетаскиваем для заполнения.
  4. Шаг 4. Заполняем для нашего бота приветственное сообщение и создаем кнопки, которые помогут пользователю быстро найти нужную страницу, информацию или услугу.
  5. Шаг 5. Задаём страницы на сайте или раздел в Facebook, на которые будут перенаправлять кнопки.
  6. Шаг 6. Сохраняем бота, нажав на кнопку в правом нижнем углу страницы.
  7. Шаг 7. Привязываем бота к нашей бызнес странице в Facebook.

Готово! Так выглядит наш бот в Facebook Messenger:

Подводим итоги

Чат-бот — это удобный помощник и для клиентов, и для бизнеса. Почему попробовать его — хорошая идея:

  • Люди ожидают быстрых ответов на их сообщения и бот мгновенно отвечает на запросы.
  • Чат-бот позволяет вернуться к диалогу в удобное время, что увеличивает шансы получить конверсию.
  • Чат-бота Facebook Messenger можно подключить как канал связи также к своему сайту или интернет-магазину.
  • Виртуальный помощник помогает уменьшить нагрузку на штат сотрудников и сэкономить бюджет.
  • Чтобы создать простой бот с кнопками не нужно привлекать команду программистов – достаточно воспользоваться готовым конструктором.

А у вас есть опыт в создании и работе с чат-ботами в Facebook Messenger? Делитесь в комментариях!

11 января 2018

В этой статье научим как создать бота в Facebook при помощи Python, Flask, библиотеки PyMessenger и локального хостинга через ngrok.

image

Когда мы пользуемся ботами в различных мессенджерах, многие из нас не представляют, насколько легко можно сделать собственного помощника. Например, немного порывшись в документации и зная основы Python, любой может создать своего бота в Facebook за предельно короткое время. В этой статье мы рассмотрим, как менее чем за один час создать простого бота в Facebook Messenger при помощи веб-фреймворка Flask и библиотеки PyMessenger.

Для создания этого бота убедитесь, что у вас установлены:

  • Python 3.6 или выше (можно скачать здесь)
  • Pip (можно скачать здесь)

При помощи pip в командной строке установите библиотеки Flask и PyMessenger:

pip3 install Flask  pip3 install pymessenger

Используя Flask, мы можем создать терминал вызова — особый способ обращения к веб-ссылке. Например, в случае https://proglib.io/puzzles/ терминалом вызова будет “/puzzles”. Когда  пользователь отправляет сообщение, Facebook пересылает данные в терминал вызова, откуда мы отправляем ответ Facebook , чтобы он показал его пользователю.

Для начала создадим простейшее приложение Flask app.py. Если вы ранее не использовали этот веб-фреймворк и хотите лучше понимать что происходит, посмотрите сжатое введение в документацию фреймворка.

from flask import Flask, request    app = Flask(__name__)    @app.route('/', methods=['GET', 'POST'])  def receive_message():      return "Hello World!"    if __name__ == '__main__':      app.run()  

При запуске приведенного кода из командной строки python app.py (или python3 app.py в случае нескольких версий Python) будет выведено сообщение, близкое к следующему:

 * Running on http://127.0.0.1:5000/ (Press CTRL C to quit)

Если вы перейдете в браузере по ссылке, полученной от приложения (в приведенном примере http://127.0.0.1:5000/), вы увидите страницу со словами “Hello World!”. То есть с этим минимальным числом строк мы создали простейшее веб-приложение. Для создания бота в Facebook мы возьмем за основу эту простую конструкцию, чтобы получать запросы пользователя и выдавать на них соответствующие ответы.

В первую очередь необходимо обеспечить обработку двух типов запросов GET и POST, которые вы могли уже заметить в приведенном выше коде. В нашем примере мы будем использовать GET-запросы, когда проверяется маркер бота в Facebook (verify token). Расширяя написанное ранее приложении Flask, добавим в функцию receive_message обработку запроса GET:

 if request.method == 'GET':      # до того как позволить людям отправлять что-либо боту, Facebook проверяет маркер,      # подтверждающий, что все запросы, получаемые ботом, приходят из Facebook          token_sent = request.args["hub.verify_token"]          return verify_fb_token(token_sent)  

Строка “hub.verify_token” соответствует маркеру. Позднее в этой статье мы обсудим, как задать эту переменную.

Если бот не получил запрос GET, он, скорее всего, получит запрос POST, при котором боту в Facebook передается сообщение, отправленное пользователем. Для этого мы дополним условие if блоком else, который будет принимать данные, полученные Facebook от пользователя:

# если запрос не был GET, это был POST-запрос и мы обрабатываем запрос пользователя      else:          # получаем сообщение, отправленное пользователем боту          output = request.get_json()          for event in output['entry']:              messaging = event['messaging']              for message in messaging:                  if message.get('message'):                  #определяем ID, чтобы знать куда отправлять ответ                  recipient_id = message['sender']['id']                  if message['message'].get('text'):                      response_sent_text = get_message()                      send_message(recipient_id, response_sent_text)                  #если пользователь отправил GIF, фото, видео и любой не текстовый объект                  if message['message'].get('attachments'):                      response_sent_nontext = get_message()                      send_message(recipient_id, response_sent_nontext)           return "Message Processed"  

В начале блока if мы используем функцию проверки маркера (токена). Facebook требует, чтобы ваш бот имел поверочный токен:

def verify_fb_token(token_sent):      '''Сверяет токен, отправленный фейсбуком, с имеющимся у вас.       При соответствии позволяет осуществить запрос, в обратном случае выдает ошибку.'''      if token_sent == VERIFY_TOKEN:          return request.args.get("hub.challenge")      return 'Invalid verification token'

Теперь, после этих первых шагов, рассмотрим процесс обработки полученного сообщения, генерации и отправки ответа. Как только будет сгенерирован ответ на запрос пользователя, его нужно будет как-то отправить. Для поддержки взаимодействий пользователя и бота в Facebook воспользуемся библиотекой PyMessenger, обеспечивающей простую поддержку POST-запросов с использованием Messenger API:

def send_message(recipient_id, response):  '''Отправляет пользователю текстовое сообщение в соответствии с параметром response.'''      bot.send_text_message(recipient_id, response)      return "success"

В качестве ответов будем отправлять случайные сообщения, подбадривающие нашего собеседника:

import random    def get_message():      '''Отправляет случайные сообщения пользователю.'''      sample_responses = ["Потрясающе!", "Я вами горжусь!", "Продолжайте в том же духе!", "Лучшее, что я когда-либо видел!"]      return random.choice(sample_responses)  

Рассмотрев основные фрагменты кода нашего бота в Facebook, соберем их вместе:

import random  from flask import Flask, request  from pymessenger.bot import Bot    app = Flask(__name__)    ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN'  VERIFY_TOKEN = 'YOUR_VERIFY_TOKEN'    bot = Bot(ACCESS_TOKEN)    #Получать сообщения, посылаемые фейсбуком нашему боту мы будем в этом терминале вызова  @app.route('/', methods=['GET', 'POST'])  def receive_message():      if request.method == 'GET':      # до того как позволить людям отправлять что-либо боту, Facebook проверяет токен,      # подтверждающий, что все запросы, получаемые ботом, приходят из Facebook          token_sent = request.args['hub.verify_token']          return verify_fb_token(token_sent)      # если запрос не был GET, это был POST-запрос и мы обрабатываем запрос пользователя      else:          # получаем сообщение, отправленное пользователем для бота в Facebook          output = request.get_json()          for event in output['entry']:              messaging = event['messaging']              for message in messaging:                  if message.get('message'):                  #определяем ID, чтобы знать куда отправлять ответ                      recipient_id = message['sender']['id']                  if message['message'].get('text'):                      response_sent_text = get_message()                      send_message(recipient_id, response_sent_text)                  #если пользователь отправил GIF, фото, видео и любой не текстовый объект                  if message['message'].get('attachments'):                      response_sent_nontext = get_message()                      send_message(recipient_id, response_sent_nontext)          return "Message Processed"    def verify_fb_token(token_sent):      '''Сверяет токен, отправленный фейсбуком, с имеющимся у вас.      При соответствии позволяет осуществить запрос, в обратном случае выдает ошибку.'''      if token_sent == VERIFY_TOKEN:          return request.args['hub.challenge']      else:          return 'Invalid verification token'    def send_message(recipient_id, response):      '''Отправляет пользователю текстовое сообщение в соответствии с параметром response.'''      bot.send_text_message(recipient_id, response)      return 'Success'    def get_message():      '''Отправляет случайные сообщения пользователю.'''      sample_responses = ["Потрясающе!", "Я вами горжусь!", "Продолжайте в том же духе!", "Лучшее, что я когда-либо видел!"]      return random.choice(sample_responses)    if __name__ == '__main__':      app.run()  

Итак, мы написали основную часть кода для работы нашего бота. Теперь нам необходимо связать его с Facebook и сделать доступным для работы через интернет. Для этого вам необходимо создать Страницу на Facebook (и аккаунт, если у вас еще его нет). После того как вы создали Страницу, перейдите на Facebook for Developers и создайте аккаунт разработчика.

image

Следующий шаг после регистрации — назвать ваше приложение (например, MyFirstApp) и указать e-mail:

image

На следующей странице вы указываете тип вашего приложения (например, “Другое”). После этого вы окажетесь на странице приложения. В меню слева выберите основные настройки: загрузите иконку приложения, определите категорию и др.

image

Далее необходимо выбрать продукт, для которого мы разрабатываем приложения. Для этого внизу меню нажмите “+Добавить продукт”, выберите на открывшейся странице Messenger и настройте его.

image

На открывшейся странице перейдите к разделу “Генерирование маркера”. Из выпадающего списка выберите созданную вами страницу и подтвердите разрешение.

image

При этом в поле справа будет автоматически сгенерирован маркер доступа к приложению (Page Access Token).

image

Скопируйте сгенерированный маркер и в файле программы app.py присвойте его значение строке ACCESS_TOKEN.

Теперь, когда у нас есть и код, и заполнены основные поля, необходимо где-то разместить код. Для этого примера воспользуемся ngrok — простым кроссплатформенным инструментом командной строки, позволяющим создать туннель к localhost, то есть запускать код локально на нашем компьютере, но делать его доступным любому (скачать ngrok можно здесь, простейшие инструкции представлены здесь. Хостинг будет работать пока включен компьютер и на нем запущен ngrok, то есть ngrok предназначен в первую очередь для тестирования и не подразумевает серьезных нагрузок.

Заставим нашего бота работать — вначале в терминале, как делали это ранее, запустим программу app.py. Определите номер порта, идущий в конце ссылки после двоеточия. Открыв второе окно терминала в той же папке, наберите команду “ngrok http” + номер порта. Для приведенного примера “http://127.0.0.1:5000/“ соответствующая комманда будет “ngrok http 5000”. На экране в разделе “Forwarding” скопируйте ссылку, начинающуюся с “https.” Эта ссылка представляет адрес, по которому ваш локальный сервер стал доступен в интернете, то есть она будет служить ссылкой на сервер бота, куда Facebook отправляет сообщения от пользователей.

Если вы попытаетесь обратиться к программе по этой ссылке, в браузере отобразится ошибка, которую мы описали в программе: Invalid verification token. Это соответствует тому, что мы запрограммировали — нам не нужны обращения к программе не из Facebook Messenger. При этом в ngrok вы увидете, что произошло обращение, так как браузер попытался подключиться к программе и загрузить иконку страницы. Изменилось, соответственно, и число подключений.

image

Обратите внимание, что сервер изменит ссылку при новом запуске ngrok.

Скопированная ссылка необходима для того, чтобы связать сервер нашего бота с Facebook Messenger. Возвращаемся к Facebook for Developers и настраиваем Webhooks.

При этом вы увидите экран наподобие следующего.

В раздел URL обратного вызова (Callback URL) вставьте скопированную ссылку на наш сервер ngrock. Для того, чтобы защитить ваш бот, Facebook требуется маркер (verify token). Когда пользователь пишет сообщения вашему боту, Facebook посылает эти сообщения вместе с маркером на сервер бота, где созданное вами приложение Flask проверяет соответствие маркера и аутентифицирует присланное сообщение как сообщение из Facebook Messenger. В качестве этой строки может использоваться любая строка. Выберите строку и присвойте это значение в app.py переменной VERIFY_TOKEN (например “TESTINGTOKEN”, но лучше выбрать что-то посложнее). Скопируйте тот же самый маркер (без кавычек) в поле Verify Token окна Webhooks.

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

Поздравляем — наш бот готов, осталось лишь его протестировать!

Тестирование бота интуитивно понятно — зайдите на Страницу, для которой мы создали бота и напишите сообщение. Если все настроено правильно, бот реагирует на сообщение пользователя одним из заготовленных нами ответов.

Поздравляем! Вы создали своего первого бота для Facebook Messenger. Теперь его можно сделать более функциональным и полезным: научить отвечать по-разному на сообщения, содержащие определенные слова или заданным образом реагировать на файлы разного формата. Вместо локального запуска бота при помощи ngrok распространенным решением является хостинг на облачной PaaS-платформе, например, Heroku. Знакомство с этими возможностями может пригодиться и в других проектах.

Оригинал статьи.

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий