Совсем недавно я принялся писать бота с расписанием для групп под телеграмм, и спустя каких-то пару дней мой бот готов. Все это хорошо, ведь у телеграмм есть хорошие библиотеки и чрезвычайно активное комьюнити, но не будь их, сроки создания бота увеличились бы в несколько раз. Но тут я решил посмотреть, как там обстоят дела в вайбере, так как захотел создать копию.
Начнем
После небольших поисков я нашел документацию и пару, тройку лишних копирующих друг друга туториалов, но толку в этом не много. Но нужно же что-то делать, подумал я установил питоновскую библиотеку.
pip install viberbot
На этом конечно, ничего не закончилось, ведь дальше я пошел копировать пример эхо-бота.
from flask import Flask, request, Response
from viberbot import Api
from viberbot.api.bot_configuration import BotConfiguration
from viberbot.api.messages import VideoMessage
from viberbot.api.messages.text_message import TextMessage
import logging
from viberbot.api.viber_requests import ViberConversationStartedRequest
from viberbot.api.viber_requests import ViberFailedRequest
from viberbot.api.viber_requests import ViberMessageRequest
from viberbot.api.viber_requests import ViberSubscribedRequest
from viberbot.api.viber_requests import ViberUnsubscribedRequest
app = Flask(__name__)
# сюда нужно вставить инфу со своего бота
viber = Api(BotConfiguration(
name='PythonSampleBot',
avatar='http://site.com/avatar.jpg',
auth_token='445da6az1s345z78-dazcczb2542zv51a-e0vc5fva17480im9'
))
@app.route('/', methods=['POST'])
def incoming():
logger.debug("received request. post data: {0}".format(request.get_data()))
# every viber message is signed, you can verify the signature using this method
if not viber.verify_signature(request.get_data(), request.headers.get('X-Viber-Content-Signature')):
return Response(status=403)
# this library supplies a simple way to receive a request object
viber_request = viber.parse_request(request.get_data())
if isinstance(viber_request, ViberMessageRequest):
message = viber_request.message
# lets echo back
viber.send_messages(viber_request.sender.id, [
message
])
elif isinstance(viber_request, ViberSubscribedRequest):
viber.send_messages(viber_request.get_user.id, [
TextMessage(text="thanks for subscribing!")
])
elif isinstance(viber_request, ViberFailedRequest):
logger.warn("client failed receiving message. failure: {0}".format(viber_request))
return Response(status=200)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=443, debug=True)
Но запустить его оказалось не так просто. Для начала пришлось потрать пару минут на создание токена (ну и всего остального) https://partners.viber.com/account/create-bot-account . Просто так взять, и запустить его локально не выйдет (по крайней мере у меня не вышло), в документации, что я нашел (https://developers.viber.com/docs/api/python-bot-api/) ставится вебхук, поэтому мы сделаем так же.
Ставим вебхук
Первый удобный и бесплатный хостинг, что я вспомнил это хероку. Так что создаем приложение, подключаем к репозиторию и по кнопке все деплоим. О том как создать и залить приложение на хероку можете найти в гугле, ну или посмотреть чуть ниже.
Деплой
Нам нужен файл main.py, а именно тот код, пример эхо-бота
requirements.txt с зависимостями (установятся через pip)
gunicorn
flask
viberbot
runtime.txt
python-3.7.10
Procfile
web: gunicorn main:app
Далее, после того как деплой прошел успешно, обязательно смотрим логи, и если все ок, переходим к следующей части.
Собственно нужно поставить сам вебхук. То есть у нас есть сервер, который может принимать сообщения и отвечать на них, но вайбер про него пока не знает. Для того, чтобы дать понять вайберу на какой сервер слать запросы нам нужно воспользоваться его API. Итак, берем часть кода с примера и добавляем одну строчку.
from viberbot import Api
from viberbot.api.bot_configuration import BotConfiguration
viber = Api(BotConfiguration(
name='PythonSampleBot',
avatar='http://site.com/avatar.jpg',
auth_token='445da6az1s345z78-dazcczb2542zv51a-e0vc5fva17480im9'
))
viber.set_webhook('ссылка на ваш сервер с ботом')
Как же написать нашему боту? Для этого идите в Viber Admin Panel и там отсканируйте qr код, после чего вас перебросит к боту.

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