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

Конец

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

Tags:
python, viber, боты

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.