Перейти к содержаниюСправка

Уведомления во внешние системы (webhook)

Webhook — уведомление, которое облако само отправляет во внешнюю систему, когда в VirtualPos что-то произошло: пробит чек или изменился остаток товара. Внешней системе не нужно опрашивать API по расписанию — она получает данные сразу после события. Так подключают учётные системы, сайты, сервисы аналитики и рассылок.

Как это работает

  1. Событие В VirtualPos происходит событие: касса передала чек в облако или изменилось количество товара.
  2. Запрос Облако отправляет POST-запрос с данными события в формате JSON на адрес, который вы указали.
  3. Ответ Внешняя система отвечает кодом от 200 до 299 — уведомление считается доставленным.

Для каждого события можно настроить несколько адресов: уведомление уйдёт на каждый.

События

Касса: новый чек продажи\возврата Касса передала в облако чек продажи или возврата
Запасы: изменилось количество товара на складе Сохранена запись остатка: продажа, поступление, перемещение, списание, инвентаризация. Уведомление может прийти и тогда, когда количество не изменилось, — сравнивайте quantity_before и quantity_after

Внимание. В списке Событие есть и другие варианты: смена открыта или закрыта, продавец вошёл в кассу или завершил сеанс, принято поступление или перемещение, возврат поставщику. Уведомления по ним пока не отправляются — используйте два события из таблицы выше.

Как настроить уведомление

  1. Откройте Администрирование → API и обмен с 1С и в блоке Отправка уведомлений (webhook) нажмите «Настроить webhook».
  2. Нажмите «Добавить».
  3. Выберите Событие.
  4. В поле URL для отправки уведомления укажите адрес вашей системы, например https://erp.example.com/hooks/virtualpos/receipt.
  5. Выберите Тип авторизации и заполните Логин и Пароль (токен) — см. Авторизация.
Настройка уведомления о новом чеке
Настройка уведомления о новом чеке
  1. В поле Включено выберите Да (включено) и нажмите «Сохранить».
Включено Да — уведомления отправляются. Нет — настройка сохранена, но уведомления не уходят
Событие О чём уведомлять
URL для отправки уведомления Адрес, на который отправляется запрос, до 1024 символов
Максимальное количество попыток Сейчас не используется: уведомление отправляется один раз
Тип авторизации, Логин, Пароль (токен) Как ваша система проверяет, что запрос пришёл от VirtualPos

Все настроенные уведомления видны в списке: включено ли, событие, адрес.

Список настроенных уведомлений
Список настроенных уведомлений

Авторизация

  • Тип авторизации Без авторизации Запрос отправляется без дополнительных заголовков. Подходит только для проверки.
  • Тип авторизации Базовая авторизация по логину и паролю (HTTP Basic auth) В запрос добавляется заголовок Authorization: Basic … с логином и паролем из настройки.
  • Тип авторизации Заголовок X-VIRTUALPOS-TOKEN с паролем В запрос добавляется заголовок X-VIRTUALPOS-TOKEN со значением поля Пароль (токен).

Внимание. Принимайте уведомления только по защищённому адресу https:// и проверяйте токен или логин с паролем на своей стороне. В уведомлении о чеке передаются имя, телефон и почта покупателя.

Формат запроса

Облако отправляет POST-запрос с заголовком Content-Type: application/json. Тело запроса — объект JSON. Поле event содержит вид события, account — имя вашей учётной записи VirtualPos.

Новый чек

{
  "event": "receipt",
  "id": 15840,
  "guid": "5f0c9a52-7d1e-4a7b-9a3e-2b6d1c4e8f10",
  "datetime": "2026-10-10 12:35:08",
  "account": "mycompany",
  "type": "sale",
  "checknum": 27,
  "globalchecknum": 1042,
  "session": 118,
  "customer": {
    "id": 512,
    "ext_id": "C-000512",
    "first_name": "Иван",
    "last_name": "Петров",
    "middle_name": "Сергеевич",
    "email": "petrov@example.com",
    "phone": "+79000000001"
  },
  "card": {
    "id": 731,
    "ext_id": null,
    "uid": null,
    "barcode": "2900000007310"
  },
  "warehouse_id": 2,
  "warehouse_ext_id": "W-02",
  "warehouse_name": "Магазин на Ленина",
  "warehouse_address": "г. Примерск, ул. Ленина, 1",
  "user_id": 14,
  "user_name": "Смирнова Ольга Николаевна",
  "amount": 1180,
  "cost": 760,
  "discount": 120,
  "items": [
    {
      "line_id": 90211,
      "id": 1052,
      "ext_id": "A-1052",
      "name": "Чайник заварочный, 800 мл",
      "barcode": "4600000010526",
      "quantity": 1,
      "price": 1300,
      "discount": 120,
      "cost": 760,
      "motivation_bonus": 0,
      "motivation_bonus_description": null
    }
  ]
}
id, guid Ид чека в облаке и его уникальный идентификатор
datetime Дата и время чека
type Тип чека: sale — продажа, return — возврат
checknum, globalchecknum, session Номер чека в смене, сквозной номер чека и номер смены
customer Покупатель: ид, внешний ид, Ф.И.О., почта и телефон. null, если чек без покупателя
card Карта покупателя: ид, внешний ид, UID и штрихкод. null, если карта не использовалась
warehouse_id, warehouse_ext_id, warehouse_name, warehouse_address Точка продаж: ид, внешний ид, название и адрес
user_id, user_name Кассир: ид и Ф.И.О.
amount, cost, discount Сумма чека, себестоимость и скидка
items Строки чека: ид строки (line_id), ид товара (id), внешний ид, название, штрихкоды, количество, цена, скидка, себестоимость и бонус продавцу

