Создание полноценного Viberbot на Django 2 и Viber REST API. Часть первая — Webhook

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

Обязательные события, например, ”message”, придут в любом случае, на них специально подписываться не надо.

1. Ссылка сверху — одинаковая для всех ботов, есть в документации Viber. 2. Ваш токен

Во вкладке Body вставляем ссылку на бота.

2-right-1024x559.jpg

Если мы сделали всё правильно (а так оно и есть) — получаем статус-сообщение ОК.

В случае, если вы не пользуетесь Postman, а пишете код в PHP, привязка webhook будет выглядеть так:

Теперь сообщения, которые будут приходить на вашего бота, будут попадать на этот webhook в виде JSON объектов.

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

Теперь пропишем функцию отправки сообщения в Viber — обычный POST запрос.

После того как пользователь откроет диалог с нашим ботом в Viber — наш бот получит JSON с информацией о пользователе и типом события conversation_started.

ready-bot-in-viber.jpg

Что с ним пока нельзя делать — это создать глубокую ссылку на него (с использованием URI аккаунта, как мы писали выше) и найти его во вкладке с ботами Viber (discover screen) – ни среди ботов, представленных в подборках, ни при помощи поиска. Для того, чтобы ваше детище появилось там, нужно получить эппрув от Viber, заполнив «форму публикации бота» (есть в документации). У Viber целая куча предрассудков требований, которым бот должен удовлетворять для утверждения и публикации, включая «уникальную ценность» и хотя бы минимальное понимание свободного ввода пользователя. Подробнее о публикации бота расскажем в будущем.

Авторы статьи:

Роман Брязгалов, php-разработчик, специалист по диалоговым системам Singularika

Валерия Маляренко, копирайтер Singularika

class=”post_content” itemprop=”articleBody”> –> 13 авг в 2019 63K

Поговорим о создании простого чат-бота Viber для пересылки сообщения. 

Термины и определения

Чат-бот Viber – программа Viber, реализованная через паблик-аккаунт, с которой пользователь может взаимодействовать для достижения какой-либо цели.

Паблик-аккаунты – специально созданные публичные аккаунты для общения и взаимодействия с клиентами (в том числе с помощью чат-ботов). Частным случаем паблик-аккаунтов являются паблик-чаты, где общается какая-либо группа людей.

Viber-ссылка – специальная ссылка для открытия контакта, чат-бота или другого ресурса в приложении Viber. Начинается с особого префикса viber://. Например: viber://pa?chatURI=hello2bot.

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

Цель: бот будет пересылать обратно наше сообщение.

По сути, площадка для размещения чат-бота – это обычный web-хостинг. А сам бот в нашем случае – один PHP-файл.

Если вы сами хотите развернуть хостинг, то можно использовать связку: Apache + PHP + MySQL, но лучше воспользоваться услугами хостинг-провайдера, где установлено все необходимое, например, Timeweb.

Технология работы бота проста:

  • Мы пишем в чат сообщение, оно уходит на сервер Viber.
  • Viber обращается к нашему серверу (скрипту) через HTTP-запрос.
  • На это наш сервер (скрипт) предоставляет ответ, который уходит обратно на сервер Viber.
  • Ответ приходит в чат.

А теперь пошаговый процесс создания (из 13 шагов):

1. Переходим на сайт разработки. Предварительно у вас на смартфоне должно быть установлено приложение Viber.

2. Вводим номер телефона и авторизуемся.

3. Viber пришлет код подтверждения – вводим его и нажимаем «Дальше».

4. Нажимаем кнопку «Создать бот» и заполняем необходимые поля:

  • Account Image – загрузите картинку 400×400, которая будет отображаться в профиле паблик-аккаунта и как значок в сообщениях.
  • Account Name – имя, которое будет отображаться в заголовке у бота.
  • URI – придумайте идентификатор, по которому можно будет найти бота.
  • Category – выберите одну из 7 основных категорий.
  • Subcategory – выберите из списка подкатегорию, в которой будет функционировать ваш бот.
  • Language – выберите основной язык.
  • Account Description – подробнее опишите создаваемого бота.
  • Website Address – по желанию укажите адрес вашего сайта.
  • Email Address – адрес электронной почты.
  • Location – локация, местоположение.

5. Ставим галочку о принятии соглашения и нажимаем «Create».

6. После этого вы получите токен для аутентификации Viber. Скопируйте и сохраните его.

7. Теперь загрузите к себе на компьютер заготовку для чат-бота: github.com/the-lans/bots/tree/master/Viberbot

Прямая ссылка на скачивание всего архива: github.com/the-lans/bots/archive/master.zip

8. Распакуйте и откройте файлы index.php и php из папки Viberbot.

9. В этих файлах необходимо изменить некоторые параметры.

