Розробка мобільного Viber-чат-бота
Viber Public Account та Viber Bot — це різні продукти з різними API. Public Account — для брендів, управляється через Viber Partners. Viber Bot — для розробників, зареєстрований через developers.viber.com, підходить для автоматизації. Більшість проектів потребують саме Bot API.
Реєстрація та налаштування
Створення бота відбувається через Viber Admin Panel для розробників. Після створення ви отримуєте auth_token — використовується в кожному API-запиті в заголовку X-Viber-Auth-Token. Webhook встановлюється одним POST:
import requests
def set_webhook(url: str, auth_token: str):
response = requests.post(
"https://chatapi.viber.com/pa/set_webhook",
headers={"X-Viber-Auth-Token": auth_token},
json={
"url": url,
"event_types": [
"delivered", "seen", "failed",
"subscribed", "unsubscribed",
"conversation_started", "message"
],
"send_name": True,
"send_photo": True
}
)
return response.json() # {"status": 0, "status_message": "ok"}
Viber підтверджує webhook негайно у відповіді на set_webhook — немає окремого verification challenge як у WhatsApp/Meta.
Типи повідомлень
Viber підтримує: text, picture, video, file, sticker, contact, url, location та rich_media. rich_media — це кастомний карусельний формат з кнопками, зображеннями та заголовками:
def send_rich_media(receiver: str, auth_token: str, items: list):
rich_media = {
"Type": "rich_media",
"ButtonsGroupColumns": 6,
"ButtonsGroupRows": 7,
"BgColor": "#FFFFFF",
"Buttons": []
}
for item in items:
rich_media["Buttons"].extend([
{
"Columns": 6, "Rows": 3,
"ActionType": "open-url",
"ActionBody": item["url"],
"Image": item["image_url"]
},
{
"Columns": 6, "Rows": 1,
"Text": f"<b>{item['title']}</b>",
"ActionType": "none"
},
{
"Columns": 3, "Rows": 1,
"Text": "Дізнатися більше",
"ActionType": "open-url",
"ActionBody": item["url"],
"BgColor": "#2db5f5"
}
])
requests.post(
"https://chatapi.viber.com/pa/send_message",
headers={"X-Viber-Auth-Token": auth_token},
json={"receiver": receiver, "type": "rich_media", "rich_media": rich_media}
)
Rich Media — специфіка Viber, у Telegram немає аналога. Відмінно підходить для каталогів товарів, новин та карточок послуг.
Клавіатура: постійна та одноразова
Viber Keyboard — це кастомна клавіатура внизу екрана. min_api_version: 1 для базових кнопок:
keyboard = {
"Type": "keyboard",
"DefaultHeight": True,
"BgColor": "#FFFFFF",
"Buttons": [
{
"Columns": 3, "Rows": 1,
"Text": "Каталог",
"ActionType": "reply",
"ActionBody": "catalog",
"BgColor": "#f5f5f5"
},
{
"Columns": 3, "Rows": 1,
"Text": "Підтримка",
"ActionType": "reply",
"ActionBody": "support",
"BgColor": "#f5f5f5"
}
]
}
Клавіатура відправляється з кожним повідомленням — вона не «прилипає» як у Telegram, якщо не відправити її знову. Стандартний паттерн: додавати клавіатуру до кожної відповіді бота.
Подія conversation_started
conversation_started спрацьовує, коли користувач відкриває чат з ботом вперше або через deep link. Це єдиний момент для відправлення привітального повідомлення непідписаному користувачу. Після цього користувач повинен написати боту (підписатися), перш ніж бот зможе йому писати.
Обмеження: Viber не дозволяє масові розсилки непідписаним користувачам — тільки тим, хто підписаний на бота (подія subscribed).
Верифікація підпису webhook
Кожен вхідний запит від Viber містить заголовок X-Viber-Content-Signature — HMAC-SHA256 тіла запиту з auth_token як ключ:
import hmac, hashlib
def verify_viber_signature(body: bytes, signature: str, auth_token: str) -> bool:
expected = hmac.new(
auth_token.encode(),
body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
Без цієї перевірки ваш webhook може приймати підроблені повідомлення від третіх сторін.
Процес розробки
Реєстрація бота в Viber Admin Panel. Налаштування webhook з верифікацією підпису. Обробка базових подій: message, conversation_started, subscribed. Реалізація Rich Media для каталогів/контенту. Діалогові потоки з управлінням станом (Redis FSM). Інтеграція з backend-системами.
Орієнтири за часом
Простий інформаційний бот з клавіатурою та текстовими відповідями — 1–2 тижні. Повнофункціональний бот з Rich Media, FSM, інтеграцією CRM та аналітикою — 4–7 тижнів.







