1. Создать страничку или API, на которую будет присылаться хук. Она должна успешно отвечать на запрос:
curl -X POST https://exemple.com -d "name=sessionUpdate&data[id]=5&data[user_id]=1&data[session_key]=11111111111111111111111111111111&data[create_date]=2019-09-12%2013:29:51&data[update_date]=now()&data[php_session]=22222222222222222222222222&data[IP]=172.18.0.1&data[is_support]=0]¶ms[dop_param1]=param1¶ms[dop_param2]=param2¶ms[dop_param3]=param3"
где exemple.com — это полный путь к файлу обработчика
2. В настройках Ветменеджера перейдите в раздел Справочники -> Сервисы для хук-уведомлений -> Добавить. Заполните поля и нажмите кнопку «Сохранить».

3. Пример получения данных на событие goodEdit (редактирование товара). Ваш сайт получит данные в виде массива:
[
["name"]=> "goodEdit"
["data"]=> [
["id"]=> "5380"
["group_id"]=>"65"
["title"]=>"sfsdf"
["unit_storage_id"]=>"5"
["is_warehouse_account"]=>"1"
["is_active"]=>"1"
["code"]=>""
["is_call"]=>"0"
["is_for_sale"]=>"1"
["barcode"]=>""
["description"]=>""
["prime_cost"]=>"0.0000000000"
]
["params"]=> [
["dop_param1"]=>"1" <- здесь будет значение, которое было введено в настройках хука в поле "Параметр 1"
["dop_param2"]=>"2"
["dop_param3"]=>"3"
]
]Не отправленные хуки можно посмотреть, используя api: Доступ к хукам, которые не удалось отправить.
Если вебхук был активен, но сообщения по нему перестали приходить, проверьте количество записей в FailedHook.
Когда количество неотправленных хуков (FailedHook) превышает 1000, вебхук автоматически деактивируется, даже если ранее был настроен корректно.
Это основной лимит, из-за которого может прекратиться отправка вебхуков.
После очистки списка FailedHook нужно повторно активировать вебхук — после этого отправка возобновится.
Чтобы восстановить работу, необходимо почистить список упавших хуков, как описано в инструкции.
Ветменеджер поддерживает следующие события:
Название события | Описание |
|---|---|
| admissionAdd | срабатывает при добавлении записи на приём |
| admissionEdit | срабатывает при редактировании записи на приём |
| admissionChanged | срабатывает при изменении ключевых полей записи на приём |
| admissionPlanned | срабатывает при создании запланированной записи на приём |
| admissionSetDeleted | срабатывает при пометке записи на приём как удалённой |
| admissionRestored | срабатывает при восстановлении записи на приём |
| admissionDirected | срабатывает при переводе клиента к врачу |
| admissionInTreatment | срабатывает при переводе приёма в статус «у врача» / in_treatment |
| admissionAccepted | срабатывает при переводе приёма в статус accepted. Это не событие создания или обычного редактирования записи. |
| admissionDelayed | срабатывает, если клиент просрочил приём |
| admissionConfirm | срабатывает при подтверждении записи на приём |
| admissionConfirmed | срабатывает, если запись подтверждена |
| admissionInvoicesSumChanged | срабатывает при изменении суммы счетов по приёму |
Данные:
Данные:
Товары и услуги
Название события | Описание |
|---|---|
| goodAdd | Срабатывает при добавлении товара или услуги |
| goodEdit | Срабатывает при редактировании товара или услуги |
| goodDeactivate | Срабатывает при деактивации (удалении) товара или услуги |
| goodActivate | Срабатывает при активации товара или услуги |
| goodGroupAdd | Срабатывает при добавлении группы товаров |
| goodGroupEdit | Срабатывает при редактировании группы товаров |
| goodGroupDelete | Срабатывает при удалении группы товаров |
Данные событий:
Для goodAdd, goodEdit, goodDeactivate и goodActivate:
id — ID товара или услуги;
group_id — ID группы товаров;
title — название товара;
unit_storage_id — номер склада или пустая строка;
is_warehouse_account — 0 — не числится на складе, 1 — числится на складе;
is_active — 0 — неактивный, 1 — активный;
code — артикул или пустая строка;
is_call — 1 — товар или услуга относится к вызову, 0 — нет;
is_for_sale — 1 — для продажи, 0 — нет;
barcode — номер штрихкода или пустая строка.
Для goodGroupAdd, goodGroupEdit и goodGroupDelete:
id — ID группы товаров;
title — название группы товаров;
markup — наценка, %;
is_service — 0 — товар, 1 — услуга;
is_show_in_vaccines — 0 — не показывать в вакцинациях, 1 — показывать в вакцинациях.
Название события | Описание |
|---|---|
| userAdd | срабатывает при добавлении сотрудника |
| userEdit | срабатывает при редактировании сотрудника |
Данные:
Рабочий график
Название события | Описание |
|---|---|
| timesheetAdd | срабатывает при добавлении смены в график |
| timesheetEdit | срабатывает при редактировании смены в графике |
| timesheetDelete | срабатывает при удалении смены в графике |
| timesheetMassChanges | срабатывает при массовом добавлении, редактировании или копировании смены |
Данные:
Название события | Описание |
|---|---|
| cassaAdd | срабатывает при добавлении кассы |
| cassaEdit | срабатывает при редактировании кассы |
| cassacloseAdd | срабатывает при добавлении документа закрытия кассы |
| cassacloseExec | срабатывает при выполнении документа о закрытии кассы |
Данные:
Данные (для cassacloseAdd и cassacloseExec):
Название события | Описание |
|---|---|
| invoiceAdd | срабатывает при добавлении и сохранении счета (без оплаты) |
| invoiceEdit | срабатывает при редактировании счета |
| invoiceRun | срабатывает при выполнении счета |
| invoiceRollback | срабатывает при откате счета |
| invoiceDelete | срабатывает при отмене счета |
Данные:
id — ID счета;
doctor_id — ID доктора;
client_id — ID клиента;
pet_id — ID питомца;
description — примечание;
percent — суммарное значение скидки и надбавки;
amount — сумма счета;
status — save — сохранен;
invoice_date — дата сохранения/проведения счета;
create_date — дата создания строки счета;
night — 1 — ночной счет, 0 — нет;
increase — надбавка в %;
discount — скидка в %;
call — отметка, если счет создан на вызове;
paid_amount — оплаченная сумма по счету или 0;
payment_status — none — не оплачен, partial — частично оплачен, full — полностью оплачен;
clinic_id — ID клиники;
creator_id — ID сотрудника, создавшего счет.
Название события | Описание |
|---|---|
| clientAdd | срабатывает при добавлении клиента |
| clientEdit | срабатывает при редактировании клиента |
| clientDeactivate | срабатывает при удалении клиента |
| clientActivate | срабатывает при активации клиента |
| clientBalanceEdit | срабатывает при изменении баланса клиента |
Данные:
id — ID клиента;
address — адрес;
home_phone — домашний телефон; work_phone — рабочий телефон; cell_phone — мобильный телефон;
note — описание; type_id — ID типа клиента; how_find_id — ID источника, откуда узнали о клинике;
balance — сумма баланса; email — email;
city — нет данных; city_id — ID города;
date_register — дата регистрации; zip — почтовый индекс;
vip — не используется;
last_name — фамилия;
first_name — имя;
middle_name — отчество;
status — ACTIVE — активный, DISABLED — неактивный, DELETED — неактивный, TEMPORARY — временный;
discount — скидка в %;
passport_series — паспортные данные;
lab_number — лабораторный номер;
street_id — ID улицы;
apartment — номер дома и квартиры;
number_of_journal — номер по журналу;
unsubscribe — 1 — отказ от рассылок, 0 — нет;
in_blacklist — 1 — клиент в черном списке, 0 — нет;
phone_prefix — код страны;
last_visit_date — дата последнего посещения.
Название события | Описание |
|---|---|
| petAdd | срабатывает при добавлении питомца |
| petEdit | срабатывает при редактировании питомца |
| petDelete | срабатывает при удалении питомца |
| petDied | срабатывает, если указать, что питомец умер |
Данные:
id — ID питомца;
owner_id — ID владельца (клиента);
type_id — ID вида питомца;
alias — кличка;
sex — female — Ж;
birthday — дата рождения;
note — примечание;
breed_id — ID породы;
color_id — ID окраса;
chip_number — номер чипа;
lab_number — лабораторный номер;
status — alive — активный, dead — умер, deleted — неактивный;
weight — вес;
deathnote — причина смерти;
deathdate — дата смерти.
Название события | Описание |
|---|---|
| storeDocumentAdd | срабатывает при добавлении документа по складу |
| storeDocumentDelete | срабатывает при удалении документа по складу |
| storeDocumentEdit | срабатывает при редактировании документа по складу |
| storeDocumentExec | срабатывает при выполнении документа по складу |
| storeDocumentRollback | срабатывает при откате документа по складу |
Данные:
id — ID документа по складу;
document_type — prihod — приходная накладная, rashod — расходная накладная, inventar — инвентаризация, transfer_receiver — передача товара между складами (получение), transfer_sender — передача товара между складами (списание), invoice — создание счета из заказа клиента;
status — save — сохранен, exec — выполнен, deleted — удален;
store_id — ID склада;
receiver_store_id — ID склада получателя при передаче товара между складами или 0;
supplier_id — ID поставщика; receiver_id — ID контрагента;
add_dt — дата создания документа; edit_dt — дата редактирования документа;
exec_dt — дата выполнения документа;
prihod_number — номер приходной накладной; prihod_date — дата приходной накладной;
creator_id — ID пользователя, создавшего документ;
executor_id — ID пользователя, выполнившего документ;
sender_user_id — ID пользователя текущего склада или отправителя;
receiver_user_id — ID пользователя, выполнившего передачу товара;
transfer_sender_store_doc_id — ID документа, в котором списался товар при передаче товара между складами, или 0.
Название события | Описание |
|---|---|
| medicalCardsAdd | срабатывает при добавлении медкарты |
| medicalCardsEdit | срабатывает при редактировании медкарты |
Общие данные:
Название события | Описание |
|---|---|
| sessionCreate | срабатывает при входе в программу |
| sessionDestroy | срабатывает при выходе из программы |
| sessionUpdate | срабатывает каждую минуту |
| execClientOrder | срабатывает при выполнении счёта из заказа клиента |
Общие данные: id — ID сессии; user_id — ID пользователя; session_key — ключ сессии; create_date — дата создания; update_date — дата обновления; php_session — ключ PHP; IP — IP-адрес компьютера; is_support — 0.
Данные: id, client_id, order_status (wait — ожидает, done — выполнен), clinic_id, good_id, unit_sale_id, quantity, create_date.
Для создания или изменения самой записи на приём до выставления счёта используйте события admissionAdd, admissionEdit и admissionChanged.
4. Пример запроса на получение id справочника с хук-уведомлениями
curl --location --request GET 'https://{Domain URL}/rest/api/ComboManualName?filter=[{'property':'name', 'value':'services_for_hooks'}]' \
--header 'Content-Type: application/json' \
--header 'X-REST-API-KEY: {REST API KEY}' \Ответ сервера:
{
"success": true,
"message": "Records Retrieved Successfully",
"data": {
"totalCount": "1",
"comboManualName": [
{
"id": "11",
"title": "Сервисы для хук-уведомлений",
"is_readonly": "0",
"name": "services_for_hooks",
"comboManualItems": [
{
"id": "199",
"combo_manual_id": "11",
"title": "admissionAccepted",
"value": "value",
"dop_param1": "1", <-параметры введённые в настройках Хука
"dop_param2": "2",
"dop_param3": "3",
"is_active": "0"
},
....
{
"id": "187",
"combo_manual_id": "11",
"title": "noName",
"value": "value",
"dop_param1": "1",
"dop_param2": "2",
"dop_param3": "3",
"is_active": "0"
}
]
}
]
}
}5. Пример запроса на получение списка хук-уведомлений с фильтром по id справочника
curl --location --request GET 'https://{Domain URL}/rest/api/ComboManualItem?filter=[{'property':'combo_manual_id', 'value':'{{ID}}'},{'property':'is_active', 'value':'1'}]' \
--header 'Content-Type: application/json' \
--header 'X-REST-API-KEY: {REST API KEY}' \Параметры:
is_active: 0 - неактивный, 1 - активный is_active: 0 - хук уведомления не отправляются
Ответ сервера:
{
"success": true,
"message": "Records Retrieved Successfully",
"data": {
"totalCount": "1",
"comboManualItem": [
{
"id": "251",
"combo_manual_id": "11",
"title": "startInvoiceRun",
"value": "value",
"dop_param1": "1", <- параметры введённые в настройках Хука
"dop_param2": "2",
"dop_param3": "3",
"is_active": "1",
"comboManualName": {
"id": "11",
"title": "Сервисы для хук-уведомлений",
"is_readonly": "0",
"name": "services_for_hooks"
}
}
]
}
}
Сессия:
'sessionCreate'
'sessionUpdate'
'sessionDestroy'
Телефония:
'cdrSyncEvent'
Тарифы:
'changeTariff'
'updateTariff'
'endOfTariffPlan'
Рассылки:
'AddSenderTaskQueue'
'DeleteSenderTaskQueue'
'ResendTaskQueueMessage'
'SetOldTasksAsErrors'
'SetSenderTaskAsInProgress'
'SetSenderTaskAsSaved'
'SetTaskSendResponse'
'SetTaskResponseStatus'