Настройка интеграции с квизом через вебхук

Время чтения: 3 мин. 51 сек.31.10.2019343

Вебхук — это способ передать заявку из квиза туда, где нет готовой интеграции: в самописную CRM, внутреннюю систему учёта или сервис, которого пока нет в каталоге Matomba. По сути, вебхук — это мост между вашим квизом и любым внешним адресом, который умеет принимать JSON.

Вы можете настроить получение заявок в самописную CRM или отсутствующий в списке интеграций сервис используя вебхуки. Укажите до 5 ссылок, по которым будут передаваться параметры сделки и контакта. Данные передаются в формате json в закодированном через json_encode виде. Массив состоит из следующих параметров:

  • service - название сервиса с которого пришла заявка;
  • quiz - идентификатор квиза;
  • action - тип действия: add - добавление, update - обновление;
  • visit - идентификатор заявки в системе Matomba;
  • raw - идентификаторы вопросов и ответов: q - содержит название вопроса, а - массив ответов;
  • answers - ответы и вопросы в текстовом формате: q - содержит название вопроса, а - массив ответов;
  • results - массив с выбранными результатами. Каждый элемент массива содержит следующие параметры: id(идентификатор товара), name(название товара), cost(стоимость), count(количество), currency (валюта) и discount(размер скидки);
  • contacts - name (имя), phone(Телефон), mail,more - дополнительное поле, social - массив содержащий список социальных сетей контакта (vkontakte, telegram, facebook, messenger, whatsapp, skype, viber);
  • cookies - roistat_visit, calltouch ID, _ga - идентификатор визита в GA, _ym_uid - идентификатор визита в яндекс метрике;
  • extra - содержит referer(страница перехода к квизу), open(страница открытия квиза);
  • agree - список отмеченных клиентом согласий в форме обратной связи. Работает только с кастомными политиками;
  • массив utm с параметрами utm_source, utm_medium, utm_campaign, utm_term, utm_content;
  • created - дата создания сделки в формате unix timestamp.

Скрипт хука должен обязательно отдавать положительный статус при приёме заявок (20* - 200, 204 и т.п.)

Зачем нужен вебхук, если есть готовые интеграции

В каталоге Matomba больше 20 nocode-интеграций, и большинству пользователей их хватает. Вебхук нужен в трёх случаях.

  • У вас своя система. Готовая интеграция не подойдёт, а вручную разбирать JSON — единственный способ передать данные.
  • Нужна промежуточная логика. Например, сначала проверить заявку на дубликат, потом распределить по отделам, а затем записать в CRM.
  • Нужно получать копию заявок на собственном сервере — для аналитики, аудита или как страховку от потери данных.

Если вы просто хотите передавать заявки в популярную CRM, начните с готовой интеграции — это быстрее. Вебхук подключайте, когда готовой связки нет или она не покрывает задачу.

Как устроена передача данных

Когда посетитель отправляет форму, Matomba формирует JSON-объект со всеми данными заявки и отправляет его методом POST на каждый из указанных вами адресов. Серверная часть Matomba делает это асинхронно, поэтому форма на стороне пользователя отвечает мгновенно и не ждёт, пока ваш сервер примет данные.

Если ваш скрипт вернул статус из группы 20*, Matomba считает передачу успешной и больше не повторяет её. Если вернулся 4xx или 5xx, либо сервер не ответил вовремя — попытка считается неудачной. Логика повторных попыток может настраиваться на стороне интеграции, поэтому не стоит рассчитывать, что заявка придёт «вторым заходом».

Пример запроса на вебхук

{
    "service": "Квиз номер один",
    "app": 15123123,
    "visit": 1222,
    "action": "add",
    "raw": [
        {
            "q": 1234151212313,
            "a": [
                7237218641244,
                12412948124121
            ]
        }
    ],
    "answers": [
        {
            "q": "Вопрос номер один",
            "a": [
                "Ответ номер один",
                "Ответ номер 2"
            ]
        }
    ],
    "results": [
        {
            "id": 123123123123,
            "name": "товар номер один",
            "cost": 200000,
            "count": 1,
            "discount": 1000,
            "currency": "RUB"
        }
    ],
    "contacts": {
        "phone": 79241231212,
        "mail": "test@mail.ru",
        "name": "Николай",
        "social": {
            "vkontakte": "id124124124"
        }
    },
    "cookies": {
        "roistat_visit": 12312441421412,
        "_ga": "galigg.231232112_21323"
    },
    "extras": {
        "referer": "https://yandes.com",
        "open": "https://mypage.ru/11",
        "utm": {
            "utm_source": "cpc",
            "utm_campaign": "template1"
        }
    },
    "agree": [
        {
            "id": 11231231221,
            "name": "Мое согласие",
            "about": "Согласие на отправку рекламных акций"
        }
    ],
    "created": 18928288892
}

Код для получения данных

$data = json_decode(file_get_contents('php://input'), true);
$answers = $data['answers'];
$phone = $data['contacts']['phone'];
$email = $data['contacts']['email'];
$name = $data['contacts']['name'];
$social = $data['contacts']['social'];
$createdDate = $data['created'];
$utm = $data['extra']['utm'];
$agree = $data['agree'];
$rawAnswers = $data['raw'];

// Ваш код

http_response_code(200);
exit;

Как отладить передачу

Прежде чем писать логику обработки, стоит убедиться, что данные вообще доходят до вашего скрипта. Простой способ — записать входящий JSON в файл.

$raw = file_get_contents('php://input');
file_put_contents(__DIR__ . '/webhook.log', $raw . PHP_EOL, FILE_APPEND);

http_response_code(200);
exit;