В файле index.php необходимо изменить: 

  • AUTH_TOKEN на токен вашего паблик-аккаунта Viber.
  • HelloBot на имя вашего бота, под которым он будет вам отвечать.

В файле set_webhook.php необходимо изменить: 

  • AUTH_TOKEN на токен вашего паблик-аккаунта Viber.
  • WEBHOOK_URL на URL вашего вебхука, т.е. URL нахождения файла index.php на вашем хостинге.

10. По требованию Viber на вашем сайте должен быть установлен сертификат SSL. Такой сертификат можно заказать как платно (например, Sectigo Positive SSL), так и бесплатно (SSL Let’s Encrypt). Подробнее о SSL-сертификатах читайте в Справочном центре.

11. Когда SSL-сертификат станет активным, заходим в панель хостинга Timeweb через файловый менеджер:

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

12. Установим вебхук для нашего бота в Viber. Заходим в браузер и запускаем файл set_webhook.php. Если все хорошо, выдается следующее сообщение (см. ниже). Если у вас не получилось установить вебхук, внимательно проверьте URL-адрес (соблюдение регистра букв) или корректность PHP-файла.

13. Заходим в Viber на смартфоне. Последовательно нажимаем в меню: Еще –> Паблик аккаунты –> HelloBot.

Если паблик-аккаунт скрыт, нажимаем «Показать».

Проверяем результат

В паблик-аккаунте нажимаем кнопку «Сообщение» и начинаем взаимодействие с ботом. Пишем любую фразу, бот должен нам ответить тем же. Если бот отказывается отвечать, проверьте корректность PHP-файла, наличие SSL-сертификата и пр.

Нами был успешно создан и запущен чат-бот для Viber. Теперь можно подумать о расширении его функционала. Документацию Viber REST API можно прочитать на официальном сайте мессенджера.

Здесь мы рассмотрели создание бота на PHP. Бота под Viber можно создать также на Python и Node.JS.

Илья +5 7 min read

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

Рабочее окружение

Для разработки нам понадобится сервер с nginx или apache2. В качестве языка разработки выбран PHP, который не имеет официальной библиотеки для работы с Viber API. Но товарищ Bogdaan предоставил свой SDK viber-bot-php, которым мы и воспользуемся. 

Для других языков официальный сайт предоставляет следующие SDK:

Как основу для сервера, используем Ubuntu Server 16.04 с установленным на нем apache2 и PHP7. Устанавливать SDK будем через composer. За основу бота выбран любимый автором Kohana framework.

Библиотека viber-bot-php требует версию PHP 5.5.0 или выше. Также, Viber API требует, чтобы у домена, на котором будет функционировать чат-бот, был установлен сертификат безопасности, например бесплатный Let’s Encrypt. Самоподписанные сертификаты не подойдут. 

Заявка на чат

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

Заполняем поля информацией, на основе которой будет приниматься решение об одобрении заявки.

Уделите внимание полноте и корректности данных для большей вероятности одобрения вашей заявки.

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

В случае одобрения заявки, вы увидите что-то вроде этого:

Ура! Нам одобрили заявку. Теперь у нас есть возможность создать публичный чат, на основе которого будет создан чат-бот.

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

Перезапускаем приложение, жмем справа наверху на иконку

и далее на 

Попадаем в форму создания публичного чата. Нас интересует APP KEY. Он используется в боте для авторизации на серверах Viber и подтверждения, что мы прошли проверку. Выглядит он примерно так:

4577b...f2988d-7d00d...734b6-1c2b98...bb2e

С подготовкой к разработке мы успешно справились. Теперь дело за малым: написать бота. Итак, приступим.

Разработка

Как уже говорилось ранее, автор будет вести разработку на основе фреймворка Kohana, в частности версии 3.3.6. После распаковки файлов в рабочую директорию, структура проекта выглядит следующим образом:

С помощью composer установим viber-bot-php библиотеку:

cd path/to/www composer require bogdaan/viber-bot-php

Полдела сделано. Теперь поговорим о структуре бота.

Структура бота

Основными составляющими бота являются два URL. Один для настройки (другими словами регистрации в Viber) бота, второй для обработки поступающих пользовательских команд в чате.

Первый URL уведомляет сервера Viber о том, куда слать вводимые пользователем данные. Второй URL обрабатывает те самые присланные команды.

Создадим контроллер Viber с двумя экшенами: setup и bot.

