Как словить данные с вебхука из Elementor Pro Form?
В Elementor Pro Form, Webhook URL указываю ссылку - http://scripts/webhookformtg.php?name=[field id="name"]&tel=[field id="tel"]&vopros=[field id="vopros"]
Пробовал ниже указанный код, но он не работает.
$deal_tel = $_GET['tel']; $deal_name = $_GET['name']; $deal_vopros = $_GET['vopros']; |
$deal_tel = $_GET['tel']; $deal_name = $_GET['name']; $deal_vopros = $_GET['vopros'];
Кажется я что то я не понимаю, буду рад любой подсказке куда рыть.
Дополнительно:
Решение:
Webhook = http://scripts/webhookformtg.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') { $encodedData = file_get_contents('php://input'); } |
if ($_SERVER['REQUEST_METHOD'] === 'POST') { $encodedData = file_get_contents('php://input'); }
А если кому интересно отправка лидов из формы Elementor Pro Form в телеграм:
<?php // Юзал библиотеку "irazasyed/telegram-bot-sdk": "dev-master" include('vendor/autoload.php'); use TelegramBotApi; // Токен бота $telegram = new Api('5063232304:AAFtmlcBuRQpYUtzd3biba5ZUwzRy0ZoYws'); // id чата, getupdates в помощь вам $chat_id = -955466225; $result = $telegram->getWebhookUpdates(); $result = json_decode($result, true); $callback_data = $result['callback_query']['data']; $callback_id = $result['callback_query']['message']['chat']['id']; $callback_message_text = $result['callback_query']['message']['text']; $callback_message_id = $result['callback_query']['message']['message_id']; $callback_from = $result['callback_query']['from']['first_name']; $text_message = $result['message']['text']; // Перехват инфы из webhook-a if ($_SERVER['REQUEST_METHOD'] === 'POST') { $encodedData = file_get_contents('php://input'); } // Функция расшифровки данных полученных из webhook function decodeData($encodedData) { $decodedData = []; parse_str(urldecode($encodedData), $decodedData); return $decodedData; } // Расшифровка данных полученных из webhook $decodedData = decodeData($encodedData); //Пустой массив для хранения данных $dataArray = []; //Перебор данных в массив с ключами foreach ($decodedData as $key => $value) { $dataArray[$key] = $value; } // Тект/заголовки $form = "<strong>Форма:</strong> "; $comment = "<strong>Комментарий:</strong> "; $name = "n<strong>Имя:</strong> "; $number = "<strong>Номер телефона:</strong> "; // Массив с данными из webhook $arr = array( $form => "Eagleway", $comment => $dataArray["Дополнительные_вопросы"], $name => $dataArray["Ваше_имя"], $number => $dataArray["Ваш_номер_телефона:"]. "n", ); // Сбор текста foreach ($arr as $key => $value) { if ($key == " ") { $txt .= " " . $key . " <em>" . $value . "</em>" . "n"; } else { $txt .= "" . $key . " <em>" . $value . "</em>" . "n"; } }; // Отправка сообщении $telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => $txt, 'parse_mode' => 'html']); |
<?php // Юзал библиотеку "irazasyed/telegram-bot-sdk": "dev-master" include('vendor/autoload.php'); use TelegramBotApi; // Токен бота $telegram = new Api('5063232304:AAFtmlcBuRQpYUtzd3biba5ZUwzRy0ZoYws'); // id чата, getupdates в помощь вам $chat_id = -955466225; $result = $telegram->getWebhookUpdates(); $result = json_decode($result, true); $callback_data = $result['callback_query']['data']; $callback_id = $result['callback_query']['message']['chat']['id']; $callback_message_text = $result['callback_query']['message']['text']; $callback_message_id = $result['callback_query']['message']['message_id']; $callback_from = $result['callback_query']['from']['first_name']; $text_message = $result['message']['text']; // Перехват инфы из webhook-a if ($_SERVER['REQUEST_METHOD'] === 'POST') { $encodedData = file_get_contents('php://input'); } // Функция расшифровки данных полученных из webhook function decodeData($encodedData) { $decodedData = []; parse_str(urldecode($encodedData), $decodedData); return $decodedData; } // Расшифровка данных полученных из webhook $decodedData = decodeData($encodedData); //Пустой массив для хранения данных $dataArray = []; //Перебор данных в массив с ключами foreach ($decodedData as $key => $value) { $dataArray[$key] = $value; } // Тект/заголовки $form = "<strong>Форма:</strong> "; $comment = "<strong>Комментарий:</strong> "; $name = "n<strong>Имя:</strong> "; $number = "<strong>Номер телефона:</strong> "; // Массив с данными из webhook $arr = array( $form => "Eagleway", $comment => $dataArray["Дополнительные_вопросы"], $name => $dataArray["Ваше_имя"], $number => $dataArray["Ваш_номер_телефона:"]. "n", ); // Сбор текста foreach ($arr as $key => $value) { if ($key == " ") { $txt .= " " . $key . " <em>" . $value . "</em>" . "n"; } else { $txt .= "" . $key . " <em>" . $value . "</em>" . "n"; } }; // Отправка сообщении $telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => $txt, 'parse_mode' => 'html']);
Ответы:
Привет, я бы попробовал такой вариант
if ($_SERVER['REQUEST_METHOD'] === 'GET') { $deal_tel = isset($_REQUEST['tel']) ? $_REQUEST['tel'] : ''; $deal_name = isset($_REQUEST['name']) ? $_REQUEST['name'] : ''; $deal_vopros = isset($_REQUEST['vopros']) ? $_REQUEST['vopros'] : ''; } |
if ($_SERVER['REQUEST_METHOD'] === 'GET') { $deal_tel = isset($_REQUEST['tel']) ? $_REQUEST['tel'] : ''; $deal_name = isset($_REQUEST['name']) ? $_REQUEST['name'] : ''; $deal_vopros = isset($_REQUEST['vopros']) ? $_REQUEST['vopros'] : ''; }
- Пробовал, не работает.
Ниже мой код
<?php include('vendor/autoload.php'); use TelegramBotApi; $telegram = new Api('5063232304:****'); $chat_id = -***; $result = $telegram->getWebhookUpdates(); $result = json_decode($result, True); $callback_data = $result['callback_query']['data']; $callback_id = $result['callback_query']['message']['chat']['id']; $callback_message_text = $result['callback_query']['message']['text']; $callback_message_id = $result['callback_query']['message']['message_id']; $callback_from = $result['callback_query']['from']['first_name']; $text_message = $result['message']['text']; // $deal_tel = $_GET['tel']; // $deal_name = $_GET['name']; // $deal_vopros = $_GET['vopros']; if ($_SERVER['REQUEST_METHOD'] === 'GET') { $deal_name = isset($_GET['name']) ? $_GET['name'] : ''; $deal_tel = isset($_GET['tel']) ? $_GET['tel'] : ''; $deal_vopros = isset($_GET['vopros']) ? $_GET['vopros'] : ''; } else { $deal_vopros = "Данные могут быть отправлены только методом GET."; } $idRequest = "<strong>Форма:</strong> "; $name = "n<strong>Имя:</strong> "; $telNumber = "<strong>Номер телефона:</strong> "; $comment = "<strong>Комментарий:</strong> "; $arr = array( $idRequest => "Тест", $comment => $deal_vopros, $name => $deal_name, $telNumber =>$deal_tel. "n", ); foreach ($arr as $key => $value) { if ($key == " ") { $txt .= " " . $key . " <em>" . $value . "</em>" . "n"; } else { $txt .= "" . $key . " <em>" . $value . "</em>" . "n"; } }; $telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => $txt, 'parse_mode' => 'html']); $date = date('Y-m-d H:i:s');
<?php include('vendor/autoload.php'); use TelegramBotApi; $telegram = new Api('5063232304:****'); $chat_id = -***; $result = $telegram->getWebhookUpdates(); $result = json_decode($result, True); $callback_data = $result['callback_query']['data']; $callback_id = $result['callback_query']['message']['chat']['id']; $callback_message_text = $result['callback_query']['message']['text']; $callback_message_id = $result['callback_query']['message']['message_id']; $callback_from = $result['callback_query']['from']['first_name']; $text_message = $result['message']['text']; // $deal_tel = $_GET['tel']; // $deal_name = $_GET['name']; // $deal_vopros = $_GET['vopros']; if ($_SERVER['REQUEST_METHOD'] === 'GET') { $deal_name = isset($_GET['name']) ? $_GET['name'] : ''; $deal_tel = isset($_GET['tel']) ? $_GET['tel'] : ''; $deal_vopros = isset($_GET['vopros']) ? $_GET['vopros'] : ''; } else { $deal_vopros = "Данные могут быть отправлены только методом GET."; } $idRequest = "<strong>Форма:</strong> "; $name = "n<strong>Имя:</strong> "; $telNumber = "<strong>Номер телефона:</strong> "; $comment = "<strong>Комментарий:</strong> "; $arr = array( $idRequest => "Тест", $comment => $deal_vopros, $name => $deal_name, $telNumber =>$deal_tel. "n", ); foreach ($arr as $key => $value) { if ($key == " ") { $txt .= " " . $key . " <em>" . $value . "</em>" . "n"; } else { $txt .= "" . $key . " <em>" . $value . "</em>" . "n"; } }; $telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => $txt, 'parse_mode' => 'html']); $date = date('Y-m-d H:i:s');
IDшник полей:
Ссылка вебхука:
http://scripts.***/test/webhookformtg.php?name=[field id="name"]&tel=[field id="tel"]&vopros=[field id="vopros"] - А со стороны телеграма не может быть ошибки?
- Когда пробую метод:
if ($_SERVER['REQUEST_METHOD'] === 'GET') { $deal_name = isset($_GET['name']) ? $_GET['name'] : ''; $deal_tel = isset($_GET['tel']) ? $_GET['tel'] : ''; $deal_vopros = isset($_GET['vopros']) ? $_GET['vopros'] : ''; } else { $deal_vopros = "Данные могут быть отправлены только методом POST."; }
if ($_SERVER['REQUEST_METHOD'] === 'GET') { $deal_name = isset($_GET['name']) ? $_GET['name'] : ''; $deal_tel = isset($_GET['tel']) ? $_GET['tel'] : ''; $deal_vopros = isset($_GET['vopros']) ? $_GET['vopros'] : ''; } else { $deal_vopros = "Данные могут быть отправлены только методом POST."; }
Получаю такой ответ:
А когда пробую метод:
if ($_SERVER['REQUEST_METHOD'] === 'POST') { $deal_name = isset($_GET['name']) ? $_GET['name'] : ''; $deal_tel = isset($_GET['tel']) ? $_GET['tel'] : ''; $deal_vopros = isset($_GET['vopros']) ? $_GET['vopros'] : ''; } else { $deal_vopros = "Данные могут быть отправлены только методом POST."; }
if ($_SERVER['REQUEST_METHOD'] === 'POST') { $deal_name = isset($_GET['name']) ? $_GET['name'] : ''; $deal_tel = isset($_GET['tel']) ? $_GET['tel'] : ''; $deal_vopros = isset($_GET['vopros']) ? $_GET['vopros'] : ''; } else { $deal_vopros = "Данные могут быть отправлены только методом POST."; }
Получаю такой ответ:
- Smirator, а зачем?
- Ага. А если так. Заметил true:
$result = json_decode($result, true); // Исправлено "True" на "true"
$result = json_decode($result, true); // Исправлено "True" на "true"
И давай попробуем:
if ($_SERVER['REQUEST_METHOD'] === 'POST') { $deal_name = isset($_POST['name']) ? $_POST['name'] : ''; $deal_tel = isset($_POST['tel']) ? $_POST['tel'] : ''; $deal_vopros = isset($_POST['vopros']) ? $_POST['vopros'] : ''; } else { $deal_vopros = "Данные могут быть отправлены только методом POST."; }
if ($_SERVER['REQUEST_METHOD'] === 'POST') { $deal_name = isset($_POST['name']) ? $_POST['name'] : ''; $deal_tel = isset($_POST['tel']) ? $_POST['tel'] : ''; $deal_vopros = isset($_POST['vopros']) ? $_POST['vopros'] : ''; } else { $deal_vopros = "Данные могут быть отправлены только методом POST."; }
- Я бы для начала в логах посмотрел, какой реально запрос к вебхуку формируется.
- Smirator,
Результат:
Изменения:
- YBB, Можете подсказать как посмотреть?
- parzif4l, если я правильно понял, этот скрипт живет на вашем сайте, а значит, и логи где-то рядом. Найти лог доступа сайта (файл называться может по-разному, зависит от настроек сервера) и посмотреть строки, в которых есть 'webhookformtg.php'
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос








