Главная Интеграции

Интеграции

Litus Dmitrii
От Nika and 1 другое
10 статьи

KkmServer

Установка KkmServer 1. Перейдите на сайт KKM Server 2. Скачайте и установите дистрибутив Kkm-Server 3. Установите плагин/расширение для вашего браузера 4. Запустите программу KkmServer 5. В появившемся окне откройте вкладку "Установить тип запуска" и выберите "Автозапуск: Свернутое Трей" 6. Откройте в браузере  плагин/расширение Kkm Server, выберите адрес http://localhost:5893 и после нажмите "Настроить" 7. Далее перейдите в раздел "Настройка оборудования" и нажмите "Добавить устройство" 8. Выберите "Тип устройства" — "Фискальный регистратор" и "Протокол устройства" поддерживаемый вашим ФР, затем нажмите "Добавить устройство" Настройка Vlapp 1. Перейдите в Настройки, "Фискальные регистраторы" 2. Нажмите "Создать" 3. В появившемся окне установите "Тип регистратора" в значение "KkmServer" 4. Укажите данные для подключения (127.0.0.1:5893) и параметры налогообложения 5. Нажмите "Сохранить" 6. Выберите созданный ФР в карточке кассы

Обновлено Jan 07, 2025

Новофон – IP телефония

Получение Key и Secret: - Войдите в личный кабинет Novofon. - Перейдите в раздел «Пользователи АТС», затем кликните на пользователя, являющегося Администратором. - В открывшемся окне перейдите на вкладку API, включите галочку «Использовать ключ API» и сгенерируйте Secret. - В vlApp перейдите в Интеграции и кликните по карточке «Novofon». - Cкопируйте полученные данные (Key и Secret) в форму настройки интеграции Novofon. - Переведите селектор «Состояние» в значение Вкл. - Нажмите «Сохранить». Адрес для уведомлений: - В vlApp перейдите в Интеграции и кликните по карточке «Novofon». - Cкопируйте адрес для уведомлений. - В личном кабинете Novofon, откройте раздел «Интеграции», и кликните по карточке «Уведомление о событиях». - В появившейся форме, в поле "Webhook URL" вставьте скопированный ранее адрес. - Переведите селектор «Интеграция активна» в в активное состояние. - Переведите селектор «Использовать ключи API» в активное состояние. - Используйте Key и Secret полученные ранее (см. "Получение Key и Secret"). - Нажмите «Сохранить». Добавление внутренних номеров: - В vlApp перейдите в Интеграции и кликните по карточке «Novofon». - Нажмите «Добавить внутренний номер». - Свяжите внутренний номер пользователя АТС с пользователем в vlApp.

Обновлено Mar 05, 2025

Webhook

