Используйте эту библиотеку для разработки бота для платформы Viber. Библиотека доступна на GitHub , а также пакет на PyPI.
Этот пакет можно импортировать с помощью pip, добавив в ваш requirements.txt
следующее:
viberbot == 1.0.11
- Лицензия
- Предварительные требования к библиотеке
- Приступим!
- Установка
- Простой Echo Bot
- Во-первых, давайте импортируем и настроим нашего бота
- Создайте сервер HTTPS
- Установка веб-перехватчика
- Ведение журнала
- Предоставляете ли вы основные типы сообщений?
- Давайте сложим все это и ответим сообщением!
- Viber API
- Api class
- Новый API ()
- Api.set_webhook (url)
- Api.unset_webhook ()
- Api.get_account_info ()
- Api.verify_signature (данные_запроса, подпись)
- Api.parse_request (request_data)
- Api.send_messages (to, messages)
- Api.post_messages_to_public_account (to, messages)
- Api. get_online (viber_user_ids)
- Api.get_user_details (viber_user_id)
- Объект запроса
- ViberConversationStartedRequest объект
- Объект ViberDeliveredRequest
- объект ViberFailedRequest
- объект ViberMessageRequest
- объект ViberSeenRequest
- Объект ViberSubscribedRequest
- Объект ViberUnsubscribedRequest
- объект UserProfile
- Объект сообщения
- объект TextMessage
- объект URLMessage
- объект ContactMessage
- Объект PictureMessage
- объект VideoMessage
- Объект LocationMessage
- объект StickerMessage
- Объект FileMessage
- объект RichMediaMessage
- объект KeyboardMessage
- Отправка приветственного сообщения
- Приветственное сообщение
- Сообщество
Лицензия
Эта библиотека выпущена в соответствии с условиями лицензии Apache 2.0. Дополнительную информацию см. В разделе «Лицензия».
Предварительные требования к библиотеке
- python> = 2.7.0
- Активная учетная запись Viber на платформе, которая поддерживает публичные учетные записи/ботов (iOS/Android). Эта учетная запись будет автоматически назначена администратором учетной записи в процессе создания учетной записи.
- Активная общедоступная учетная запись/бот – создайте учетную запись здесь.
- Токен аутентификации учетной записи – уникальный идентификатор учетной записи, используемый для проверки вашей учетной записи во всех запросах API. Как только ваша учетная запись будет создана, ваш токен аутентификации появится на экране «Изменить информацию» учетной записи (только для администраторов). Каждый запрос, отправленный в Viber учетной записью, должен содержать токен.
- Webhook – используйте URL-адрес конечной точки сервера, поддерживающий HTTPS. При развертывании на собственном настраиваемом сервере вам понадобится доверенный (ca.pem) сертификат, а не самозаверяющий. Прочтите в нашем блоге о том, как протестировать своего бота локально.
Приступим!
Установка
Создать базового бота Viber просто:
- Установите библиотеку с помощью pip
pip install viberbot
- Импортируйте библиотеку
viberbot.api
в свой проект - Создайте общедоступную учетную запись или бота и используйте API ключ от https://developers.viber.com
- Настройте своего бота, как описано в документации ниже.
- Запустите веб-сервер
- Вызов
set_webhook (url)
с URL-адресом вашего веб-сервера
Простой Echo Bot
Во-первых, давайте импортируем и настроим нашего бота
из viberbot import Apifrom viberbot.api.bot_configuration import BotConfigurationbot_configuration = BotConfiguration ( name = 'PythonSampleBot', avatar = 'http://viber.com/avatar.jpg', auth_token = 'YOUR_AUTH_TOKEN_HERE') viber = Api (bot_configuration)
Создайте сервер HTTPS
Следующее, что вам нужно сделать, это запустить сервер https. и да, как мы сказали в предварительных условиях, это должен быть сервер https. Создайте сервер, как вам нравится, например, с помощью Flask
:
из flask import Flask, request, Responseapp = Flask (__ name __) @ app .route ('/incoming', methods = ['POST']) def incoming (): logger.debug ("Полученный запрос. Данные публикации: {0}". format (request.get_data ())) # обрабатываем запрос здесь return Response (status = 200) context = ('server.crt', 'server.key') app.run (host = '0.0.0. 0 ', port = 443, debug = True, ssl_context = context)
Установка веб-перехватчика
После сервер запущен и работает, вы можете установить веб-перехватчик. Viber будет отправлять сообщения, отправленные на этот URL. веб-сервер должен иметь выход в Интернет.
viber.set_webhook ('https://mybotwebserver.com:443/')
Ведение журнала
Эта библиотека использует стандартный журнал Python. Если вы хотите видеть его журналы, вы можете настроить регистратор:
logger = logging.getLogger () logger.setLevel (logging.DEBUG) handler = logging.StreamHandler () formatter = logging.Formatter ('% (asctime) s -% (name) s -% (levelname) s -% (message) s') handler.setFormatter (formatter) logger.addHandler (handler)
Предоставляете ли вы основные типы сообщений?
Ну, забавно спросите вы. Да. Все типы сообщений находятся в пакете viberbot.api.messages
. Вот несколько примеров:
из viberbot.api.messages import (TextMessage, ContactMessage, PictureMessage, VideoMessage) из viberbot.api.messages.data_types.contact import Contact # создание текста messagetext_message = TextMessage (text = "образец текстового сообщения!") # создание контактного сообщенияcontact = Contact (name = "Viber user", phone_number = "0123456789") contact_message = ContactMessage (contact = contact) # создание графического сообщенияpicture_message = PictureMessage ( text = "Проверить это", media = "http://site.com/img.jpg") # создание видеосообщенияvideo_message = VideoMessage (media = "http://mediaserver.com/video.mp4", size = 4324 )
Вы заметили, как мы создали TextMessage
? Вам следует ознакомиться со множеством типов сообщений.
- Текстовое сообщение
- URL-адрес сообщения
- Контакт Сообщение
- Сообщение с изображением
- Видео сообщение
- Сообщение о местоположении
- Сообщение-стикер
- Сообщение Rich Media
- Сообщение с клавиатуры
Создать их очень просто! У каждого объекта сообщения есть собственный уникальный конструктор, соответствующий его реализации API, щелкните по ним, чтобы увидеть его! Ознакомьтесь с полной документацией по API для более продвинутого использования.
Давайте сложим все это и ответим сообщением!
from flask import Flask, request, Responsefrom viberbot import Apifrom viberbot.api.bot_configuration import BotConfigurationfrom viberbot.api.messages import VideoMessagefrom viberbot.api.messages.text_message импорта TextMessageimport loggingfrom viberbot.api.viber_requests импортировать ViberConversationStartedRequestfrom viberbot.api.viber_requests импорта ViberFailedRequestfrom viberbot.api.viber_requests импортировать ViberMessageRequestfrom viberbot.api.viber_requests импортировать ViberSubscribedRequestfrom viberbot.api.viber_requests импортировать ViberUnsubscribedRequestapp = кОЛБУ (__ 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 ("получил запрос. данные публикации : {0} ". Format (request.get_data ())) # каждое сообщение viber подписано, вы можете проверить подпись с помощью этого метода, если не viber.verify_signature (request.get_data (), request.headers.get ('X -Viber-Content-Signature ')): return Response (status = 403) # эта библиотека предоставляет простой способ получить объект запроса viber_request = viber.parse_request (request.get_data ()) if isinstance (viber_request, ViberMessageRequest): message = viber_request.message # позволяет вернуть эхо viber.send_messages (viber_request.sender.id, [message]) elif isinstance (viber_request, ViberSubscribedRequest): viber.send_messages (viber_request.get_user.id, text = "спасибо за подписку!" ")]) elif isinstance (viber_request, ViberFailedRequest): logger.warn (" клиент не получил сообщение. ошибка: {0} ". format (viber_request)) return Response (st atus = 200) if __name__ == "__main__": context = ('server.crt', 'server.key') app.run (host = '0.0.0.0', port = 443, debug = True, ssl_context = context )
Как видите, существует несколько типов Request
, вот их список.
Viber API
Api class
из viberbot import Api
- Api
- init (bot_configuration)
- .set_webhook (url, webhook_events) ⇒
Список зарегистрированных_типов событий
- .unset_webhook () ⇒
Нет
- .get_account_info () ⇒
объект
- .verify_signature (данные_запроса, подпись) ⇒
boolean
- .parse_request (request_data) ⇒
ViberRequest
- .send_messages (to, messages) ⇒
список отправленных токенов сообщений
- .get_online (viber_user_ids) ⇒
словарь статусов пользователей
- .get_user_details (viber_user_id) ⇒
словарь пользователя da ta
- .post_messages_to_public_account (to, messages) ⇒
список отправленных токенов сообщений
Новый API ()
Param | Тип | Описание |
---|---|---|
конфигурация-бота | object |
BotConfiguration |
Api.set_webhook (url)
Param | Тип | Описание |
---|---|---|
url | string |
URL вашего веб-сервера |
webhook_events | list |
дополнительный список подписанных событий |
Возвращает Список зарегистрированных_типов событий
.
event_types = viber. set_webhook ('https://example.com/incoming')
Api.unset_webhook ()
Возвращает None
.
viber.unset_webhook()
Api.get_account_info ()
Возвращает объект
со следующим JSON.
account_info = viber.get_account_info ()
Api.verify_signature (данные_запроса, подпись)
Param | Тип | Описание |
---|---|---|
request_data | строка |
данные публикации из запроса |
подпись | строка |
отправляется как заголовок X-Viber-Content-Signature |
Возвращает логическое
, предлагающее правильность подписи.
, если не viber.verify_signature (request.get_data (), request.headers.get ('X-Viber-Content-Signature')) : return Response (status = 403)
Api.parse_request (request_data)
Param | Тип | Описание |
---|---|---|
request_data | строка |
данные сообщения из request |
Возвращает объект ViberRequest
.
Есть список ViberRequest объекты
viber_request = viber.parse_request (request.get_data ())
Api.send_messages (to, messages)
Param | Введите | Описание |
---|---|---|
в | строка |
Идентификатор пользователя Viber |
messages | list |
список Message объектов |
Возвращает список
токенов отправленных сообщений.
tokens = viber.send_messages (to = v iber_request.get_sender (). get_id (), messages = [TextMessage (text = "образец сообщения")])
Api.post_messages_to_public_account (to, messages)
Param | Тип | Описание |
---|---|---|
отправитель | строка |
Идентификатор пользователя Viber |
messages | список |
список Message объектов |
Возвращает список
токенов отправленных сообщений.
tokens = viber.post_messages_to_public_account (sender = viber_request.get_sender (). get_id (), messages = [TextMessage (text = "образец сообщения")])
Api. get_online (viber_user_ids)
Param | Тип | Описание |
---|---|---|
viber_user_ids | массив строк |
Массив идентификаторов пользователей Viber |
Возвращает словарь пользователей
.
users = Api.get_online (["user1id", "user2id"])
Api.get_user_details (viber_user_id)
Param | Тип | Описание |
---|---|---|
viber_user_ids | string |
Идентификатор пользователя Viber |
get_user_details
функция будет получать данные о конкретном пользователе Viber на основе его уникального идентификатора пользователя. Идентификатор пользователя может быть получен из обратных вызовов, отправленных в учетную запись относительно действий пользователя. Этот запрос может быть отправлен дважды в течение 12 часов для каждого идентификатора пользователя.
user_data = Api.get_user_details ("userId")
Объект запроса
Param | Тип | Примечания |
---|---|---|
event_type | string |
в соответствии с EventTypes enum |
timestamp | long |
Эпоха времени запроса |
- ViberRequest
- .event_type ⇒
string
- .timestamp ⇒
long
- .event_type ⇒
ViberConversationStartedRequest объект
Наследуется от ViberRequest
Событие начала беседы срабатывает, когда пользователь открывает беседу с общедоступной учетной записью/ботом с помощью кнопки «сообщение» (находится в информации учетной записи экран) или с помощью ссылки на контент.
Это событие не считается событие подписки и не позволяет учетной записи отправлять сообщения пользователю; однако это позволит отправить пользователю одно «приветственное сообщение». См. Отправку приветственного сообщения ниже для получения дополнительной информации.
Param | Type | Примечания |
---|---|---|
event_type | строка |
всегда равно значению EventType.CONVERSATION_STARTED |
message_token | строка |
Уникальный идентификатор сообщения |
type | string |
Конкретный тип события начало_разговора . |
context | string |
Любые дополнительные параметры добавлен к глубокой ссылке, используемой для доступа к беседе, переданной в виде строки |
user | UserProfile |
пользователь начал диалог UserProfile |
подписался | boolean |
Указывает, подписан ли пользователь уже |
- ViberConversationStartedRequest
- токен_сообщения ⇒
string
- тип ⇒
string
- контекст ⇒
string
- user ⇒
UserProfile
- токен_сообщения ⇒
Объект ViberDeliveredRequest
Наследуется от ViberRequest
Param | Тип | Примечания |
---|---|---|
event_type | string |
всегда равно значению EventType.DELIVERED |
message_token | string |
Уникальный идентификатор сообщения |
user_id | string |
Уникальный идентификатор пользователя Viber |
- ViberDeliveredRequest
- message_token ⇒
string
- user_id ⇒
string
- message_token ⇒
объект ViberFailedRequest
Наследуется от ViberRequest
Param | Type | Примечания |
---|---|---|
event_type | string |
всегда равно значению EventType.FAILED |
message_token | строка |
Уникальный идентификатор сообщения |
user_id | string |
Уникальный идентификатор пользователя Viber |
desc | строка |
Описание ошибки |
- ViberFailedRequest
- токен_сообщения ⇒
string
- user_id ⇒
string
- desc ⇒
строка
- токен_сообщения ⇒
объект ViberMessageRequest
Наследует из ViberRequest
Param | Type | Примечания |
---|---|---|
event_type | строка |
всегда равно значению EventType. СООБЩЕНИЕ |
message_token | строка |
Уникальный идентификатор сообщения |
message | Сообщение |
Сообщение объект |
sender | UserProfile |
пользователь начал диалог UserProfile |
- ViberMessageRequest
- токен_сообщения ⇒
string
- message ⇒
Message
- отправитель ⇒
UserProfile
- токен_сообщения ⇒
объект ViberSeenRequest
Наследуется от ViberRequest
Param | Type | Примечания |
---|---|---|
event_type | строка |
всегда равно значению EventType.SEEN |
message_token | string |
Уникальный идентификатор сообщения |
user_id | string |
Уникальный идентификатор пользователя Viber |
- ViberSeenRequest
- токен_сообщения ⇒
string
- user_id ⇒
string
- токен_сообщения ⇒
Объект ViberSubscribedRequest
Наследуется от ViberRequest
Param | Тип | Примечания |
---|---|---|
event_type | строка |
всегда равно значению EventType.SUBSCRIBED |
user | UserProfile |
пользователь начал диалог UserProfile |
- ViberSubscribedRequest
- user ⇒
UserProfile
- user ⇒
Объект ViberUnsubscribedRequest
Наследуется от ViberRequest
Param | Тип | Примечания |
---|---|---|
event_type | str ing |
всегда равно значению EventType. НЕ ПОДПИСАНО |
user_id | string |
Уникальный идентификатор пользователя Viber |
- ViberUnsubscribedRequest
- get_user_id () ⇒
строка
- get_user_id () ⇒
объект UserProfile
Param | Тип | Примечания |
---|---|---|
id | строка |
– – |
имя | строка |
– – |
аватар | строка |
Аватар URL |
country | string |
в настоящее время задано только для события CONVERSATION_STARTED |
language | string |
, установленный в настоящее время только в событии CONVERSATION_STARTED |
Объект сообщения
Общие члены для интерфейса Message
:
Param | Тип | Описание |
---|---|---|
отметка времени | long |
Эпоха |
keyboard | JSON |
JSON клавиатуры |
trackingData | JSON |
Данные отслеживания JSON из клиента Viber |
Общие аргументы конструктора Message
interface :
Param | Тип | Описание |
---|---|---|
optionalKeyboard | JSON |
Написание пользовательских клавиатур |
optionalTrackingData | JSON |
Данные, которые будут сохраняться на устройстве Viber Client и отправляться обратно каждый раз при получении сообщения |
объект TextMessage
Член | Тип |
---|---|
текст | строка |
message = TextMessage ( text = "мое текстовое сообщение")
объект URLMessage
Член | Тип | Описание |
---|---|---|
media | строка |
строка URL |
message = URLMessage (media = "http://my.siteurl.com")
объект ContactMessage
Member | Тип |
---|---|
контакт | Контакт |
из viberbot.api.messages.data_types.contact import Contactcontact = Contact (name = "Пользователь Viber" , phone_number = "+ 0015648979", avatar = "http://link.to. аватар ") contact_message = ContactMessage (contact = contact)
Объект PictureMessage
Член | Тип | Описание |
---|---|---|
media | string |
url сообщения ( только jpeg) |
текст | строка |
|
thumbnail | string |
message = PictureMessage (media = "http://www.thehindubusinessline.com/multimedia/dynamic/01458/viber_logo_JPG_1458024f.jpg" , text = "Viber logo")
объект VideoMessage
Член | Тип | Описание |
---|---|---|
media | строка |
URL-адрес видео |
size | int |
|
эскиз | str ing |
|
duration | int |
message = VideoMessage (media = "http://site. com/video.mp4 ", size = 21499)
Объект LocationMessage
Член | Тип |
---|---|
местоположение | Местоположение |
из viberbot.api.messages.data_types.location import Locationlocation = Location (lat = 0.0, lon = 0.0) location_message = LocationMessage (location = location)
объект StickerMessage
Member | Введите |
---|---|
sticker_id | int |
message = StickerMessage (sticker_id = 40100)
Объект FileMessage
Member | Тип |
---|---|
media | строка |
size | long |
имя_файла | строка |
message = FileMessage (media = url, size = sizeInBytes , имя_файла = имя_файла)
объект RichMediaMessage
Член | Тип |
---|---|
rich_media | строка (JSON) |
SAMPLE_RICH_MEDIA = "" "{" BgColor ":" # 69C48A "," Buttons ": [{" Columns ": 6," Rows ": 1," BgColor ":" # 454545 "," BgMediaType ":" gif "," BgMedia ":" http://www.url.by/test.gif "," BgLoop ": true," ActionType ":" open-url "," Silent ": true," ActionBody ":" www.tut. by "," Image ":" www.tut.by/img.jpg "," TextVAlign ":" middle "," TextHAlign ":" left "," Text ":" пример кнопки " , "TextOpacity": 10, "TextSize": "обычный"}]} "" "SAMPLE_ALT_TEXT =" обновить сейчас! "Message = RichMediaMessage (rich_media = SAMPLE_RICH_MEDIA, alt_text = SAMPLE_ALT_TEXT)
объект KeyboardMessage
Member | Тип |
---|---|
keyboard | JSON |
данные_трекинга | JSON |
message = KeyboardMessage (tracking_data = tracking_data, keyboard = keyboard)
Отправка приветственного сообщения
API Viber позволяет отправлять сообщения пользователям только после того, как они подпишутся на учетную запись. Однако Viber позволит учетной записи отправить пользователю одно «приветственное сообщение», когда пользователь откроет беседу до того, как пользователь подпишется.
Приветственное сообщение будет отправлено как ответ на talk_started
, который будет получен от Viber, когда пользователь откроет беседу с учетной записью. Чтобы узнать больше об этом событии и когда оно запускается, см. Разговор начался
в разделе обратных вызовов.
Приветственное сообщение
Отправка приветственного сообщения будет выполняться в соответствии со следующей процедурой:
- Пользователь открывает беседу один на один с учетной записью.
- Сервер Viber отправляет
диалог_запущен
даже на веб-перехватчик PA. - Учетная запись получает
диалог_начало
и отвечает HTTP-ответ, который включает приветственное сообщение в качестве тела ответа.
Приветственное сообщение будет в формате JSON, созданном в соответствии со структурой запросов send_message, но без получателя код> параметр. Пример приветственного сообщения будет выглядеть так:
@ app.route ('/', methods = ['POST']) def incoming (): viber_request = viber.parse_request (request.get_data ()) if isinstance (viber_request, ViberConversationStartedRequest): viber.send_messages (viber_request.get_user (). get_id (), [TextMessage (text = "Добро пожаловать!")]) return Response (status = 200)
Сообщество
Присоединяйтесь к обсуждению на Gitter .