Как стать автором
Обновить

Viber Bot на Python

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

Начнем

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

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 код, после чего вас перебросит к боту.

Конец

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

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.