/ viber-бот-питон

Используйте эту библиотеку для разработки бота для платформы Viber. Библиотека доступна на GitHub , а также пакет на PyPI.

Этот пакет можно импортировать с помощью pip, добавив в ваш requirements.txt следующее:

 viberbot == 1.0.11 

Содержание
  1. Лицензия
  2. Предварительные требования к библиотеке
  3. Приступим!
  4. Установка
  5. Простой Echo Bot
  6. Во-первых, давайте импортируем и настроим нашего бота
  7. Создайте сервер HTTPS
  8. Установка веб-перехватчика
  9. Ведение журнала
  10. Предоставляете ли вы основные типы сообщений?
  11. Давайте сложим все это и ответим сообщением!
  12. Viber API
  13. Api class
  14. Новый API ()
  15. Api.set_webhook (url)
  16. Api.unset_webhook ()
  17. Api.get_account_info ()
  18. Api.verify_signature (данные_запроса, подпись)
  19. Api.parse_request (request_data)
  20. Api.send_messages (to, messages)
  21. Api.post_messages_to_public_account (to, messages)
  22. Api. get_online (viber_user_ids)
  23. Api.get_user_details (viber_user_id)
  24. Объект запроса
  25. ViberConversationStartedRequest объект
  26. Объект ViberDeliveredRequest
  27. объект ViberFailedRequest
  28. объект ViberMessageRequest
  29. объект ViberSeenRequest
  30. Объект ViberSubscribedRequest
  31. Объект ViberUnsubscribedRequest
  32. объект UserProfile
  33. Объект сообщения
  34. объект TextMessage
  35. объект URLMessage
  36. объект ContactMessage
  37. Объект PictureMessage
  38. объект VideoMessage
  39. Объект LocationMessage
  40. объект StickerMessage
  41. Объект FileMessage
  42. объект RichMediaMessage
  43. объект KeyboardMessage
  44. Отправка приветственного сообщения
  45. Приветственное сообщение
  46. Сообщество

Лицензия

Эта библиотека выпущена в соответствии с условиями лицензии Apache 2.0. Дополнительную информацию см. В разделе «Лицензия».

Предварительные требования к библиотеке

  1. python> = 2.7.0
  2. Активная учетная запись Viber на платформе, которая поддерживает публичные учетные записи/ботов (iOS/Android). Эта учетная запись будет автоматически назначена администратором учетной записи в процессе создания учетной записи.
  3. Активная общедоступная учетная запись/бот – создайте учетную запись здесь.
  4. Токен аутентификации учетной записи – уникальный идентификатор учетной записи, используемый для проверки вашей учетной записи во всех запросах API. Как только ваша учетная запись будет создана, ваш токен аутентификации появится на экране «Изменить информацию» учетной записи (только для администраторов). Каждый запрос, отправленный в Viber учетной записью, должен содержать токен.
  5. Webhook – используйте URL-адрес конечной точки сервера, поддерживающий HTTPS. При развертывании на собственном настраиваемом сервере вам понадобится доверенный (ca.pem) сертификат, а не самозаверяющий. Прочтите в нашем блоге о том, как протестировать своего бота локально.

Приступим!

Установка

Создать базового бота Viber просто:

  1. Установите библиотеку с помощью pip pip install viberbot
  2. Импортируйте библиотеку viberbot.api в свой проект
  3. Создайте общедоступную учетную запись или бота и используйте API ключ от https://developers.viber.com
  4. Настройте своего бота, как описано в документации ниже.
  5. Запустите веб-сервер
  6. Вызов 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

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

объект 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

Объект ViberUnsubscribedRequest

Наследуется от ViberRequest

Param Тип Примечания
event_type str ing всегда равно значению EventType. НЕ ПОДПИСАНО
user_id string Уникальный идентификатор пользователя Viber
  • ViberUnsubscribedRequest
    • 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, когда пользователь откроет беседу с учетной записью. Чтобы узнать больше об этом событии и когда оно запускается, см. Разговор начался в разделе обратных вызовов.

Приветственное сообщение

Отправка приветственного сообщения будет выполняться в соответствии со следующей процедурой:

  1. Пользователь открывает беседу один на один с учетной записью.
  2. Сервер Viber отправляет диалог_запущен даже на веб-перехватчик PA.
  3. Учетная запись получает диалог_начало и отвечает 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 .

Оцените статью
futurei.ru
Добавить комментарий