Интеграция популярных мессенджеров с учетными системами 1С позволяет автоматизировать работу с клиентами, сохранять историю переписки и анализировать активность коммуникаций. В данной статье мы разберем, как получить доступ к локальной базе данных Viber для Windows, проанализируем структуру ее таблиц и научимся извлекать сообщения с привязкой к конкретным контактам и группам.
Для начала выясним, где Viber хранит свои данные. На платформе Windows база данных представляет собой файл формата SQLite format 3. Обычно он располагается в каталоге пользователя. Путь к файлу можно определить по следующему шаблону:
%USERPROFILE%\AppData\Roaming\ViberPC\%номер_телефона%\viber.db
Где %номер_телефона% — это папка, названная по вашему номеру, зарегистрированному в приложении. Прежде чем приступать к чтению данных из 1С, важно учитывать технический нюанс: если Viber запущен, файл базы может быть заблокирован. Рассмотрим варианты решения этой проблемы:
viber.db средствами 1С (используя команду КопироватьФайл()) и будем работать уже с этой копией.Также стоит обратить внимание на наличие в папке файлов с расширениями .db-wal и .db-shm. Это файлы журналов транзакций (Write-Ahead Logging). Для корректного чтения последних данных крайне желательно, чтобы эти файлы находились рядом с основным файлом базы при копировании.
Чтобы успешно извлечь данные, нам необходимо понимать, как они связаны между собой. Проанализируем основные таблицы, которые используются в Viber PC для хранения переписки:
1. Таблица Messages: Здесь хранится непосредственно текст и метаданные сообщений. Основные поля:
EventID — уникальный идентификатор события (связь с таблицей Events);Body — текст сообщения;Type — тип контента (0 — текст, 1 — фото, 3 — видео);PayloadPath — путь к локальному медиафайлу.2. Таблица Events: Служит связующим звеном между сообщениями, чатами и контактами. Поля:
EventID — первичный ключ;ContactID — идентификатор отправителя;ChatID — идентификатор чата;TimeStamp — время отправки (в формате Unix Timestamp).3. Таблица Contact: Содержит информацию о пользователях. Поля:
ContactID — идентификатор контакта;Name — имя;Number — номер телефона.Выясним причину, по которой нельзя сразу получить номер телефона из таблицы Messages: в ней просто нет прямого поля Number. Связь строится через Events.EventID = Messages.EventID, а затем Events.ContactID = Contact.ContactID.
Разберем по шагам, как составить SQL-запрос, который выберет все сообщения от конкретного контакта, отфильтрованные по номеру телефона. Проанализируем следующую структуру запроса:
SELECT
Contact.Name,
Contact.Number,
Messages.Body,
Events.TimeStamp
FROM
Messages
JOIN
Events ON Messages.EventID = Events.EventID
JOIN
Contact ON Events.ContactID = Contact.ContactID
WHERE
Contact.Number = '+79991234567'
ORDER BY
Events.TimeStamp DESC
Этот запрос позволяет получить историю переписки в хронологическом порядке. Если вам нужно получить список всех доступных таблиц для анализа структуры из 1С, можно воспользоваться системным запросом:
SELECT * FROM sqlite_master WHERE type = 'table'
Часто возникает задача получить список всех участников группового чата. Посмотрим на таблицу ChatRelation. Вопреки распространенному мнению, что там хранятся только модераторы, в актуальных версиях базы именно она связывает ChatID и ContactID для всех участников.
Рассмотрим пример запроса для получения списка имен участников конкретной группы:
SELECT
Contact.Name,
Contact.Number
FROM
ChatRelation
JOIN
Contact ON ChatRelation.ContactID = Contact.ContactID
WHERE
ChatRelation.ChatID = 123 -- Идентификатор нужного чата
Тип чата можно определить в таблице ChatInfo через поле ChatType (обычно значение 2 соответствует групповому чату, а 1 — личной переписке).
Viber хранит время в формате Unix Timestamp (миллисекунды). В 1С дата представляет собой количество секунд с начала нашей эры. Выясним, как выполнить конвертацию.
Поскольку TimeStamp в viber.db обычно указан в миллисекундах, сначала разделим его на 1000. Полученное число секунд нужно прибавить к дате "1970-01-01 00:00:00". Рассмотрим пример функции на языке 1С:
Функция ПреобразоватьUnixВремя(Знач Т_Unix)
БазоваяДата = Дата(1970, 1, 1, 0, 0, 0);
// Делим на 1000, так как Viber хранит миллисекунды
Возврат БазоваяДата + (Т_Unix / 1000);
КонецФункции
Важный момент: не забудьте про часовой пояс. Unix Time всегда хранится в UTC, поэтому к результату может потребоваться добавить смещение вашего региона.
Для выполнения SQL-запросов к SQLite из 1С обычно используется механизм COMОбъект с драйвером ADODB. Разберем примерный алгоритм подключения:
ADODB.Connection.viber.db.Пример кода инициализации соединения:
ПутьКБазе = "C:\Users\Admin\AppData\Roaming\ViberPC\79991234567\viber.db";
СтрокаПодключения = "Driver={SQLite3 ODBC Driver};Database=" + ПутьКБазе + ";StepAPI=0;SyncPragma=NORMAL;NoWCHAR=1;Timeout=100000;";
Соединение = Новый COMОбъект("ADODB.Connection");
Попытка
Соединение.Open(СтрокаПодключения);
// Далее выполняем запрос через Соединение.Execute()
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Проанализируем другие полезные таблицы, которые могут пригодиться при интеграции:
CallInfo: Позволяет выгрузить историю звонков (длительность, тип звонка, статус завершения).LikeRelation: Содержит информацию о реакциях на сообщения (лайках).DownloadFile: Хранит историю загрузок файлов, что полезно для контроля полученных документов.Используя приведенные выше инструкции и структуру запросов, вы сможете построить полноценную систему мониторинга или архивации сообщений Viber непосредственно внутри вашей базы 1С.