Отправьте тестовую заявку из квиза и посмотрите файл `webhook.log`. Если он пустой — запросы не доходят: проверьте URL, доступность сервера и настройки файрвола. Если JSON есть — значит данные приходят, и можно переходить к логике.

Проверка на своей стороне

Перед тем как сохранять данные, полезно убедиться, что пришёл валидный JSON.

$raw = file_get_contents('php://input');
$data = json_decode($raw, true);

if (json_last_error() !== JSON_ERROR_NONE) {
    http_response_code(400);
    exit;
}

// Ваш код

http_response_code(200);
exit;

Если вернуть код 400, Matomba поймёт, что заявка не принята. Это лучше, чем молча вернуть 200 и потерять данные.

Частые ошибки при настройке вебхука

  • Скрипт возвращает 200 молча, но данные не сохраняет. Matomba считает заявку переданной и повторно её не отправит. Всегда логируйте или сохраняйте входящие данные.
  • Сервер недоступен по HTTPS или отвечает слишком долго. Проверьте сертификат домена и время ответа — обычно ожидание ограничено несколькими секундами.
  • В ответе есть HTML или echo перед заголовком. Даже один пробел перед `
  • Забыли про кодировку. Если в данных есть русские буквы, сохраняйте их в UTF-8, иначе получите искажённые символы.
  • URL вебхука открыт для всех. Кто угодно может отправить POST на ваш скрипт. Добавьте проверку токена или подписи, чтобы принимать только заявки от Matomba.

Безопасность

Вебхук — это открытый endpoint на вашем сервере, и его безопасность — ваша зона ответственности. Минимальные меры: использовать HTTPS, не выводить данные в ответ, ограничить доступ по IP или токену, проверять размер входного запроса и логировать входящие данные.

Не доверяйте слепо данным из вебхука. Если значение используется в SQL, экранируйте его или используйте подготовленные запросы. Если данные идут в HTML — применяйте htmlspecialchars. Если передаёте их дальше по API — валидируйте.

Коротко: что делать

  • Укажите до 5 URL вебхука в настройках интеграции.
  • Принимайте POST и декодируйте JSON через file_get_contents('php://input').
  • Сразу возвращайте 200 при успешной обработке — иначе Matomba будет считать передачу неудачной.
  • Логируйте входящие данные на первом этапе, чтобы убедиться, что они вообще доходят.
  • Добавьте проверку токена или подписи, чтобы вебхук не мог использовать кто угодно.
  • Валидируйте входящий JSON и экранируйте данные перед записью в БД или рендером в HTML.
Лого https://matomba.ru

Выберите один из 45 сценариев для вашего бизнеса, настройте дизайн и начните собирать заявки

Создать квиз бесплатно

Часто задаваемые вопросы

+Что такое вебхук в Matomba?

Вебхук — это способ передачи заявок из квиза в самописную CRM или сервис, которого нет в каталоге интеграций. Вы указываете до 5 ссылок, по которым Matomba отправляет параметры сделки и контакта в формате JSON.

+Сколько ссылок вебхука можно указать?

До 5 ссылок. По каждой из них будут передаваться одни и те же данные заявки в формате JSON методом POST.

+Чем вебхук отличается от готовой интеграции?

Готовая интеграция — это настроенная связка из каталога, она подключается в пару кликов. Вебхук — универсальный способ передать данные на любой ваш сервер, где вы сами пишете обработку. Вебхук нужен для самописных систем, промежуточной логики и копий заявок на своём сервере.

+Как работает передача данных через вебхук?

После отправки формы Matomba формирует JSON и отправляет его методом POST на указанные адреса асинхронно. Пользователь не ждёт, пока данные дойдут до вашего сервера. Если скрипт вернул 20*, передача считается успешной.

+Какой статус должен возвращать скрипт вебхука?

Любой из группы 20* — 200, 201, 204 и другие. Только в этом случае Matomba считает передачу успешной. Если вернётся 4xx или 5xx, заявка будет считаться непереданной.

+Какие поля передаются в заявке?

service, quiz, action, visit, raw, answers, results, contacts, cookies, extra, agree, массив utm и created. Подробное описание каждого поля — в списке параметров выше.

+Что содержит поле raw и чем оно отличается от answers?

raw содержит идентификаторы вопросов и ответов, а answers — те же данные в текстовом формате: q — название вопроса, a — массив ответов.

+Что приходит в поле results?

Массив выбранных результатов. Каждый элемент содержит id, name, cost, count, currency и discount — идентификатор, название, стоимость, количество, валюту и размер скидки.

+Что содержит поле contacts?

name (имя), phone (телефон), mail (email), more (дополнительное поле) и social — массив с соцсетями контакта: vkontakte, telegram, facebook, messenger, whatsapp, skype, viber.

+Что передаётся в cookies?

roistat_visit, calltouch ID, _ga (идентификатор визита в Google Analytics) и _ym_uid (идентификатор визита в Яндекс Метрике).

+Как получить данные вебхука в PHP?

Через file_get_contents('php://input') и json_decode. Пример готового кода — в блоке «Код для получения данных» выше.

+Как отладить передачу данных?

На первом этапе запишите входящий JSON в файл через file_put_contents и отправьте тестовую заявку. Если файл пустой — запросы не доходят, проверьте URL, HTTPS и файрвол. Если JSON есть — данные приходят, и можно писать логику.

+Какие ошибки чаще всего встречаются при настройке вебхука?

Скрипт возвращает 200, но данные не сохраняет; сервер недоступен по HTTPS или отвечает долго; HTML или пробел перед

+Как защитить вебхук?

Использовать HTTPS, не выводить данные в ответ, ограничить доступ по токену или подписи, проверять размер запроса, логировать входящие данные и экранировать всё, что попадает в SQL или HTML.

Еще остались вопросы?

Напишите нам в чат или социальные сети!

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Окей