Принимает заявки с ваших форм, лендингов, Tilda и сторонних сервисов и автоматически создаёт лиды в DialogCRM.
Каждый запрос должен содержать заголовок X-API-KEY с вашим личным ключом. Ключ находится в кабинете DialogCRM: Настройки → Интеграции → Public API & Webhooks.
Поддерживаются два типа ключей:
dg_… — ключ компании. Лид попадает в воронку по умолчанию (самая старая).dgf_… — ключ конкретной воронки. Лид попадает сразу в эту воронку.| Поле | Тип | Описание |
|---|---|---|
name обязательно | string | Имя клиента |
phone phone или email | string | Телефон в любом формате |
email phone или email | string | Email клиента |
city опц. | string | Город |
budget опц. | number | Бюджет (целое число) |
source опц. | string | Источник, например Tilda, Лендинг |
comment опц. | string | Произвольный комментарий, сохранится в активити лида |
Замените YOUR_API_KEY на ваш ключ из кабинета.
curl -X POST https://dialogsystems.ru/api/webhooks/lead \
-H "Content-Type: application/json" \
-H "X-API-KEY: YOUR_API_KEY" \
-d '{
"name": "Иван Иванов",
"phone": "+79991234567",
"email": "ivan@example.com",
"city": "Москва",
"budget": 100000,
"source": "Лендинг",
"comment":"Интересует тариф Pro"
}'
// Браузерный fetch — только для серверных скриптов или защищённого окружения!
const response = await fetch('https://dialogsystems.ru/api/webhooks/lead', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-KEY': 'YOUR_API_KEY'
},
body: JSON.stringify({
name: 'Иван Иванов',
phone: '+79991234567',
email: 'ivan@example.com',
source: 'Лендинг'
})
});
const data = await response.json();
console.log(data);
import fetch from 'node-fetch'; // или встроенный fetch в Node 18+
const res = await fetch('https://dialogsystems.ru/api/webhooks/lead', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-KEY': process.env.DIALOGCRM_API_KEY
},
body: JSON.stringify({
name: 'Иван Иванов',
phone: '+79991234567',
source: 'Tilda'
})
});
console.log(res.status, await res.json());
<?php
$ch = curl_init('https://dialogsystems.ru/api/webhooks/lead');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-API-KEY: YOUR_API_KEY',
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'name' => 'Иван Иванов',
'phone' => '+79991234567',
'email' => 'ivan@example.com',
'source' => 'Лендинг',
]));
$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo "HTTP $code\n$response";
import requests
r = requests.post(
'https://dialogsystems.ru/api/webhooks/lead',
headers={
'Content-Type': 'application/json',
'X-API-KEY': 'YOUR_API_KEY',
},
json={
'name': 'Иван Иванов',
'phone': '+79991234567',
'email': 'ivan@example.com',
'source': 'Лендинг',
},
timeout=10,
)
print(r.status_code, r.json())
В Tilda откройте Настройки сайта → Формы → Webhook и добавьте новый Webhook:
https://dialogsystems.ru/api/webhooks/leadX-API-KEY: YOUR_API_KEYВ форме настройте имена полей: name, phone, email — именно так Tilda их и отправит. Дополнительно можно добавить hidden-поле source со значением, например, Tilda · landing-name.
Если Tilda не позволяет указать кастомный заголовок, используйте промежуточный сервис (Albato, Make, n8n) или передавайте ключ как поле X-API-KEY в теле — тогда нужен серверный прокси.
{
"success": true,
"message": "Lead created successfully",
"leadId": "8f3c1b1e-3a4d-4f2e-9c1d-7b8a2f0d4e21"
}
Если в вашей компании уже есть лид с таким же телефоном или email, новый лид не создаётся. Вместо этого самый свежий существующий лид «оживляется» — возвращается на первый этап своей воронки, менеджеру добавляется заметка о повторной заявке. В leadId приходит id этого существующего лида.
{
"success": true,
"deduped": true,
"message": "Duplicate detected — existing lead revived",
"leadId": "8f3c1b1e-3a4d-4f2e-9c1d-7b8a2f0d4e21"
}
200 deduped как успех. Различайте случаи по HTTP-коду, а не по наличию leadId — он есть в обоих ответах. Ретраи безопасны: повторная отправка тех же контактов не плодит дубли.
| HTTP | Тело | Когда |
|---|---|---|
400 | {"error":"Missing required fields: name AND (phone OR email)."} | Не передан name либо нет ни phone, ни email |
400 | {"error":"Cannot process webhook: Company has no configured funnels."} | В компании ещё не настроена ни одна воронка |
401 | {"error":"API Key missing. Use X-API-KEY header."} | Не передан заголовок X-API-KEY |
403 | {"error":"Invalid API Key."} | Ключ не найден или был перевыпущен |
403 | {"error":"HTTPS required for API Key authentication."} | Запрос отправлен по HTTP, а не HTTPS |
429 | {"error":"Too many webhook requests..."} | Превышен лимит — см. ниже |
500 | {"error":"Internal Server Error"} | Внутренняя ошибка сервера. Если повторяется — напишите в поддержку |
200 deduped выше.lead_created (приветственные сообщения, назначение менеджера и т.д.) срабатывают только на 201 — на «оживлённый» дубль они не запускаются.Откройте Настройки → Интеграции → Public API & Webhooks и нажмите «Обновить». Старый ключ перестанет работать сразу, новый нужно прописать во всех ваших интеграциях.
Открытый API модуля «Онлайн-запись»: показывайте услуги, свободные слоты и записывайте клиентов из своего сайта или приложения.
Авторизация не требуется: адресом служит публичный slug опубликованной страницы записи (вкладка «Витрина» в CRM). Все ответы — JSON с полем ok.
Витрина: страница (название, оформление, таймзона, правила записи), категории, услуги (id, name, durationMin, priceMode, price, isOnline, staffIds) и мастера (id, name, jobTitle, photo).
Свободные слоты дня в таймзоне страницы: [{ time: "10:00", startsAt: "…ISO…", staffIds: [...] }]. Без staffId — объединение по всем мастерам услуги («любой мастер»).
Создать запись. Тело: serviceId, startsAt (ISO из слота), name, phone, consent: true (согласие 152-ФЗ — обязательно), опционально staffId, email, comment, src (метка канала для отчёта «Откуда записываются»). Ответ 201: booking.token — ссылка клиента на управление записью: /book/{slug}?m={token}.
Поддерживается заголовок Idempotency-Key (до 80 символов): повтор запроса с тем же ключом вернёт 200 с той же записью — безопасные ретраи.
Просмотр и отмена записи по клиентскому токену (отмена доступна до дедлайна, заданного компанией).
409 slot_taken / 409 slot_expired — время заняли или слот больше не действует: обновите слоты и предложите другое.409 too_many_bookings — превышен лимит активных записей на один номер телефона.400 consent_required — не передано согласие на обработку персональных данных.403 booking_disabled — онлайн-запись у компании временно отключена.429 rate_limited — превышена частота запросов (слоты — 120/мин, запись — 10 за 15 минут с IP).Полноценный доступ к лидам вашей CRM для собственных интеграций: чтение и создание по токену.
Подключите модуль «Публичный API и вебхуки» в Маркетплейсе, затем в Центре интеграций выпустите токен (карточка модуля → «API и вебхуки»). Токен показывается один раз — сохраните его сразу. Права задаются на выпуске: leads:read (чтение), leads:write (создание).
Авторизация — заголовком: Authorization: Bearer dcrm_…. Лимит: 120 запросов в минуту на токен. Отзыв токена в CRM закрывает доступ немедленно.
Список лидов (новые первыми): { total, limit, offset, leads: [{ id, name, phone, email, budget, paidAmount, funnelId, stageId, managerId, tags, source, createdAt }] }. Максимум 100 за запрос.
Один лид тем же составом полей. Чужой или несуществующий id — 404.
Создать лида. Тело: name (обязательно), опционально phone, email, city, budget, source, utmSource, tags, funnelId (по умолчанию — первая воронка). Лид попадает на первый этап без ответственного — распределение выполняют ваши автоматизации (событие «Лид создан»). Ответ 201 — созданный лид.
Мы сами уведомим ваш сервер о событиях сделок — без поллинга.
Подписки создаются там же («API и вебхуки»): укажите https-адрес приёмника и события — lead.created, lead.stage_changed, lead.assigned, lead.won, lead.lost, task.completed, lead.payment_received. При создании выдаётся секрет whsec_… (показывается один раз).
На событие приходит POST с JSON { event, companyId, occurredAt, lead: {…} } и заголовками X-DialogCRM-Event, X-DialogCRM-Delivery (id доставки — для дедупликации) и X-DialogCRM-Signature — HMAC-SHA256 тела запроса вашим секретом (hex). Проверяйте подпись и отвечайте 2xx в пределах 10 секунд.
Недоставленные события ретраятся через 1 мин / 5 мин / 30 мин / 2 часа. После 20 неудачных доставок подряд подписка автоматически выключается (админы получат уведомление) — включите её заново после починки приёмника; лог доставок виден в CRM.