webhookUrl = 'https:///'; $this->token = ''; $this->name = ''; $this->avatar = 'https:///path/to/avatar.png'; public function action_setup() { $this->webhookUrl .= 'viber/bot'; try { $client = new Client([ 'token' => $this->token ]); $result = $client->setWebhook($this->webhookUrl); echo 'Success!'; } catch (Exception $e) { echo $e->getMessage(); } } public function action_bot() { $botSender = new Sender([ 'name' => $this->name, 'avatar' => $this->avatar, ]); try { $bot = new Bot(['token' => $this->token]); $bot->onSubscribe(function ($event) use ($bot, $botSender) { // Пользователь подписался на чат $receiverId = $event->getSender()->getId(); $bot->getClient()->sendMessage( (new ViberApiMessageText()) ->setSender($botSender) ->setReceiver($receiverId) ->setText('Thank you for subscribe!'); ); }) ->onConversation(function ($event) use ($bot, $botSender) { // Пользователь вошел в чат // Разрешается написать только одно сообщение $receiverId = $event->getSender()->getId(); $bot->getClient()->sendMessage( (new ViberApiMessageText()) ->setSender($botSender) ->setReceiver($receiverId) ->setText('Welcome!'); ); }) ->onText('|Hello|si', function ($event) use ($bot, $botSender) { // Напечатали 'Hello' $receiverId = $event->getSender()->getId(); $user = $event->getSender()->getName(); $answer = 'Hello, ' . $user; $bot->getClient()->sendMessage( (new ViberApiMessageText()) ->setSender($botSender) ->setReceiver($receiverId) ->setText($answer); ); }) ->run(); } catch (Exception $e) { Log::instance()->add(Log::ERROR, $e->getMessage()); } } }

Настроим бота. Перейдем в браузере по адресу https://viber/setup. Если мы видим“Success!”, то бот настроен, можно переходить к следующему пункту.

Теперь все данные от клиента будут отправляться на адрес https://viber/bot, где находится наш обработчик событий. Перейдем в сам чат.

Кстати, html-ссылка перехода в чат выглядит следующим образом: 

Link to chat

Если все настроено верно, мы увидим приветствие:

Мы видим, как сработал метод onConversation. По правилам Viber, пользователю, который не подписан на чат, разрешается написать только одно сообщение в целях исключения спама.

Хорошо, а что произойдет, если мы подпишемся на чат? Давайте попробуем.

Метод onSubscribe срабатывает при подписке пользователя на чат. С того момента, как это событие произошло, мы можем за раз слать несколько сообщений.

Давайте поздороваемся с нашим ботом: введем “Hello”. 

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

Мы рассмотрели основные методы обработки событий в боте и только один способ ответа бота пользователю — текстовый. Помимо него, есть еще:

  • стикеры
  • кнопки
  • ссылки

О данных типах сообщений мы поговорим в следующих статьях.

<textarea> { “buttonsSelector” : “.sharing__main-button, .sharing__button” } </textarea>

Читайте далее

Мы рассказываем об интересных технологиях и делимся опытом их использования.

Получаем бесплатный SSL сертификат от Let’s Encrypt Поднимаем веб‑сервер на macOS Аутентификация с помощью JSON Web Token </ul>

  • ? Технотекст 2020
  • Tutorial

Установка Webhook для работы bot на viber и отправка первого POST запроса к backend мессенджера

Опираясь на свой опыт разработки под Viber и множество неоднозначных мнений, публикую цикл статей по созданию и запуску viberbot. Для понимая полной картины в целом, будем работать с чистым REST API VIBER, без каких либо оберток. Радио Вайбер показал себя слишком нестандартно, поэтому мы будем создавать классический диалоговый бот (коих много тысяч развелось в telegram). Параллельно увидим все недостатки и преимущества botviber и поймем: чему в России легче быть — botviber VS bottelegram, главные отличия бот разработки этих платформ. При более скудном наборе методов чем в телеге — тем не менее, в Viber можно создавать гораздо более эффектные UI интерфейсы и не ограничивать себя серым унылым цветом кнопок меню и инлайн кнопочек. Статья больше расcчитана на новичков, кто не успел разобраться с REST API Viber. В течение месяца по 1-2 tutorial в неделю кто захочет, тот научиться создавать боты на мессенджере Viber, c личной админ-панель, инструментами рассылки bulk-messages, без каких либо конструкторов и платформ. Также создадим minilanding-page (как у телеграм-ботов) для поиска и продвижения вашего бота. Я рекомендую параллельно изучать Django, кто еще не начал, и особенностей его работы в develop и production режимах.

Не хватает бота — тогда начнем

1. Установим и запустим Django >= 2.1 и Python >=3.6. создадим приложение myviberbot стандартной командой менеджера Django:

python manage.py startapp myviberbot

Не забываем внести его в файл settings.py в этот раздел:

# Фрагмент базового файла settings.py   DEBUG = True  ALLOWED_HOSTS = ['*']  # Application definition  INSTALLED_APPS = [     'django.contrib.admin',     'django.contrib.auth',     'django.contrib.contenttypes',     'django.contrib.sessions',     'django.contrib.messages',     'django.contrib.staticfiles',     'myviberbot', # указываем название вашего приложения ] # 

Допустим я привязал свой HTTPS домен и хочу установить webhook для viber-bot по адресу:yourdomain.ru/webhook2020 — А вы меняйте yourdomain.ru на свой домен разумеется. И обработку всех событий будем вести в функции def trx_bot() из myviberbot.views — но о ней далее… В первую очередь внесём соответствующие поправки в файл urls.py в листинге его полное содержимое:

# urls.py from django.contrib import admin from django.urls import path from myviberbot.views import trx_bot from django.conf import settings from django.conf.urls.static import static  urlpatterns = [     path('admin/', admin.site.urls),     path('webhook2020', trx_bot), #url адрес нашего проекта - webhook2020,  # укажите свой, желательно посложнее      ] 

Если сильно не углубляться в тонкости Django — тут, в коде выше, мы направили абсолютно все запросы (request) по адресу webhook2020 в функцию trx_bot, которая расположена в папке проекта myviberbot в файле views.py. Рассмотрим его ниже.

# views.py из проекта myviberbot  from django.shortcuts import HttpResponse from django.views.decorators.csrf import csrf_exempt  @csrf_exempt def trx_bot(request):     if request.method == "POST":         viber = json.loads(request.body.decode('utf-8'))         if viber['event'] == 'webhook':             print(viber)             print("Webhook успешно установлен") # - печатаем сообщение в  # консоль об успешном соотвещ событии установки webhook             return HttpResponse(status=200)         else:             print("Это не Webhook - пробуй еще раз, или используй POSTMAN")              return HttpResponse(status=500)         return HttpResponse(status=200) 

После получения 200 ОК от нас — сервера backend viber готовы с нами работать. Вы увидите сообщение которые пришло вам в мессенджер в чат вашего бота (функция диалога добавлен или Chat 1to1 added). Но как отправить POST-запрос к backend Viber или установить Webhook — этот вопрос волнует многих, кто привык работать с telegram, методом get, но ничего страшного — внимательно читаем дальше: 2. Я уверен что к этому моменту, вы уже получили токен бота тут и развернули приложение django на хостинге (VDS или Shared) или в локальной среде (в этом случае поможет временный туннель ngrok), a) Если тестируем проект на локальной машине, то командой менеджера стартуем его: python manage.py runserver После успешного старта — привязываем ngrok. б) А способов запуска на хостинге ну очень много — лично я использую passenger на beget. В случае с beget, ставьте версию контейнера с php5.6 не выше — это совет от begetовцев.

Итак — Приложение запустилось — ставим webhook

Кто умеет использовать POSTMAN плагин для Chrome — может пропустить следующий абзац, и послать POST для webhook прямо из браузера. Мы же создадим файл на локальной машине с любым названием например sethook.py, не забывая про библиотеку requests (pip install requests)

#sethook import requests import json auth_token = 'xxxxxxxxx-ttttttttttttttttt-wwwwwwwwwwww' # тут ваш токен полученный в начале #п.2 hook = 'https://chatapi.viber.com/pa/set_webhook' headers = {'X-Viber-Auth-Token': auth_token}   sen = dict(url='https://yourdomain.ru/webhook2020',            event_types = ['unsubscribed', 'conversation_started', 'message', 'seen', 'delivered']) # sen - это body запроса для отправки к backend серверов viber #seen, delivered - можно убрать, но иногда маркетологи хотят знать, #сколько и кто именно  принял и почитал ваших сообщений,  можете оставить)  r = requests.post(hook, json.dumps(sen), headers=headers) # r - это пост запрос составленный по требованиям viber  print(r.json()) # в ответном print мы должны увидеть "status_message":"ok" - и это значит, #  что вебхук установлен 

Запускаем его командой с рабочего каталога: python sethook.py Вот и Всё! Webhook установлен методом POST. Вы видите сообщение которое пришло вам в чат (Функция диалога добавлена), а это значит что webhook установлен. Продолжение следует… В следующей статье мы разберем event[«conversation_started»], для первичного контакта с пользователями и инициализации интерактива с ними, вы узнаете что ваш viberbot знает обо всех пользователях и чего он не знает. ЧАСТЬ 2:Создание полноценного Viberbot на Django 2 и Viber REST API. Часть вторая — Сonversation_started Материалы:Документация viber REST APIDjango версии 2.2Радиовайбер-минилендингИспользуемые источники:

  • https://singularika.com/ru/chatbots/how-to-create-a-viber-chatbot/
  • https://timeweb.com/ru/community/articles/kak-sozdat-chat-bota-dlya-viber-1
  • https://codex.so/viber-bot
  • https://habr.com/ru/post/486826/

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий