Автоматизация уведомлений клиентов интернет-магазина через мессенджеры — это актуальная задача для любого бизнеса. Однако работа в старой версии 1С 7.7 на операционной системе Windows Server 2008 накладывает ряд ограничений. Давайте разберем, почему попытки «эмуляции» нажатия клавиш не работают и как построить надежную систему интеграции с Viber.
Многие пытаются использовать команду ЗапуститьПриложение с параметрами типа viber://chat или viber://send. Важно понимать, что это — так называемые «глубокие ссылки» (Deep Links). Они созданы разработчиками Viber исключительно для того, чтобы открывать приложение на устройстве пользователя. Они не предназначены для передачи текста сообщения в автоматическом режиме. Viber намеренно блокирует такие возможности, чтобы защитить пользователей от спама. Кроме того, попытки имитировать нажатия клавиш через VBScript или SendKeys крайне ненадежны на серверных операционных системах, так как при отсутствии активной сессии пользователя скрипт просто не сработает.
Единственный надежный способ отправить сообщение из 1С — это использование официального API Viber. Поскольку 1С 7.7 имеет сложности с современными протоколами шифрования (такими как TLS 1.2+), лучшим решением будет использование «прослойки» на PHP, размещенной на веб-сервере. Это позволит 1С обмениваться данными с локальным или внешним сервером по простому протоколу, а сервер уже будет брать на себя защищенное соединение с серверами Viber.
Нам потребуется сервер, который будет принимать запросы от 1С и пересылать их в Viber. Рассмотрим базовый код для настройки webhook, который регистрирует ваш сервер в системе Viber:
$auth_token = 'Ваш_токен_бота';
$webhook = 'https://ваш-домен.com/viber_bot.php';
$jsonData = '{
"auth_token": "'.$auth_token.'",
"url": "'.$webhook.'",
"event_types": ["subscribed", "delivered", "message", "seen"]
}';
$ch = curl_init('https://chatapi.viber.com/pa/set_webhook');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$response = curl_exec($ch);
curl_close($ch);
Чтобы отправить сообщение, мы создаем функцию в 1С, которая обращается к нашему PHP-скрипту. В самом простом случае можно использовать объект MSXML2.ServerXMLHTTP. В 1С 7.7 это выглядит примерно так:
Функция ОтправитьВВайбер(ИДПользователя, Сообщение)
КомОбъект = СоздатьОбъект("MSXML2.ServerXMLHTTP");
КомОбъект.Open("POST", "https://ваш-домен.com/send.php", 0);
КомОбъект.SetRequestHeader("Content-Type", "application/json");
Параметры = "{""id"": """ + ИДПользователя + """, ""text"": """ + Сообщение + """}";
КомОбъект.Send(Параметры);
Возврат КомОбъект.ResponseText;
КонецФункции
На стороне PHP-скрипта (в файле send.php) мы формируем корректный JSON-запрос к API Viber. Важно учитывать, что отправка сообщений возможна только тем пользователям, которые уже подписались на вашего бота. Вот пример логики отправки текста:
function sendMsg($sender_id, $text) {
$data = [
'auth_token' => 'Ваш_токен_бота',
'receiver' => $sender_id,
'type' => 'text',
'text' => $text
];
$ch = curl_init("https://chatapi.viber.com/pa/send_message");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
return curl_exec($ch);
}
MySQL через ODBC из 1С, если сервис предоставляет REST API. Ошибки типа 10060 часто связаны с закрытыми портами или несовместимостью драйверов в старых ОС. HTTP-запросы — гораздо более стабильный метод.id пользователя в системе Viber, а не по номеру телефона. Подписка пользователя на бота происходит автоматически при первом его обращении к боту.Используя этот подход, вы сможете построить гибкую систему уведомлений, которая будет работать стабильно, несмотря на использование устаревшего программного обеспечения.