Вебхуки (Webhooks)
Вебхуки позволяют обрабатывать заявки на отдельном хостинге. Например, можно на PHP написать интеграцию с CRM системой, которой у нас нет.
Создание вебхука
В личном кабинете выберите раздел «Интеграции и уведомления» и нажмите на «Подключить новую интеграцию».
В списке доступных сервисов выберите Webhook и введите следующие данные.
- Название для интеграции (Имя) - его вы придумываете сами;
- Url - адрес куда будут отправлены запросы
- Тип запроса - выберите тип запроса который вам нужен (POST, GET)
- Тип отправляемых данных (Content-Type) - доступна только для POST запроса, возможные значения x-www-form-urlencoded и raw
- Заголовки - можете написать HTTP заголовки которые вам нужны. Есть возможность написать несколько заголовков, для этого необходимо добавить новые поля ввода с помощью кнопки "Добавить поле".
Заметка
Каждое поле должно содержать только один заголовок
- Дальше с помощью Конструктора тела запроса вы можете создать структуру тела вашего запроса
В левой колонке необходимо ввести ключ, которому будет соответствовать значение поля из правой колонки (данные из формы/заявки)
Также можно создавать вложенные данные (массивы). Для этого нужно нажать стрелку указывающую вправо
В данном примере получилась следующая структура:
{
"name": [
{
"email":"Email"
}
],
"phone": "Телефон"
}
- Сохраняем интеграцию
Пример на PHP
Пример кода на PHP для приема и обработки данных с вебхука
<?php
if ($_SERVER["REQUEST_METHOD"] !== "POST") {
return;
}
try {
if (empty($_POST['email'])) {
throw new Exception('Не указан получатель');
}
if( empty($_POST['message'])) {
throw new Exception('Нет тела письма');
}
if(empty($_POST['subject'])){
throw new Exception('Нет темы письма');
}
$to_email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html;'. "\r\n";
$headers .= 'From: example@company.com';
if (mail($to_email, $subject, $message, $headers)) {
echo "Письмо отправлено";
} else {
throw new Exception('Ошибка при отправке письма');
}
} catch (Exception $exception) {
echo $exception->getMessage();
}