В webhook Elementor Pro Form данные обычно приходят не через
$_GET, а POST-запросом. Поэтому ссылка видаwebhookformtg.php?name=[field id="name"]тут не лучший путь: Elementor сам отправляет поля формы в тело запроса. На стороне PHP нужно читать входящий поток, разобрать его и уже после этого отправлять сообщение в Telegram.Минимальный обработчик можно сделать так:
$raw = file_get_contents('php://input'); $data = []; if ($raw) { parse_str($raw, $data); } $name = trim($data['form_fields']['name'] ?? $data['name'] ?? ''); $tel = trim($data['form_fields']['tel'] ?? $data['tel'] ?? ''); $question = trim($data['form_fields']['vopros'] ?? $data['vopros'] ?? ''); if ($name === '' && $tel === '' && $question === '') { http_response_code(400); exit('empty request'); }
В Elementor в поле Webhook URL указывайте чистый адрес обработчика без подстановки полей:
https://site.ru/webhookformtg.php. После этого сделайте тестовую отправку и временно запишите$rawв лог, чтобы увидеть реальную структуру данных:file_put_contents(__DIR__ . '/webhook.log', $raw . PHP_EOL, FILE_APPEND);
Для Telegram используйте
wp_remote_post(), если обработчик находится внутри WordPress, или обычныйcurl, если это отдельный файл. Не храните токен бота в публичном JavaScript и не показывайте его в HTML. Также добавьте простую проверку секретного ключа в URL или заголовке, иначе любой сможет дёргать ваш webhook и спамить в Telegram.