API и вебхуки для клиник и CRM | Dentum
Dentum

API и интеграции

Три способа: без кода — Telegram-чат филиала и календарь; для разработчиков и CRM — REST API и вебхуки.

Telegram-чат

Записи с кнопкой «Подтвердить» приходят в чат ресепшн. Кабинет → «Уведомления о записях».

Календарь (ICS)

Все записи — в Google или Apple Calendar по подписке. Кабинет → «Календарь».

REST API и вебхуки

Событие о каждой записи, статусы, занятость из CRM. Ниже.

Ключ доступа

Кабинет → «Интеграции» → «Создать ключ». Ключ показывается один раз — храните его на сервере. В каждом запросе заголовок Authorization: Bearer dk_live_… Лимит — 120 запросов в минуту на ключ.

https://dentum.uz/api/cabinet/v1

Методы

GET/clinicФилиал, расписание, включена ли онлайн-запись
GET/bookings?since=2026-10-01T00:00:00Z&limit=100Записи, изменённые после since (курсор — next_since)
GET/bookings/D-261001-K3F7Запись по номеру
POST/bookings/D-261001-K3F7/statusСтатус: confirmed, declined, arrived, paid, noshow
PUT/busyЗанятость из CRM: окно заменяется целиком (идемпотентно)
GET/busy?from=2026-10-01&to=2026-10-14Сохранённая занятость
curl https://dentum.uz/api/cabinet/v1/bookings?since=2026-10-01T00:00:00Z \
  -H "Authorization: Bearer dk_live_…"

curl -X POST https://dentum.uz/api/cabinet/v1/bookings/D-261001-K3F7/status \
  -H "Authorization: Bearer dk_live_…" -H "Content-Type: application/json" \
  -d '{"status":"confirmed"}'

curl -X PUT https://dentum.uz/api/cabinet/v1/busy \
  -H "Authorization: Bearer dk_live_…" -H "Content-Type: application/json" \
  -d '{"from":"2026-10-03T00:00:00+05:00","to":"2026-10-17T00:00:00+05:00","source":"my-crm",
       "blocks":[{"start":"2026-10-03T15:00:00+05:00","end":"2026-10-03T16:30:00+05:00","id":"visit-881"}]}'

Объект записи

Время — по Ташкенту (+05:00). Данные пациента — только для обработки записи в вашу клинику.

{
  "ref": "D-261001-K3F7",
  "status": "requested",
  "service": "Имплантация",
  "source": "web",
  "created_at": "2026-10-01T09:12:44.120Z",
  "updated_at": "2026-10-01T09:12:44.120Z",
  "slot": { "start": "2026-10-03T10:00:00+05:00", "preference": null, "timezone": "Asia/Tashkent" },
  "patient": { "name": "Азиз", "phone": "+998901234567", "telegram_linked": true }
}

Без двойных записей

Если CRM передаёт занятое время через PUT /v1/busy, Dentum не предлагает его пациентам и AI-агентам. Присылайте окно (например, ближайшие 14 дней) каждые 5–15 минут.

Вебхуки

Укажите https-адрес в кабинете — секрет (whsec_…) показывается один раз. События: booking.created, booking.updated (с previous_status), ping. Ответьте 2xx за 8 секунд; иначе повторим: 1 мин, 5 мин, 30 мин, 2 ч, 6 ч, 12 ч (всего 7 попыток). Обязательно проверяйте подпись:

Dentum-Signature: t=<unix>,v1=<hex> — HMAC-SHA256(секрет, t + "." + тело запроса). Отклоняйте t старше 5 минут.

import { createHmac, timingSafeEqual } from 'node:crypto';

// raw — тело запроса строкой, как пришло (до JSON.parse)
export function verifyDentum(raw, header, secret) {
  const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header || '');
  if (!m || Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;
  const want = createHmac('sha256', secret).update(m[1] + '.' + raw).digest();
  const got = Buffer.from(m[2], 'hex');
  return got.length === want.length && timingSafeEqual(got, want);
}
function verify_dentum(string $raw, string $header, string $secret): bool {
  if (!preg_match('/^t=(\d+),v1=([0-9a-f]{64})$/', $header, $m)) return false;
  if (abs(time() - (int)$m[1]) > 300) return false;
  return hash_equals(hash_hmac('sha256', $m[1] . '.' . $raw, $secret), $m[2]);
}

Календарь (ICS)

Ссылка — в кабинете, раздел «Календарь». Google Calendar: «Другие календари» → «+» → «По URL». Apple: «Файл» → «Новая подписка на календарь». Google обновляет подписки раз в несколько часов — для мгновенных уведомлений используйте Telegram-чат. Телефон в календаре замаскирован (полный — в кабинете).

Спецификация

OpenAPI 3.1: /openapi-clinic.json

Вопросы: info@dentum.uz или @dentumcrmbot. Отдельный API для AI-агентов — для AI-агентов.

Запись к стоматологу

Шаг 1 из 2 · услуга и время

Услуга
Клиника
День
Время

Бесплатно · номер заявки сразу · Удобнее по телефону? +998 91 787 00 08 (пн–сб 9:00–19:00)