Налаштування сповіщень про статус замовлення у Viber 1С-Бітрікс
Viber надає публічний Bot API, схожий за структурою на Telegram. На відміну від WhatsApp, для відправки сповіщень через Viber не потрібна верифікація бізнесу через Meta — достатньо створити бота через Viber Admin Panel. Обмеження: користувач повинен підписатися на бота або сам написати йому першим, перш ніж бот зможе надсилати повідомлення.
Створення Viber-бота
- Реєструємо акаунт на
developers.viber.com - Створюємо бота в
my.viber.com/~admin/bot/new - Отримуємо auth token вигляду
47b...== - Встановлюємо webhook:
POST https://chatapi.viber.com/pa/set_webhook
// Реєстрація webhook
$ch = curl_init('https://chatapi.viber.com/pa/set_webhook');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://your-site.com/viber/webhook/',
'event_types' => ['subscribed', 'unsubscribed', 'message'],
'send_name' => true,
]),
CURLOPT_HTTPHEADER => [
'X-Viber-Auth-Token: ' . VIBER_BOT_TOKEN,
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
]);
curl_exec($ch);
curl_close($ch);
Збереження Viber user_id
При підписці користувача на бота Viber надсилає webhook з подією subscribed. У цей момент пов'язуємо Viber user_id з користувачем Бітрікс:
// Обробник webhook Viber
$update = json_decode(file_get_contents('php://input'), true);
$eventType = $update['event'] ?? '';
if ($eventType === 'subscribed') {
$viberUserId = $update['user']['id'];
$context = $update['user']['context'] ?? ''; // передаємо uid= у deep link
if (preg_match('/uid=(\d+)/', $context, $m)) {
$bitrixUserId = (int)$m[1];
\Bitrix\Main\UserTable::update($bitrixUserId, [
'UF_VIBER_USER_ID' => $viberUserId,
]);
}
}
Deep link для підписки формується в особистому кабінеті:
$deepLink = 'viber://pa?chatURI=' . VIBER_BOT_URI . '&context=uid=' . $USER->GetID();
Відправка сповіщень при зміні статусу
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleOrderStatusChange',
function (\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$statusId = $order->getField('STATUS_ID');
$userId = $order->getUserId();
$user = \Bitrix\Main\UserTable::getById($userId)->fetch();
$viberUserId = $user['UF_VIBER_USER_ID'] ?? null;
if (!$viberUserId) {
return;
}
$texts = [
'N' => 'Замовлення #%d оформлено та очікує на опрацювання.',
'P' => 'Замовлення #%d передано у доставку.',
'F' => 'Замовлення #%d виконано. Дякуємо за покупку!',
'X' => 'Замовлення #%d скасовано.',
];
if (!isset($texts[$statusId])) {
return;
}
$message = sprintf($texts[$statusId], $order->getId());
// Відправка через Viber API
$payload = [
'receiver' => $viberUserId,
'type' => 'text',
'text' => $message,
'sender' => ['name' => 'MyShop'],
];
$ch = curl_init('https://chatapi.viber.com/pa/send_message');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_HTTPHEADER => [
'X-Viber-Auth-Token: ' . VIBER_BOT_TOKEN,
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
// status_message = 'ok' при успіху
}
);
Обмеження Viber Bot API
- Не можна написати користувачу першим, якщо він жодного разу не взаємодіяв з ботом
- Безкоштовний тариф: без обмежень на кількість повідомлень для зареєстрованих ботів
- Viber недоступний у деяких країнах (Китай, ряд країн СНД)
- Повідомлення від бота, якому користувач не писав більше 1 року, можуть не доставлятися
Терміни налаштування
Створення бота, webhook, поле користувача UF_VIBER_USER_ID, сторінка підписки в особистому кабінеті, обробник подій — 4–8 годин.