Изменение остатка

{
  "event": "onhand",
  "account": "mycompany",
  "id": 48213,
  "warehouse_id": 2,
  "warehouse_ext_id": "W-02",
  "item_id": 1052,
  "item_ext_id": "A-1052",
  "quantity": 7,
  "quantity_before": 8,
  "quantity_after": 7,
  "lot_number": null,
  "manufacture_date": null,
  "expire_date": "2027-03-01",
  "cost": 760
}
id Ид записи остатка. У товара на одной точке продаж может быть несколько записей — по партиям
warehouse_id, warehouse_ext_id Точка продаж: ид и внешний ид
item_id, item_ext_id Товар: ид и внешний ид
quantity_before, quantity_after Количество в записи до и после изменения. При удалении записи quantity_after равно 0
quantity Текущее количество в записи
lot_number, manufacture_date, expire_date Номер партии, дата производства и срок годности
cost Себестоимость единицы товара

Подсказка. Уведомление об остатке приходит по каждой изменённой записи. Чек из пяти товаров вызывает одно уведомление о чеке и как минимум пять уведомлений об остатках. Чтобы узнать полный остаток товара на точке, запросите его через API — см. API: общие сведения.

Требования к принимающей системе

Код ответа От 200 до 299. Любой другой код считается ошибкой
Время ответа Соединение должно установиться за 6 секунд, ответ — прийти за 10 секунд
Повторная отправка Не выполняется: если ваша система была недоступна, уведомление не повторится
Порядок Уведомления отправляются сразу после события, одно за другим

Совет. Отвечайте на уведомление сразу, а обработку выполняйте у себя в фоне. Чтобы не потерять данные при сбоях, раз в сутки сверяйте чеки и остатки через API.

Проверка

Откройте настроенное уведомление и нажмите «Протестировать». Облако отправит на указанный адрес пробный запрос и покажет, куда он ушёл.

Изменение остатка Отправляется запрос в рабочем формате по последней записи остатка
Новый чек Пробная отправка не поддерживается. Проверьте уведомление на настоящем чеке: пробейте чек на кассе

Результат отправки записывается в системные журналы: успешные запросы — в серверный журнал информации, ошибки — в серверный журнал ошибок с адресом, кодом ответа и текстом ошибки.

Права доступа

Настройка уведомлений открыта пользователям с ролью superAdmin. Отдельного права на раздел нет. Ссылка «Настроить webhook» находится на вкладке API и обмен с 1С, для которой нужно право console.config.api.

Частые ошибки

Ситуация Причина Что делать
Уведомления не приходят Настройка выключена Откройте уведомление и выберите Да (включено) в поле Включено
Уведомления не приходят, в журнале ошибок Webhook error Ваша система недоступна, отвечает дольше 10 секунд или возвращает код не из диапазона 200–299 Проверьте адрес и работу принимающей системы. Код ответа и текст ошибки смотрите в серверном журнале ошибок
Ваша система отвечает кодом 401 или 403 Не совпадают токен или логин с паролем Проверьте Тип авторизации, Логин и Пароль (токен)
Не приходят уведомления о сменах, входе продавца, поступлениях По этим событиям уведомления пока не отправляются Используйте события «новый чек» и «изменилось количество товара» или получайте данные через API
Часть уведомлений потеряна Принимающая система была недоступна, а повторной отправки нет Сверьте данные через API за нужный период
Уведомление о чеке приходит с задержкой Касса работала без связи и передала чеки позже Это штатное поведение: ориентируйтесь на datetime чека — см. Работа без интернета
Кнопка «Протестировать» ничего не отправляет для события «новый чек» Пробная отправка для этого события не поддерживается Пробейте чек на кассе

Связанные разделы