Получите API-ключ CloseFlow
Откройте /dashboard/settings → API-ключи → «Создать ключ». Скопируйте значение (cf_live_…) - показывается один раз.
Лиды и звонки из Roistat - коллтрекинг и аналитика
Нативный адаптер Roistat принимает заявки, звонки и события из Roistat через выделенный endpoint. UTM-метки, roistat_visit и данные о звонке сохраняются в карточке лида автоматически. Опционально - outbound webhook с HMAC-подписью для получения событий обратно в Roistat.
Webhook endpoint
https://closeflow.ru/api/v1/webhooks/leadsАутентификация: заголовок X-Api-Key или query-параметр ?api_key=. Получить ключ - в Настройках.
Откройте /dashboard/settings → API-ключи → «Создать ключ». Скопируйте значение (cf_live_…) - показывается один раз.
В кабинете Roistat → Настройки → HTTP-интеграция (или используйте Roistat scripts для отправки при lead/call-событиях). Укажите endpoint и заголовок X-Api-Key. Используйте X-Idempotency-Key для защиты от дублей при ретраях.
POST https://your-app.com/api/v1/webhooks/roistat/leads
X-Api-Key: cf_live_...
X-Idempotency-Key: roistat-lead-123
Content-Type: application/json
{
"externalId": "roistat-lead-123",
"roistatVisit": "123456",
"name": "Иван",
"phone": "+79990000000",
"email": "ivan@example.com",
"callStatus": "missed",
"callDuration": 0,
"utm_source": "yandex",
"utm_medium": "cpc",
"utm_campaign": "brand_search",
"utm_content": "ad_1",
"utm_term": "купить услугу",
"landingPage": "https://client.ru/service",
"managerEmail": "manager@company.ru",
"metadata": { "roistatSource": "calltracking" }
}В /dashboard/integrations/roistat укажите Callback URL - CloseFlow будет слать туда HMAC-подписанные события LEAD_CREATED / LEAD_STATUS_CHANGED / REPLY_RECEIVED / SLA_BREACHED / HANDED_OFF.
Используйте настройки по умолчанию или задайте кастомные JSON dot-path пути в /dashboard/integrations/roistat → «Соответствие полей», если ваш payload имеет вложенную структуру.
CloseFlow подписывает каждый исходящий webhook заголовком X-CloseFlow-Signature: sha256=<hex>. База подписи: timestamp + '.' + raw_body. Пример верификации на Python:
import hashlib, hmac
def verify(body: bytes, timestamp: str, signature: str, secret: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(), f"{timestamp}.".encode() + body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)Лид приходит без roistat_visit
Убедитесь, что Roistat-cookie передаётся в payload как поле roistatVisit.
Пропущенный звонок не помечен срочным
В /dashboard/integrations/roistat включите опцию «Пропущенные звонки = срочные лиды».
Дубликат лида при ретрае
Убедитесь, что Roistat шлёт стабильный externalId, или поставьте X-Idempotency-Key.
Другие интеграции