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

от автора

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

Опираясь на свой опыт разработки под Viber и множество неоднозначных мнений, публикую цикл статей по созданию и запуску viberbot. Для понимая полной картины в целом, будем работать с чистым REST API VIBER, без каких либо оберток.
Радиовайбер показал себя слишком нестандартно, поэтому мы будем создавать классический диалоговый бот (коих много тысяч развелось в telegram).
Параллельно увидим все недостатки и преимущества botviber и поймем: чему в России легче быть — botviber VS bottelegram, главные отличия бот разработки этих платформ.

Статья больше расcчитана на новичков, кто не успел разобраться с REST API Viber.

В течение месяца по 1-2 tutorial в неделю кто захочет, тот научиться создавать боты на мессенджере Viber, без конструкторов и платформ.
Также рекомендую параллельно изучать 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),     ] 

Если сильно не углубляться в тонкости 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 успешно установлен")             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'])  #seen, delivered - можно убрать, но иногда маркетологи хотят знать, #сколько и кто именно  принял и почитал ваших сообщений,  можете оставить)  r = requests.post(hook, json.dumps(sen), headers=headers)  print(r.json()) 

Запускаем его командой с рабочего каталога:
python sethook.py

Вот и Всё! Webhook установлен методом POST. Вы видите сообщение которое пришло вам в чат (Функция диалога добавлена), а это значит что webhook установлен.

Продолжение следует…

В следующей статье мы разберем event[«conversation_started»], для первичного контакта с пользователями и инициализации интерактива с ними, вы узнаете что ваш viberbot знает обо всех пользователях и чего он не знает.

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

ссылка на оригинал статьи https://habr.com/ru/post/486826/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *