Как словить данные с вебхука из Elementor Pro Form?

Ссылка скопирована
1 ответ

В 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шник полей:

    Как словить данные с вебхука из Elementor Pro Form?

    Как словить данные с вебхука из Elementor Pro Form?

    Как словить данные с вебхука из Elementor Pro Form?

    Ссылка вебхука:
    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."; }

    Получаю такой ответ:

    Как словить данные с вебхука из Elementor Pro Form?

    А когда пробую метод:

    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."; }

    Получаю такой ответ:

    Как словить данные с вебхука из Elementor Pro Form?

  • 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,
    Результат:

    Как словить данные с вебхука из Elementor Pro Form?

    Изменения:

    Как словить данные с вебхука из Elementor Pro Form?

    Как словить данные с вебхука из Elementor Pro Form?

  • YBB, Можете подсказать как посмотреть?
  • parzif4l, если я правильно понял, этот скрипт живет на вашем сайте, а значит, и логи где-то рядом. Найти лог доступа сайта (файл называться может по-разному, зависит от настроек сервера) и посмотреть строки, в которых есть 'webhookformtg.php'
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Редакция Security Ответ

В 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');
}

$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);

file_put_contents(__DIR__ . '/webhook.log', $raw . PHP_EOL, FILE_APPEND);

Для Telegram используйте wp_remote_post(), если обработчик находится внутри WordPress, или обычный curl, если это отдельный файл. Не храните токен бота в публичном JavaScript и не показывайте его в HTML. Также добавьте простую проверку секретного ключа в URL или заголовке, иначе любой сможет дёргать ваш webhook и спамить в Telegram.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно