Настройка уведомлений о статусе заказа в 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.ru/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 часов.