Обзор Webhook Service позволяет внешним системам подписываться на события, происходящие в системе vlApp. При наступлении события система отправляет HTTP POST запрос на настроенный URL с данными о событии. На все запросы необходимо отвечать 200 OK. После 5 неудачных попыток отправка вебхуков на ваш endpoint останавливается на 5 минут, через 5 минут система автоматически возобновит отправку. Создание вебхука Для создания вебхука перейдите в Настройки > Интеграции > WebHooks > Добавить WebHook Формат Webhook уведомлений Все вебхуки отправляются в формате JSON с единой структурой: {   "event": "event_name",   "userId": "550e8400-e29b-41d4-a716-446655440001",   "timestamp": "2024-01-01T10:00:00Z",   "data": {     *// Данные события (зависят от типа события)*   } } event - строковый идентификатор типа события (например, "order_created", "customer_deleted") data - объект с данными, специфичными для данного типа события В разделах ниже приведены полные примеры payload для каждого типа события - Заказы - Обращения - Клиенты

Обновлено Dec 17, 2025

Webhook - Заказы

Обзор Все события отправляются в формате JSON с единой структурой: {   "event": "order_created",   "userId": "550e8400-e29b-41d4-a716-446655440001",   "timestamp": "2024-01-01T10:00:00Z",   "data": {     *// Данные события (зависят от типа события)*   } } Подробную информацию о настройке и способах использования смотрите в статье "Вебхуки" Создан новый заказ event: order_created data: {   "creationTime": "2024-12-17T10:00:00Z",   "closedAt": null,   "dueDate": "2024-12-24T10:00:00Z",   "num": "А40",   "title": "Apple iPad A1454",   "sn": "SN123456",   "malfunction": "Белый экран",   "condition": "Отходит экран от корпуса",   "status": "Новый",   "statusId": "3a118871-f8e8-ea71-c068-51dae78ad941",   "urgent": false,   "isWarranty": false,   "customerId": "550e8400-e29b-41d4-a716-446655440011",   "customerName": "Иванов Иван Иванович",   "managerName": "Петрова Анна Сергеевна",   "engineerFullName": "Сидоров Алексей Михайлович",   "total": 15000.00,   "location": "3a118871-fa11-eb35-fd10-91905199afba",   "orderTypeId": 1,   "orderTypeTitle": "Платный",   "previousOrderId": null,   "previousOrderNum": null } TypeScript интерфейс: interface OrderCreatedData {   */** Время создания в формате ISO 8601 */*   creationTime: string;   */** Время закрытия заказа */*   closedAt: string | null;   */** Срок выполнения в формате ISO 8601 */*   dueDate: string;   */** Номер заказа */*   num: string;   */** Название заказа */*   title: string;   */** Серийный номер устройства */*   sn: string;   */** Описание неисправности */*   malfunction: string;   */** Состояние устройства */*   condition: string;   */** Статус заказа */*   status: string;   */** Идентификатор статуса */*   statusId: string;   */** Признак срочности */*   urgent: boolean;   */** Признак гарантийного ремонта */*   isWarranty: boolean;   */** Идентификатор клиента */*   customerId: string;   */** Имя клиента */*   customerName: string;   */** Имя менеджера */*   managerName: string;   */** Полное имя инженера */*   engineerFullName: string;   */** Общая сумма */*   total: number;   */** Идентификатор локации */*   location: string;   */** Идентификатор типа заказа */*   orderTypeId: number;   */** Название типа заказа */*   orderTypeTitle: string;   */** Идентификатор предыдущего заказа */*   previousOrderId: string | null;   */** Номер предыдущего заказа */*   previousOrderNum: string | null; } Изменен статус event: order_status_changed data: {   "orderId": "550e8400-e29b-41d4-a716-446655440000",   "userId": "550e8400-e29b-41d4-a716-446655440001",   "creationTime": "2024-12-17T10:00:00Z",   "status": "В работе",   "statusId": "550e8400-e29b-41d4-a716-446655440010" } TypeScript интерфейс: interface OrderStatusChangedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор пользователя, изменившего статус */*   userId: string;   */** Время изменения статуса */*   creationTime: string;   */** Новый статус заказа */*   status: string;   */** Идентификатор статуса */*   statusId: string; } Заказ удален event: order_deleted data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000" } TypeScript интерфейс: interface OrderDeletedData {   */** Идентификатор удаленного заказа */*   orderId: string; } Добавлен комментарий event: order_comment_added data: {   "orderId": "550e8400-e29b-41d4-a716-446655440000",   "commentId": 1001,   "text": "Клиент просит ускорить выполнение заказа",   "isPrivate": false } TypeScript интерфейс: interface OrderCommentAddedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор комментария */*   commentId: number;   */** Текст комментария */*   text: string;   */** Признак приватности комментария */*   isPrivate: boolean; } Добавлен материал event: order_material_added data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "MaterialId": 9116,   "Name": "Ламинат Дуб Темный 33 класс",   "Quantity": 1,   "Price": 850.00,   "Total": 850.00,   "PurchasePrice": 650.00,   "RelatedWorkId": 2001,   "WarrantyUnit": 0,   "WarrantyValue": 7 } TypeScript интерфейс: interface OrderMaterialAddedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор материала */*   materialId: number;   */** Название материала */*   name: string;   */** Количество */*   quantity: number;   */** Цена продажи */*   price: number;   */** Общая сумма (Quantity × Price) */*   total: number;   */** Закупочная цена */*   purchasePrice: number;   */** Идентификатор связанной работы */*   relatedWorkId: number;   */** Единица измерения гарантии */*   warrantyUnit: number;   */** Значение гарантии */*   warrantyValue: number; } Обновлена информация о материале event: order_material_updated data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "MaterialId": 9116,   "Name": "Ламинат Дуб Темный 33 класс",   "Quantity": 30,   "Price": 850.00,   "Total": 25500.00,   "PurchasePrice": 650.00,   "RelatedWorkId": 2001,   "WarrantyUnit": 0,   "WarrantyValue": 7 } TypeScript интерфейс: interface OrderMaterialUpdatedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор материала */*   materialId: number;   */** Название материала */*   name: string;   */** Количество */*   quantity: number;   */** Цена продажи */*   price: number;   */** Общая сумма (Quantity × Price) */*   total: number;   */** Закупочная цена */*   purchasePrice: number;   */** Идентификатор связанной работы */*   relatedWorkId: number;   */** Единица измерения гарантии */*   warrantyUnit: number;   */** Значение гарантии */*   warrantyValue: number; } Материал удален event: order_material_deleted data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "MaterialId": 9116,   "Name": "Ламинат Дуб Темный 33 класс" } TypeScript интерфейс: interface OrderMaterialDeletedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор материала */*   materialId: number;   */** Название материала */*   name: string; } Добавлена работа event: order_work_added data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "WorkId": 2001,   "Name": "Укладка ламината",   "Quantity": 25,   "Price": 150.00,   "Total": 3750.00,   "CostPrice": 100.00,   "UserId": "550e8400-e29b-41d4-a716-446655440001",   "UserName": "Алексей Сидоров",   "PriceWorkId": 101,   "WarrantyUnit": 0,   "WarrantyValue": 7 } TypeScript интерфейс: interface OrderWorkAddedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор работы */*   workId: number;   */** Название работы */*   name: string;   */** Количество */*   quantity: number;   */** Цена продажи */*   price: number;   */** Общая сумма (Quantity × Price) */*   total: number;   */** Себестоимость */*   costPrice: number;   */** Идентификатор исполнителя */*   userId: string;   */** Имя исполнителя */*   userName: string;   */** Идентификатор прайс-листа работ */*   priceWorkId: number;   */** Единица измерения гарантии */*   warrantyUnit: number;   */** Значение гарантии */*   warrantyValue: number; } Обновлена информация о работе event: order_work_updated data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "WorkId": 2001,   "Name": "Укладка ламината",   "Quantity": 30,   "Price": 150.00,   "Total": 4500.00,   "CostPrice": 100.00,   "UserId": "550e8400-e29b-41d4-a716-446655440001",   "UserName": "Алексей Сидоров",   "PriceWorkId": 101,   "WarrantyUnit": 0,   "WarrantyValue": 7 } TypeScript интерфейс: interface OrderWorkUpdatedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор работы */*   workId: number;   */** Название работы */*   name: string;   */** Количество */*   quantity: number;   */** Цена продажи */*   price: number;   */** Общая сумма (Quantity × Price) */*   total: number;   */** Себестоимость */*   costPrice: number;   */** Идентификатор исполнителя */*   userId: string;   */** Имя исполнителя */*   userName: string;   */** Идентификатор прайс-листа работ */*   priceWorkId: number;   */** Единица измерения гарантии */*   warrantyUnit: number;   */** Значение гарантии */*   warrantyValue: number; } Работа удалена event: order_work_deleted data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "WorkId": 2001,   "Name": "Укладка ламината" } TypeScript интерфейс: interface OrderWorkDeletedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор работы */*   workId: number;   */** Название работы */*   name: string; } Назначен инженер event: order_engineer_assigned data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "EngineerId": "550e8400-e29b-41d4-a716-446655440012",   "EngineerName": "Сидоров Алексей Михайлович",   "UserId": "550e8400-e29b-41d4-a716-446655440001",   "CreationTime": "2024-12-17T10:00:00Z" } TypeScript интерфейс: interface OrderEngineerAssignedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор инженера */*   engineerId: string;   */** Имя инженера */*   engineerName: string;   */** Идентификатор пользователя, выполнившего назначение */*   userId: string;   */** Время назначения */*   creationTime: string; } Назначен менеджер event: order_manager_assigned data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "ManagerId": "550e8400-e29b-41d4-a716-446655440013",   "ManagerName": "Петрова Анна Сергеевна",   "UserId": "550e8400-e29b-41d4-a716-446655440001",   "CreationTime": "2024-12-17T10:00:00Z" } TypeScript интерфейс: interface OrderManagerAssignedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор менеджера */*   managerId: string;   */** Имя менеджера */*   managerName: string;   */** Идентификатор пользователя, выполнившего назначение */*   userId: string;   */** Время назначения */*   creationTime: string; } Обновлена локация event: order_location_updated data: {   "OrderIds": ["550e8400-e29b-41d4-a716-446655440000"],   "LocationId": "550e8400-e29b-41d4-a716-446655440014",   "UserId": "550e8400-e29b-41d4-a716-446655440001",   "CreationTime": "2024-12-17T10:00:00Z" } TypeScript интерфейс: interface OrderLocationUpdatedData {   */** Массив идентификаторов заказов */*   orderIds: string[];   */** Идентификатор локации */*   locationId: string;   */** Идентификатор пользователя, выполнившего обновление */*   userId: string;   */** Время обновления */*   creationTime: string; } Создан платеж event: order_payment_created data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "PaymentId": "550e8400-e29b-41d4-a716-446655440015",   "Amount": 5000.00,   "UserId": "550e8400-e29b-41d4-a716-446655440001",   "CreationTime": "2024-12-17T10:00:00Z" } TypeScript интерфейс: interface OrderPaymentCreatedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор платежа */*   paymentId: string;   */** Сумма платежа */*   amount: number;   */** Идентификатор пользователя, создавшего платеж */*   userId: string;   */** Время создания платежа */*   creationTime: string; } Платеж удален event: order_payment_deleted data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "PaymentId": "550e8400-e29b-41d4-a716-446655440016",   "UserId": "550e8400-e29b-41d4-a716-446655440001",   "CreationTime": "2024-12-17T10:00:00Z" } TypeScript интерфейс: interface OrderPaymentDeletedData {   */** Идентификатор заказа */*   orderId: string;   */** Идентификатор платежа */*   paymentId: string;   */** Идентификатор пользователя, удалившего платеж */*   userId: string;   */** Время удаления платежа */*   creationTime: string; } Обновлен срок выполнения event: order_due_date_updated data: {   "OrderId": "550e8400-e29b-41d4-a716-446655440000",   "DueDate": "2024-12-31T10:00:00Z",   "UserId": "550e8400-e29b-41d4-a716-446655440001",   "CreationTime": "2024-12-17T10:00:00Z" } TypeScript интерфейс: interface OrderDueDateUpdatedData {   */** Идентификатор заказа */*   orderId: string;   */** Новый срок выполнения в формате ISO 8601 */*   dueDate: string;   */** Идентификатор пользователя, обновившего срок */*   userId: string;   */** Время обновления срока */*   creationTime: string

Обновлено Dec 17, 2025

Webhook - Клиенты

Создан новый клиент event: customer_created data: {   "Id": "3a1e3499-3eb7-6dd3-4bc8-950d51c4d506",   "Name": "Test Q.A.+++",   "Source": "Рекомендации клиентов",   "Email": null,   "AllowNotify": true,   "Groups": [     {       "Title": "Группа 123",       "Color": "#C0382B"     },     {       "Title": "Group X",       "Color": "#ff0040"     }   ],   "Phones": [     {       "Id": 60525,       "PhoneNumber": "+7 796 167 81448"     }   ],   "Type": 0,   "CreationTime": "2025-12-15T17:31:29.81687",   "TotalBalance": 0,   "IsBalanceOperationAllowed": false } TypeScript интерфейс: interface CustomerCreatedData {   */** Идентификатор клиента */*   id: string;   */** Имя клиента */*   name: string;   */** Источник клиента */*   source: string;   */** Email клиента */*   email: string | null;   */** Разрешение на уведомления */*   allowNotify: boolean;   */** Группы клиента */*   groups: Array<{     title: string;     color: string;   }>;   */** Телефоны клиента */*   phones: Array<{     id: number;     phoneNumber: string;   }>;   */** Тип клиента */*   type: number;   */** Время создания клиента */*   creationTime: string;   */** Общий баланс */*   totalBalance: number;   */** Разрешены ли операции с балансом */*   isBalanceOperationAllowed: boolean; } Добавлен комментарий event: customer_comment_added data: {   "CustomerId": "3a1e3499-3eb7-6dd3-4bc8-950d51c4d506",   "CommentId": 2001,   "Text": "Клиент интересовался статусом ремонта",   "IsPrivate": false } TypeScript интерфейс: interface CustomerCommentAddedData {   */** Идентификатор клиента */*   customerId: string;   */** Идентификатор комментария */*   commentId: number;   */** Текст комментария */*   text: string;   */** Признак приватности комментария */*   isPrivate: boolean; } Клиент удален event: customer_deleted data: {   "CustomerId": "550e8400-e29b-41d4-a716-446655440021",   "CustomerName": "Петров Петр Петрович",   "UserId": "550e8400-e29b-41d4-a716-446655440001",   "CreationTime": "2024-12-17T10:00:00Z" } TypeScript интерфейс: interface CustomerDeletedData {   */** Идентификатор клиента */*   customerId: string;   */** Имя клиента */*   customerName: string;   */** Идентификатор пользователя, удалившего клиента */*   userId: string;   */** Время удаления клиента */*   creationTime: string; }

Обновлено Dec 17, 2025