Как отправить сообщение с формы на сайте в телеграмм бот?
Как с формы на сайте при нажатии на кнопку «Отправить» отправить данные и сообщение не меняя ничего на самой форме в артикле Но поменять в php коде ниже ! Сам код работает и отправляет сообщения только в виде ( Имя и Телефон ) И отправляет только при каждом обновлении страницы и ничего что было введено при отправлении! (Да я вводил токен и ид бота в TOKEN и chatID ) Как поправить этот php код чтобы он отправлял все данные что введены в форму на сайте при нажатии кнопки ?!
Вот весь код:
<article> <br /> <?php echo $Body; ?> <div style="margin-top: 15px; border-radius: 5px;" class="panel panel-default"> <div id=" " class="panel-body"> <form action="aj/mail_z" onsubmit="submit_send('contact_form');return false;" id="contact_form"> <div class="form-group col-lg-6"> <label>Ваше имя:</label> <span data-valgroup="contact_form" data-validel="contact_form-name" data-valtype="reqired" data-valerrormes="Укажите Ваше имя!" class="validator" >*</span> <input class="form-control input-sm" name="Fio" id="contact_form-name" type="text" value="<?php echo "{$user_login->data['Login']}"; ?>" /> </div> <div class="form-group col-lg-6"> <label>Ваш E-mail:</label> <span data-valgroup="contact_form" data-validel="contact_form-email" data-valtype="reqired" data-valerrormes="Укажите Ваш E-mail!" class="validator" >*</span> <input class="form-control input-sm" name="Email" type="text" id="contact_form-email" value="<?php echo "{$user_login->data['Email']}"; ?>" /> </div> <div class="clearfix"></div> <div class="form-group col-lg-12"> <label>Сообщение</label> <span data-valgroup="contact_form" data-validel="contact_form-mes" data-valtype="reqired" data-valerrormes="Сообщение не может быть пустым!" class="validator" >*</span> <textarea name="Body" class="form-control" id="contact_form-mes" rows="5"></textarea> </div> <div class="clearfix"></div> <input name="Tema" id="tema" type="hidden" value="Сообщение с формы обратной связи" /> <div style="text-align:center; "><button type="submit" class="btn btn-primary btn-lg" >Отправить</button></div> </form> </div> </div> </article> <?php $token = "TOKEN"; $chat_id = "chatID"; $name = trim($_POST["fullname"]); $phone = trim($_POST["phone"]); $success = 'Ваша заявка была успешно отправлена.'; $error = 'Произошла ошибка повторите пожалуйста.'; $telegram = "$subjectnИмя: $namenТелефон: $phone"; $data = [ 'chat_id' => $chat_id, 'text' => $telegram, 'parse_mode' => 'HTML' ]; $response = file_get_contents("https://api.telegram.org/bot$token/sendMessage?" . http_build_query($data) ); if ($response) { echo $success; } else { echo $error; } ?> |
<article> <br /> <?php echo $Body; ?> <div style="margin-top: 15px; border-radius: 5px;" class="panel panel-default"> <div id=" " class="panel-body"> <form action="aj/mail_z" onsubmit="submit_send('contact_form');return false;" id="contact_form"> <div class="form-group col-lg-6"> <label>Ваше имя:</label> <span data-valgroup="contact_form" data-validel="contact_form-name" data-valtype="reqired" data-valerrormes="Укажите Ваше имя!" class="validator" >*</span> <input class="form-control input-sm" name="Fio" id="contact_form-name" type="text" value="<?php echo "{$user_login->data['Login']}"; ?>" /> </div> <div class="form-group col-lg-6"> <label>Ваш E-mail:</label> <span data-valgroup="contact_form" data-validel="contact_form-email" data-valtype="reqired" data-valerrormes="Укажите Ваш E-mail!" class="validator" >*</span> <input class="form-control input-sm" name="Email" type="text" id="contact_form-email" value="<?php echo "{$user_login->data['Email']}"; ?>" /> </div> <div class="clearfix"></div> <div class="form-group col-lg-12"> <label>Сообщение</label> <span data-valgroup="contact_form" data-validel="contact_form-mes" data-valtype="reqired" data-valerrormes="Сообщение не может быть пустым!" class="validator" >*</span> <textarea name="Body" class="form-control" id="contact_form-mes" rows="5"></textarea> </div> <div class="clearfix"></div> <input name="Tema" id="tema" type="hidden" value="Сообщение с формы обратной связи" /> <div style="text-align:center; "><button type="submit" class="btn btn-primary btn-lg" >Отправить</button></div> </form> </div> </div> </article> <?php $token = "TOKEN"; $chat_id = "chatID"; $name = trim($_POST["fullname"]); $phone = trim($_POST["phone"]); $success = 'Ваша заявка была успешно отправлена.'; $error = 'Произошла ошибка повторите пожалуйста.'; $telegram = "$subjectnИмя: $namenТелефон: $phone"; $data = [ 'chat_id' => $chat_id, 'text' => $telegram, 'parse_mode' => 'HTML' ]; $response = file_get_contents("https://api.telegram.org/bot$token/sendMessage?" . http_build_query($data) ); if ($response) { echo $success; } else { echo $error; } ?>
Дополнительно:
Ответы:
У Вас есть две переменные, которые принимают значение переданные форму.
Переменная $name сохраняет в себе значение из поля в форме с названием "fullname", а переменная $phone сохраняет телефон.
Итого: нужно добавить еще одну переменную и присвоить им правильные значения, которые соответствуют Вашей форме, а затем сделать проверку, если значение всех полей не пустые, отправить сообщение в ТГ.
Рабочий код отправки:
<?php $txt = ""; $fio = $_POST['Fio']; // Присваиваем значение с поля "Укажите Ваше имя!" $email = $_POST['Email']; // Присваиваем значение с поля "Укажите Ваш E-mail!" $massage = $_POST['Body']; // Присваиваем значение с поля "Сообщение не может быть пустым!" $token = ""; // Прописываем токен $chat_id = ""; // Прописываем ID $arr = array( 'ФИО: ' => $fio, 'E-mail: ' => $email, 'Сообщение: ' => $massage ); foreach($arr as $key => $value) { $txt .= "<b>".$key."</b> ".$value."%0A"; }; // Проверяем, если все переменные не пустые, отправляем сообщение на сервер if($fio != "" and $email != "" and $massage != "") { $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r"); } else { header('Location: /'); // Прописываем куда перенаправлять, если неправильно заполнена форма. Можно прописать вместо header(); - echo 'Сообщение об ошибке'; } ?> |
<?php $txt = ""; $fio = $_POST['Fio']; // Присваиваем значение с поля "Укажите Ваше имя!" $email = $_POST['Email']; // Присваиваем значение с поля "Укажите Ваш E-mail!" $massage = $_POST['Body']; // Присваиваем значение с поля "Сообщение не может быть пустым!" $token = ""; // Прописываем токен $chat_id = ""; // Прописываем ID $arr = array( 'ФИО: ' => $fio, 'E-mail: ' => $email, 'Сообщение: ' => $massage ); foreach($arr as $key => $value) { $txt .= "<b>".$key."</b> ".$value."%0A"; }; // Проверяем, если все переменные не пустые, отправляем сообщение на сервер if($fio != "" and $email != "" and $massage != "") { $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r"); } else { header('Location: /'); // Прописываем куда перенаправлять, если неправильно заполнена форма. Можно прописать вместо header(); - echo 'Сообщение об ошибке'; } ?>
- Danil Privedentsev Сообщение не отправляется в тг бот, А когда было header(); невозможно было попасть на страницу с формой, А с echo постоянно отображается «Сообщение об ошибке» на странице! Что делать в такой ситуации?!)
- Thomek, да, я посмотрел твой код внимательней и его нужно доработать.
Начнем с того, что тебе придется внести маленькие правки внутри тега:
<article>Заменим эту строчку:
<form action="aj/mail_z" onsubmit="submit_send('contact_form');return false;" id="contact_form">
<form action="aj/mail_z" onsubmit="submit_send('contact_form');return false;" id="contact_form">
на эту:
<form action="" id="contact_form" method="POST">
В ней мы говорим, что принимаем данные с формы в этом же документе методом "POST".Дальше, мы немного перепишем мой код, добавив вот это условие:
if ($_SERVER['REQUEST_METHOD'] === 'POST') { }
if ($_SERVER['REQUEST_METHOD'] === 'POST') { }
В нем мы проверяем, что если данные не передавались (кнопка "Отправить" не нажимали), то код внутри не выполняем. Как только кнопка "Отправить" будет нажата, сразу сработает скрипт и отправит данные на сервер.
Теперь весь код на PHP:
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $txt = ""; $fio = $_POST['Fio']; // Присваиваем значение с поля "Укажите Ваше имя!" $email = $_POST['Email']; // Присваиваем значение с поля "Укажите Ваш E-mail!" $massage = $_POST['Body']; // Присваиваем значение с поля "Сообщение не может быть пустым!" $token = ""; // Прописываем токен $chat_id = ""; // Прописываем ID $arr = array( 'ФИО: ' => $fio, 'E-mail: ' => $email, 'Сообщение: ' => $massage ); foreach($arr as $key => $value) { $txt .= "<b>".$key."</b> ".$value."%0A"; }; // Проверяем, если все переменные не пустые, отправляем сообщение на сервер if($fio != "" and $email != "" and $massage != "") { $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r"); echo 'Сообщение отправлено!'; } else { header('Location: /'); // Прописываем куда перенаправлять, если неправильно заполнена форма. Можно прописать вместо header(); - echo 'Сообщение об ошибке'; } } ?>
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $txt = ""; $fio = $_POST['Fio']; // Присваиваем значение с поля "Укажите Ваше имя!" $email = $_POST['Email']; // Присваиваем значение с поля "Укажите Ваш E-mail!" $massage = $_POST['Body']; // Присваиваем значение с поля "Сообщение не может быть пустым!" $token = ""; // Прописываем токен $chat_id = ""; // Прописываем ID $arr = array( 'ФИО: ' => $fio, 'E-mail: ' => $email, 'Сообщение: ' => $massage ); foreach($arr as $key => $value) { $txt .= "<b>".$key."</b> ".$value."%0A"; }; // Проверяем, если все переменные не пустые, отправляем сообщение на сервер if($fio != "" and $email != "" and $massage != "") { $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r"); echo 'Сообщение отправлено!'; } else { header('Location: /'); // Прописываем куда перенаправлять, если неправильно заполнена форма. Можно прописать вместо header(); - echo 'Сообщение об ошибке'; } } ?>
- Danil Privedentsev, Теперь работает, сообщения приходят в телеграмм ! Но только теперь не отправляет в админку сайта без этого
action="aj/mail_z" onsubmit="submit_send('contact_form');return false;"
action="aj/mail_z" onsubmit="submit_send('contact_form');return false;"
А в месте с этим отправляет только в админку.
- Thomek, хорошо, а если так сделать, то что произойдет?
action="aj/mail_z" onsubmit="submit_send('contact_form');return false;" method="POST"
action="aj/mail_z" onsubmit="submit_send('contact_form');return false;" method="POST"
- Danil Privedentsev, Ничего не происходит, ничего никуда не отправляется и сообщение остаётся в форме!
После этого
$name = trim($_POST["fullname"]); $phone = trim($_POST["phone"]); |
$name = trim($_POST["fullname"]); $phone = trim($_POST["phone"]);
Написать это:
$message = trim($_POST["Body"]);
И подправить это:
$telegram = "$subjectnИмя: $namenТелефон: $phonenСообщение: $message"; |
$telegram = "$subjectnИмя: $namenТелефон: $phonenСообщение: $message";
Надеюсь это не продакшн код? Это же для себя, просто играетесь? Тут не хватает кучи проверок.
- SidVisceos На сайт!
- Thomek, на сайт для себя? Такое нельзя же выкладывать в общий доступ.
- SidVisceos, А кто запретит?!
- Thomek, разумеется никто
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для отправки сообщения с формы на сайте в телеграмм бот, вам понадобится использовать API телеграмма и язык программирования, который вы используете на своем сайте. В данном случае, предположим, что вы используете PHP.
Прежде всего, вам нужно создать бота в телеграмме и получить токен доступа к API. Для этого вам необходимо обратиться к @BotFather в телеграмме и следовать его инструкциям.
Затем вам нужно настроить обработку формы на вашем сайте. В HTML форме добавьте необходимые поля для ввода данных, а также скрытое поле для хранения токена вашего бота. Пример HTML формы:
<textarea name="message"></textarea><textarea name="message"></textarea>
Создайте файл send_message.php, который будет обрабатывать отправку сообщения. В этом файле вы можете использовать библиотеку cURL для отправки POST запроса к API телеграмма. Пример кода PHP: