Описание Webhook
В системе RealtyCalendar есть функция Webhook. Она отправляет данные на указанный вами URL при определённых событиях в личном кабинете.
Как включить Webhook
Для подключения Webhook необходимо:
добавить ваш URL в Настройки — CRM-интеграции в поле «Введите URL нового Webhook»;
нажать кнопку «Запустить».
Будут происходить списания денежных средств по тарифу «за интеграцию с внешними системами».
С тарифами можно ознакомиться на странице «Баланс».
Как работают Webhook
Webhook отправляют данные на указанный вами URL при определённых событиях в личном кабинете.
Ожидание ответа:
Webhook ожидают от сервера ответ со статусом 200
Повторные попытки при недоступности сервера:
Если клиентский сервер недоступен, повторная отправка осуществляется с задержками:
5 секунд → 30 секунд → 2 минуты → 5 минут → 10 минут → 30 минут → 1 час → 2 часа → 4 часа → 8 часов → 24 часа → 2 суток
Уведомления о проблемах:
После 3-й неудачной попытки отправляется письмо на почту агентства с темой «Проблемы с доставкой web-хуков»
После 2 суток без успешной отправки статус изменяется на «Остановлено»
Возобновление работы:
Чтобы Webhook начали заново отправляться после остановки, необходимо нажать кнопку «Запустить».
События Webhook
Webhook отправляются при следующих действиях с бронями:
- создание
- удаление
- перевод из брони в отмену
- перевод из отмены в бронь
- перевод из заявки в бронь
- перевод из заявки в отмены
- перевод из отмены в заявку (не поддерживает)
- перевод из брони в заявку (не поддерживает)
- изменение следующих полей:
- статус
- сумма
- заезд
- время заезда
- выезд
- время выезда
- имя
- телефон
- примечание
- дополнительный телефон
- эмодзи
- файлы (не поддерживает)
- действия с платежами:
- добавление платежа
- удаление платежа
- создание ручного залога
- создание ссылки на залог
- оплата залога по ссылке
- возврат залога
Содержимое Webhook
Название поля | Тип | Описание | Дополнительно |
action | string | Какое произошло действие
| |
status | string | Итоговый статус
| |
data | Тело хука |
Тело {data}
Название поля | Тип | Описание | Дополнительно |
booking | Описание события | ||
changes | Описание изменений | ||
crm_entity_id | |||
bitrix_lead_id |
Тело {booking}
Название поля | Тип | Описание | Дополнительно |
id | integer | id брони | |
url | string | ссылка на бронь в личном кабинете | |
agency_id | integer | id агентства | |
begin_date | строка в формате “YYYY-MM-DD” | Заезд | |
end_date | строка в формате “YYYY-MM-DD” | Выезд | |
number_of_days | integer | количество дней брони | |
number_of_nights | integer | количество ночей брони | |
arrival_time | string | null | время прибытия, например "17:00" | |
departure_time | string | null | время убытия, например "11:00" | |
realty_id | integer | id объекта | |
realty_room_id | integer | id комнаты из номерного фонда | |
apartment | описание объекта | ||
address | string | адрес объекта | |
user_id | integer | id пользователя, который создал событие | |
created_at | timestamp | время создания события | |
updated_at | timestamp | время обновления события | |
status_cd | integer | статус брони в числовом формате | |
is_delete | boolean | удалена ли бронь | |
is_hidden | boolean | для Booking.com и Tvi показывает true, если не оплачен менеджер каналов | |
notes | string | null | Примечание к брони | |
color | string | null | цвет брони | |
reaction | string | null | эмодзи | |
source | string | источник брони | |
booking_origin_id | integer | id площадки-источника брони | |
booking_origin | источник брони подробно | ||
client_id | integer | id клиента (гостя) в нашей базе | |
client | описание клиента (гостя) | ||
amount | integer | сумма брони | |
price_per_day | integer | стоимость за день | |
prepayment | integer | оплаченная сумма | |
payment | integer | сколько прошла сумма оплаты | |
payment_links | string[] | массив созданных ссылок на оплату брони через Монету | |
event_calendar_payments | array {payment} | массив платежей и депозитов при хуке создания брони | |
payments_with_deleted | array {payment} | массив платежей и депозитов при хуке изменения брони | |
deposit | integer | сколько оплачен депозит | |
deposit_payment_links | string[] | массив созданных ссылок на оплату залога через Монету | |
rent_payment_invoices | список счетов в личном кабинете агентства | ||
balance_to_be_paid_1 | integer | Сколько осталось оплатить {amount} - {prepayment} | |
balance_to_be_paid_2 | integer | {amount} - {prepayment}+{дата booking_deposit} | |
platform_tax | float | комиссия площадки, значение передаёт площадка | |
platform_tax_currency | string | null | валюта комиссии площадки | |
is_send_confirm_email | boolean | есть ли подтверждение брони на почту гостя | |
automessages_enabled | включена ли функция автосообщений | ||
booking_id | старое поле, не используется | будет удалено | |
days | старое поле, не используется | будет удалено | |
max_days | спец.цена старое поле, не используется | будет удалено | |
closed_on_arrivial | спец.цена | будет удалено | |
closed_on_departure | спец.цена | будет удалено | |
rate_ids | спец.цена | будет удалено | |
single_use_amount | спец.цена старое поле, не используется | будет удалено | |
closed | спец.цена | будет удалено | |
min_stay_through | спец.цена | будет удалено | |
max_stay_through | спец.цена | будет удалено | |
ostrovok_rate_ids | спец.цена | будет удалено | |
ostrovok_occupancy_ids | старое поле, не используется | будет удалено | |
oktogo_rate_ids | спец.цена | будет удалено | |
use_rates_restrictions | спец.цена | будет удалено | |
expedia_rate_ids | спец.цена | будет удалено | |
special_price_id | спец.цена | будет удалено | |
bronevik_rate_ids | спец.цена | будет удалено | |
sync_at | системное поле | будет удалено | |
preparing | системное поле | будет удалено | |
partner | системное поле | будет удалено | |
partner_uid | системное поле | будет удалено | |
partner_guests_count | системное поле | будет удалено | |
hotels_101_rate_ids | спец.цена | будет удалено | |
secure_id | системное поле | будет удалено | |
uuid | системное поле | будет удалено |
Тело {client}
Название поля | Тип | Описание | Дополнительно |
id | integer | id клиента | |
fio | string | имя клиента | |
string | почта клиента | ||
phone | string | телефон клиента | |
additional_phone | string | null | дополнительный телефон | |
created_at | timestamp | время создания | |
updated_at | timestamp | время обновления | |
modified_at | timestamp | ||
agency_id | integer | id агентства | будет удалено |
Тело {booking_origin}
Название поля | Тип | Описание | Дополнительно |
id | integer | id источника брони | |
title | string | название источника брони | например “Avito.ru” |
Тело {apartment}
Название поля | Тип | Описание | Дополнительно |
id | integer | id объекта | |
title | string | служебное название объекта, а если нет служебного название - то адрес объекта | |
| address | string | Полный адрес объекта |
Тело {payment}
Название поля | Тип | Описание | Дополнительно |
rent_id | integer | id события (брони) | |
rent_payment_invoice_id | integer | id счёта | |
user_id | integer | id пользователя, который создал платеж | |
amount | integer | сумма платежа | |
is_approved | boolean | старое поле, не используется | будет удалено |
note | string | null | комметарии к платежу | |
timezone | string | старое поле, не используется | будет удалено |
created_at | timestamp | время создания | |
updated_at | timestamp | время обновления | |
paid_at | timestamp | время оплаты | |
paymentable_type | string | старое поле, не используется | будет удалено |
paymentable_id | integer | старое поле, не используется | будет удалено |
refunded | boolean | null | возвращен ли платеж | |
type | "payment" | “deposit” | тип платежа | |
payment_type | "income" | “refund” | “fine” | доход, возврат или штраф | |
string | старое поле, не используется | будет удалено | |
parent_payment_id | integer | id платежа, который вернули | |
payment_system | "moneta" | "moneta_le" | "yandex_kassa" | "manual" | платежная система | |
paid_user_id | integer | null | внутренний id пользователь платежной системы | |
is_delete | boolean | удален ли платеж | |
refund_data | json | полная информация о возврате от платежной системы | |
refund_started_at | timestamp | время возврата платежа | |
moneta_payment_state | string | старое поле, не используется | будет удалено |
creation_origin | "internal" | "external" | как было создан платеж | |
moneta_transaction_id | bigint | null | внутренний id платежа | |
uuid | string | старое поле, не используется | будет удалено |
secure_id | string | старое поле, не используется | будет удалено |
payment_link | string | ссылка на оплату |
Тело {changes}
Название поля | Тип | Описание | Дополнительно |
event_calendar | integer | изменение данных о брони (даты, время, сумма, статус и т.д.) | |
client | объект | изменение данных клиента | |
event_calendar_payments | массив | изменения в платежах |
Примеры Webhook
Пример вебхука на создание брони
{
"action": "create_booking",
"status": "booked",
"data": {
"booking": {
"id": 113386019,
"begin_date": "2025-06-25",
"end_date": "2025-06-26",
"realty_id": 208656,
"user_id": 96663,
"created_at": "2025-06-16T11:30:24.239+03:00",
"updated_at": "2025-06-16T11:30:44.353+03:00",
"status_cd": 5,
"booking_id": null,
"amount": 500,
"is_delete": false,
"notes": "2 гостей",
"color": null,
"contacts": null,
"source": "manual",
"days": null,
"realty_room_id": null,
"max_days": null,
"closed_on_arrivial": false,
"closed_on_departure": false,
"rate_ids": null,
"single_use_amount": null,
"closed": false,
"min_stay_through": null,
"max_stay_through": null,
"ostrovok_rate_ids": null,
"ostrovok_occupancy_ids": null,
"booking_origin_id": null,
"oktogo_rate_ids": null,
"arrival_time": null,
"departure_time": null,
"prepayment": 500,
"client_id": 35632150,
"deposit": 0,
"is_send_confirm_email": false,
"payment": 500,
"use_rates_restrictions": false,
"expedia_rate_ids": null,
"special_price_id": null,
"is_hidden": false,
"bronevik_rate_ids": null,
"agency_id": 58474,
"reaction": null,
"sync_at": "2025-06-16T11:30:24.239+03:00",
"preparing": false,
"partner": null,
"partner_uid": null,
"partner_guests_count": null,
"platform_tax": null,
"platform_tax_currency": null,
"hotels_101_rate_ids": null,
"automessages_enabled": false,
"uuid": "3ee9d678-2a88-4e74-ab7a-65b79091e332",
"secure_id": "o8yqwjeDQO",
"client": {
"id": 35632150,
"fio": "Кирилл",
"email": null,
"phone": "+7 999 888-88-88",
"additional_phone": null,
"created_at": "2025-06-16T11:30:17.195+03:00",
"updated_at": "2025-06-16T11:30:17.773+03:00",
"swindler_id": null,
"contact_text": "Кирилл\nзабронировал 24-25 июня, Тверская 18\n500/сут",
"modified_at": "2025-06-16T11:30:17.195+03:00",
"contact_text_for_ios": "24-25 июня; Тверская 18; Кирилл; 500",
"agency_id": 58474,
"last_numbers": null
},
"event_calendar_payments": [
{
"id": 24902385,
"rent_id": 113386019,
"rent_payment_invoice_id": 117228,
"user_id": 96663,
"amount": 500,
"is_approved": false,
"note": null,
"created_at": "2025-06-16T11:30:43.966+03:00",
"updated_at": "2025-06-16T11:30:43.966+03:00",
"timezone": "Europe/Moscow",
"paid_at": "2025-06-16T11:30:43.966+03:00",
"paymentable_type": null,
"paymentable_id": null,
"refunded": null,
"type": "payment",
"payment_type": "income",
"email": null,
"parent_payment_id": null,
"payment_system": "manual",
"paid_user_id": null,
"is_delete": false,
"refund_data": null,
"refund_started_at": null,
"moneta_payment_state": null,
"creation_origin": "internal",
"moneta_transaction_id": null,
"uuid": "1a68362a-d287-424b-adcb-f7aea7e81642",
"secure_id": "vBWPUdGmsM",
"payment_link": null
}
],
"url": "https://realtycalendar.ru/event_calendars/113386019",
"price_per_day": 500,
"apartment": {
"id": 208656,
"title": "Тверская 18"
},
"booking_origin": {
"id": null,
"title": null
},
"rent_payment_invoices": [
{
"id": 117228,
"name": "Перевод"
},
{
"id": 111397,
"name": "Сякой"
},
{
"id": 104687,
"name": "Карта"
},
{
"id": 104427,
"name": "Монета"
},
{
"id": 104390,
"name": "Наличные"
}
],
"deposit_payment_links": [],
"payment_links": [],
"number_of_days": 2,
"number_of_nights": 1,
"balance_to_be_paid_1": 0,
"balance_to_be_paid_2": 0,
"address": "Тверская 18"
},
"crm_entity_id": null,
"bitrix_lead_id": null
}
}
Пример вебхука на изменение брони
{
"action": "update_booking",
"status": "booked",
"data": {
"booking": {
"id": 113386019,
"begin_date": "2025-06-25",
"end_date": "2025-06-26",
"realty_id": 208656,
"user_id": 96663,
"created_at": "2025-06-16T11:30:24.239+03:00",
"updated_at": "2025-06-16T11:33:21.547+03:00",
"status_cd": 5,
"booking_id": null,
"amount": 500,
"is_delete": false,
"notes": "2 гостей",
"color": null,
"contacts": null,
"source": "manual",
"days": null,
"realty_room_id": null,
"max_days": null,
"closed_on_arrivial": false,
"closed_on_departure": false,
"rate_ids": null,
"single_use_amount": null,
"closed": false,
"min_stay_through": null,
"max_stay_through": null,
"ostrovok_rate_ids": null,
"ostrovok_occupancy_ids": null,
"booking_origin_id": null,
"oktogo_rate_ids": null,
"arrival_time": null,
"departure_time": null,
"prepayment": 500,
"client_id": 35632150,
"deposit": 0,
"is_send_confirm_email": false,
"payment": 500,
"use_rates_restrictions": false,
"expedia_rate_ids": null,
"special_price_id": null,
"is_hidden": false,
"bronevik_rate_ids": null,
"agency_id": 58474,
"reaction": null,
"sync_at": "2025-06-16T11:33:21.574+03:00",
"preparing": false,
"partner": null,
"partner_uid": null,
"partner_guests_count": null,
"platform_tax": null,
"platform_tax_currency": null,
"hotels_101_rate_ids": null,
"automessages_enabled": false,
"uuid": "3ee9d678-2a88-4e74-ab7a-65b79091e332",
"secure_id": "o8yqwjeDQO",
"client": {
"id": 35632150,
"fio": "Кирилл",
"email": null,
"phone": "+7 999 888-88-88",
"additional_phone": null,
"created_at": "2025-06-16T11:30:17.195+03:00",
"updated_at": "2025-06-16T11:30:17.773+03:00",
"swindler_id": null,
"contact_text": "Кирилл\nзабронировал 24-25 июня, Тверская 18\n500/сут",
"modified_at": "2025-06-16T11:30:17.195+03:00",
"contact_text_for_ios": "24-25 июня; Тверская 18; Кирилл; 500",
"agency_id": 58474,
"last_numbers": null
},
"payments_with_deleted": [
{
"id": 24902385,
"rent_id": 113386019,
"rent_payment_invoice_id": 117228,
"user_id": 96663,
"amount": 500,
"is_approved": false,
"note": null,
"created_at": "2025-06-16T11:30:43.966+03:00",
"updated_at": "2025-06-16T11:30:43.966+03:00",
"timezone": "Europe/Moscow",
"paid_at": "2025-06-16T11:30:43.966+03:00",
"paymentable_type": null,
"paymentable_id": null,
"refunded": null,
"type": "payment",
"payment_type": "income",
"email": null,
"parent_payment_id": null,
"payment_system": "manual",
"paid_user_id": null,
"is_delete": false,
"refund_data": null,
"refund_started_at": null,
"moneta_payment_state": null,
"creation_origin": "internal",
"moneta_transaction_id": null,
"uuid": "1a68362a-d287-424b-adcb-f7aea7e81642",
"secure_id": "vBWPUdGmsM",
"payment_link": null
},
{
"id": 24902540,
"rent_id": 113386019,
"rent_payment_invoice_id": 104427,
"user_id": 96663,
"amount": 2000,
"is_approved": false,
"note": null,
"created_at": "2025-06-16T11:33:17.273+03:00",
"updated_at": "2025-06-16T11:33:17.273+03:00",
"timezone": "Europe/Moscow",
"paid_at": null,
"paymentable_type": "Moneta::Income",
"paymentable_id": 2174830,
"refunded": null,
"type": "deposit",
"payment_type": "income",
"email": null,
"parent_payment_id": null,
"payment_system": "moneta",
"paid_user_id": null,
"is_delete": false,
"refund_data": null,
"refund_started_at": null,
"moneta_payment_state": null,
"creation_origin": "internal",
"moneta_transaction_id": null,
"uuid": "49052179-587b-44c8-a173-d8e6823bfe7f",
"secure_id": "KBbCuT0EaW",
"payment_link": "https://saferents.ru/d/KBbCuT0EaW"
}
],
"url": "https://realtycalendar.ru/event_calendars/113386019",
"price_per_day": 500,
"apartment": {
"id": 208656,
"title": "Тверская 18"
},
"booking_origin": {
"id": null,
"title": null
},
"rent_payment_invoices": [
{
"id": 117228,
"name": "Перевод"
},
{
"id": 104687,
"name": "Карта"
},
{
"id": 104427,
"name": "Монета"
},
{
"id": 104390,
"name": "Наличные"
}
],
"deposit_payment_links": [
"https://saferents.ru/d/KBbCuT0EaW"
],
"payment_links": [],
"number_of_days": 2,
"number_of_nights": 1,
"balance_to_be_paid_1": 0,
"balance_to_be_paid_2": 0,
"address": "Тверская 18"
},
"changes": {
"event_calendar": {
"sync_at": [
null,
"2025-06-16T11:33:21.574+03:00"
]
},
"client": {
"contact_text": [
null,
"Кирилл\nзабронировал 24-25 июня, Тверская 18\n500/сут"
],
"contact_text_for_ios": [
null,
"24-25 июня; Тверская 18; Кирилл; 500"
],
"modified_at": [
null,
"2025-06-16T11:30:17.195+03:00"
]
},
"event_calendar_payments": [
{
"24902385": {
"rent_id": 113386019,
"rent_payment_invoice_id": 117228,
"user_id": 96663,
"amount": 500,
"is_approved": false,
"note": null,
"timezone": "Europe/Moscow",
"paid_at": "2025-06-16T11:30:43.966+03:00",
"paymentable_type": null,
"paymentable_id": null,
"refunded": null,
"type": "payment",
"payment_type": "income",
"email": null,
"parent_payment_id": null,
"payment_system": "manual",
"paid_user_id": null,
"is_delete": false,
"refund_data": null,
"refund_started_at": null,
"moneta_payment_state": null,
"creation_origin": "internal",
"moneta_transaction_id": null,
"uuid": null,
"secure_id": "vBWPUdGmsM"
}
},
{
"24902540": {
"rent_id": 113386019,
"rent_payment_invoice_id": 104427,
"user_id": 96663,
"amount": 2000,
"is_approved": false,
"note": null,
"timezone": "Europe/Moscow",
"paid_at": null,
"paymentable_type": "Moneta::Income",
"paymentable_id": 2174830,
"refunded": null,
"type": "deposit",
"payment_type": "income",
"email": null,
"parent_payment_id": null,
"payment_system": "moneta",
"paid_user_id": null,
"is_delete": false,
"refund_data": null,
"refund_started_at": null,
"moneta_payment_state": null,
"creation_origin": "internal",
"moneta_transaction_id": null,
"uuid": null,
"secure_id": "KBbCuT0EaW"
}
}
]
},
"crm_entity_id": null,
"bitrix_lead_id": null
}
}
Частые вопросы
1. Будут ли выгружены все бронирования, сделанные до подключения Webhook?
Нет, Webhook будут отправляться только по новым событиям.
2. Будет ли отправлен Webhook об изменениях брони, если даты уже прошли?
Webhook будет отправляться по всем событиям. Если бронь была создана до подключения хука, то хук на создание брони не придёт. Однако все изменения по брони будут поступать.
3. Как повторно отправить выгрузку через Webhook?
Для активации хука нужно изменить бронирование.
4. Сколько времени длится передача данных через Webhook?
Обычно передача данных занимает всего несколько секунд.
5. У вас есть внешний API?
На данный момент у нас нет внешнего партнёрского API, которое мы официально поддерживаем и сопровождаем.
6. Остались вопросы?
Напишите, пожалуйста, на почту: partners@realtycalendar.ru