Есть ли возможность создать клиента-vider(пользователь как программа) для отправки сообщения боту?
Для того чтобы реализовать например клиента в telegram, есть возможность создания аккаунта как программы. Далее пользуемся библиотекой telethon и все прекрасно работает. Вопрос: есть ли аналогичная возможность для мессенджера viber?
Ответы (1 шт):
Автор решения: Serg Bocharov
→ Ссылка
Конечно есть - вот документация официальная
- Установить библиотеку
pip install viberbot - Импортировать
viberbot.apiв ваш проект - Создать бота и получить токен здесь
- Настроить бота как показано ниже
- Запустить ваш вебсервер
- Привязать webhook
Настройка бота:
from viberbot import Api
from viberbot.api.bot_configuration import BotConfiguration
bot_configuration = BotConfiguration(
name='PythonSampleBot',
avatar='http://viber.com/avatar.jpg',
auth_token='YOUR_AUTH_TOKEN_HERE'
)
viber = Api(bot_configuration)
Создание сервера (как пример использован фреймворк Flask, но вы можете выбрать любой другой)
from flask import Flask, request, Response
app = Flask(__name__)
@app.route('/incoming', methods=['POST'])
def incoming():
logger.debug("received request. post data: {0}".format(request.get_data()))
# handle the request here
return Response(status=200)
context = ('server.crt', 'server.key')
app.run(host='0.0.0.0', port=443, debug=True, ssl_context=context)
Привязываем webhook
viber.set_webhook('https://mybotwebserver.com:443/')
Пример простейшего бота:
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__":
context = ('server.crt', 'server.key')
app.run(host='0.0.0.0', port=443, debug=True, ssl_context=context)