Webhooks
Для внешних интеграций реализован функционал веб хуков.
Для использования необходимо:
Установить статус webhook'а в настройках интеграции в состояние Активен.
Указать endpoint на который webhook будет отправлять данные.
Указать подписанные события, на которые будет реагировать хук.
Структура запроса
Данные на endpoint отправляются всегда методом POST.
В заголовке x-api-key передается ключ интеграции.
В теле запроса передается полезная нагрузка.
Структура payload
id (идентификатор сущности поля которой поменяли)
patient_id (Отправляется всегда для привязки к пациенту, кроме изменений самого пациента)
Прочие измененные поля сущности, которые передаются по api такого же типа и формата.
Пример:
// для новой записи в календаре структура будет такой
$payload = [
"patient_id" => 10,
"id" => 16,
"datetime" => "2024-10-25T17:15:00+05:00",
"procedure" => "Массаж",
"user" => "Админов Админ Админович",
"canceled" => false,
];
// При смене даты записи в календаре структура будет такой
$payload = [
"patient_id" => 10,
"id" => 16,
"datetime" => "2024-10-26T17:15:00+05:00",
];
Список событий:
patient (Изменения данных пациента) (Пример)
record (Создание или изменение записи пациента) (Пример)
patient_bonus (Создание или изменение бонусов пациента) (Пример)
patient_bonus_notice (Приближение даты списания бонусов пациента) (Пример)
control_turnout_notice (Наступление даты контролькой явки) (Пример)
online_medcard_reception (Завершение онлайн приема) (Пример)
События, которые запускаются по планировщику и необходимы для уведомлений имеют суффикс _notice
Ответ сервера
Webhook ожидает ответ со статусом 202.
Обработка ошибок
При трех неудачных попытках отправить данные (HTTP статус отличный от 202 или endpoint недоступен) Webhook отключается для интеграции.
Необходимо устранить причину ошибки и включить webhook повторно.
Полный список полей по событиям:
patient:
$payload = [
"id" => 1,
"full_name" => "Админов Админ Админович",
"email" => "admin@example.com",
"balance" => 500,
];
record:
$payload = [
"id" => 16,
"patient_id" => 10,
"datetime" => "2024-10-25T17:15:00+05:00",
"procedure" => "Массаж",
"user" => "Админов Админ Админович",
"canceled" => false,
];
patient_bonus:
$payload = [
"id" => 16,
"patient_id" => 10,
#(-1 списание, 0 без изменений, 1 начисление)
"operation_type" => -1,
#(1 услуга, 5 продажа, 100 ручное, 101 событие, 102 - Birthday)
"type" => 1,
# Было начислено
"amount" => 500,
# Доступно
"balance" => 300,
"activated_date" => "2024-10-25T17:15:00+05:00",
"deactivated_date" => "2024-10-25T17:15:00+05:00",
"charged_date" => "2024-10-25T17:15:00+05:00",
"event_bonuses" => "Клинике 5 лет",
];
patient_bonus_notice:
$payload = [
"id" => 16,
"patient_id" => 10,
"type" => "За покупку",
# Было начислено
"amount" => 500,
# Доступно
"balance" => 300,
"charged_at" => "2024-10-25T17:15:00+05:00",
"activated_at" => "2024-10-25T17:15:00+05:00",
"deactivated_at" => "2024-10-25T17:15:00+05:00",
"event_bonuses_id" => null, // Название события
];
control_turnout_notice:
$payload = [
"id" => 16,
"patient_id" => 10,
"date" => "2024-10-25T17:15:00+05:00",
"doctor_id" => 500,
"doctor" => "Иванов Иван Иванович",
"specialty_id" => 21,
"specialty" => "Травматолог",
];
online_medcard_reception:
$payload = [
"id" => 16,
"patient_id" => 10,
"created_at" => "2024-10-25T17:15:00+05:00",
];
26 января 2026