Replyo

Гайд / Интеграции

Webhook-интеграция с вашей CRM

Replyo отправляет горячего лида в вашу систему сразу после того, как бот классифицировал диалог как «готов купить». Один HTTPS-endpoint, JSON-payload, HMAC-подпись — без плагинов, без ключей третьих сторон.

Совместимость

  • Bitrix24 — входящий REST-хук или собственный обработчик.
  • amoCRM — endpoint на вашем бэкенде, создающий сделку через amoCRM API с контактом.
  • n8n / Zapier / Make — Webhook trigger принимает payload напрямую.
  • 1С-Битрикс / собственный бэкенд — любой PHP/Node/Python route, проверяющий HMAC.

Как включить

  1. Кабинет → бот → «Поведение» → блок «Hot-Lead Alerts».
  2. Вставьте HTTPS-URL вашего обработчика и секрет (минимум 24 символа — генератор есть в интерфейсе).
  3. Нажмите «Отправить тест» — в CRM придёт payload с полем test: true.
  4. Когда живой бот поставит тикет «hot», мы вызовем этот endpoint с боевым payload.

Формат payload

Content-Type: application/json. Заголовок X-Replyo-Signature: sha256=<hex> — HMAC-SHA256 от сырого тела, секрет из настроек бота.

{
  "event": "lead.captured",
  "emitted_at": "2026-04-20T15:40:12.881Z",
  "lead_source": "replyo_widget",
  "tier": "hot",
  "score": 78,
  "signals": [
    { "name": "budget_mentioned", "weight": 18 },
    { "name": "timeline_soon",    "weight": 15 },
    { "name": "contact_provided", "weight": 25 }
  ],
  "bot":   { "id": "bot_7g2...", "name": "Агентство Норд" },
  "conversation": {
    "id": "c_6c9...",
    "transcript_url": "https://replyo.su/app/live/c_6c9...",
    "last_messages": [
      { "role": "user",      "content": "Ищу 2-ку до 12 млн, переезд в июле." },
      { "role": "assistant", "content": "Передам контакт агенту — наберёт в течение 15 минут." }
    ]
  },
  "visitor": {
    "id": "v_3a1...",
    "email": "client@example.ru",
    "phone": "+7 900 000 00 00",
    "display_name": "Алексей"
  },
  "metadata": {}
}

Поля tier, score, signals — приоритизация: hot эскалируется агенту, warm идёт в nurture-очередь, cold обычно игнорируется.

Верификация подписи — Node.js

// Node.js (Express) — verify HMAC before trusting the payload.
import express from "express";
import { createHmac, timingSafeEqual } from "node:crypto";

const app = express();
const SECRET = process.env.REPLYO_WEBHOOK_SECRET;

app.post("/hooks/replyo",
  express.raw({ type: "application/json" }), // raw body required for HMAC
  (req, res) => {
    const sig = (req.get("X-Replyo-Signature") ?? "").replace(/^sha256=/, "");
    const expected = createHmac("sha256", SECRET).update(req.body).digest("hex");
    if (sig.length !== expected.length ||
        !timingSafeEqual(Buffer.from(sig, "hex"), Buffer.from(expected, "hex"))) {
      return res.status(401).end();
    }
    const event = JSON.parse(req.body.toString("utf8"));
    // event.tier === "hot" | "warm" | "cold"
    // → forward to CRM, Slack, etc.
    res.status(200).end();
  }
);

Верификация подписи — PHP

// PHP — same check, for Bitrix24 webhooks or 1C integrations.
$secret  = getenv('REPLYO_WEBHOOK_SECRET');
$raw     = file_get_contents('php://input');
$got     = $_SERVER['HTTP_X_REPLYO_SIGNATURE'] ?? '';
$got     = preg_replace('/^sha256=/', '', $got);
$expect  = hash_hmac('sha256', $raw, $secret);
if (!hash_equals($expect, $got)) { http_response_code(401); exit; }

$event = json_decode($raw, true);
// forward to Bitrix24 REST, send to Slack, etc.

Retry-политика

  • Таймаут — 3 секунды. Дольше не ждём, чтобы не блокировать чат.
  • На 5xx или сетевую ошибку — одна автоповторная попытка через 500 мс.
  • После двух неудач событие логируется; чат продолжает работу без сбоя.
  • Если endpoint даёт 4xx из-за неверной подписи — это баг в вашем коде, retry не поможет; мы не повторяем.

Нужна помощь с интеграцией?

На Бизнес+ подключим ваш CRM сами — напишите hello@replyo.su. На остальных тарифах — смотрите код выше и пингуйте, если застряли.