Установка Webhook для работы bot на viber и отправка первого POST запроса к backend мессенджера
Опираясь на свой опыт разработки под Viber и множество неоднозначных мнений, публикую цикл статей по созданию и запуску viberbot. Для понимая полной картины в целом, будем работать с чистым REST API VIBER, без каких либо оберток.
Радио Вайбер показал себя слишком нестандартно, поэтому мы будем создавать классический диалоговый бот (
Параллельно увидим все недостатки и преимущества 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 API
Django версии 2.2
Радиовайбер-минилендинг
