Всем - привет. Давно зрела идея разобраться с отправкой данных из формы на сайте в мессенджер Telegram, но руки не доходили, а моментально получать заявки прямо в телефон, ой как хотелось!
И вот, наконец-то посидел и разобрался. Конечно постичь все тонкости API - не удалось, но по кусочкам насобирал информацию и удалось отправить данные из контактной формы в чат Telegram.
Это актуализированная статья, в которой решены такие проблемы, как отправка фото и пропадающий символ «+», который не приходил в сообщение и из-за этого номер телефона был некликабельным. Появилась возможность не просто отправлять 1 фото, а сразу несколько файлов, в том числе PDF, docx и любых других.
Важно: для отправки файла из формы в Телеграм на вашем сервере должен быть включен cURL. Обратитесь к техподдержке вашего хостинга, они подскажут что делать и как включить. У многих он включен по умолчанию. Например, на моем хостинге Beget - так.
Как отправить данные формы на сайте в Telegram
Итак, давайте приступим. Первое что нам нужно - это создать своего бота. Делается это достаточно просто. В поиске наберите @botfather, откройте родительского бота и нажмите "Start":
Далее:
- Пишем команду /newbot, для создания нового бота.
- Придумываем имя бота.
- Придумываем ник бота.
Если все прошло успешно, то увидите поздравления и токен вашего бота, в моем случае это:
341996777:AAHbnuvQib-vHU47i-6hbUrCU9D-qHYekxc
Теперь нужно найти своего бота в поиске, указав его ник и нажать "Start", чтобы активировать его. В моем случае ник @DWS_MESSAGE_bot.
После этого можно пойти двумя путями:
- создать групповой чат, в который будут приходить заявки и пригласить туда нашего бота;
- вступить в переписку с ботом и получать личные сообщения от него.
Давайте займемся этим и, пока, пойдем по первому пути.
Зайдите в меню, нажмите "New Group" ("Создать группу") и задайте имя вашему чату.
Не забываем пригласить своего бота в чат. Откройте меню чата, перейдите в "Add Members" ("Добавить участников") и введите имя своего бота.
На данный момент у нас есть бот, мы знаем его токен, есть чат, в который будут приходить заявки, и нам осталось узнать только id чата. Для этого, напишем в чате:
- /join @ник_бота
А затем перейдите в браузер, если используете приложение и введите:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXX/getUpdates
где, XXXXXXXXXXXXXXXXXXXXXXX - токен вашего бота, полученный ранее.
Если все сделали правильно, то перед вами откроется подобная страница:
Нас интересует объект "chat":{"id":-209253141. — Это id моего тестового чата. На данном этапе у нас есть все, чтобы отправлять текстовые сообщение из контактной формы на сайте в Telegram. Давайте займемся реализацией PHP-обработчика нашей формы, и сделаем разметку самой формы.
Кстати, если не хотите создавать группу, то можете получать личные сообщения от бота. Просто напишите своему боту /join @ник_бота, а потом, в браузере наберите https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXX/getUpdates. Как и в первом случае, нужно просто узнать id чата.
Разметка формы
Не стал выдумывать что-то сверхсложное, а просто 2 поля и возможность прикрепить файл. Оставил телефон, ведь у многих возникала проблема с символом "+", а файл добавил, так как меня просили разобраться с этой темой, при этом, теперь можно вставлять несколько штук.
<form id="form-contact" method="POST" class="contact-form" autocomplete="off" enctype="multipart/form-data">
<p class="contact-form__title">Закажите обратный звонок и наш консультант свяжется с вами</p>
<div class="preloader"></div>
<p class="contact-form__message"></p>
<!-- Поле с именем -->
<div class="contact-form__input-wrapper contact-form__input-wrapper_name">
<input name="name" type="text" class="contact-form__input contact-form__input_name"
placeholder="Введите ваше имя">
</div>
<!-- Поле с телефоном -->
<div class="contact-form__input-wrapper contact-form__input-wrapper_phone">
<input name="phone" type="tel" class="contact-form__input contact-form__input_phone"
placeholder="Введите ваш телефон">
</div>
<!-- Поле с выбором файла -->
<div class="contact-form__input-wrapper">
<input type="file" name="files[]" id="contact-form__input_file"
class="contact-form__input contact-form__input_file" multiple>
<label for="contact-form__input_file" class="contact-form__file-button">
<span class="contact-form__file-text">Выберите файл</span>
</label>
</div>
<!--Поле с темой в письме-->
<input name="theme" type="hidden" class="contact-form__input contact-form__input_theme"
value="Заявка с сайта Smartlanding.biz">
<!--Кнопка отправки формы-->
<button type="submit" class="contact-form__button">Отправить</button>
</form>
Добавил стили - получилось примерно так (внешний вид в исходнике немного отличается):
Не забывайте, что форма отправляется без перезагрузки страницы, а значит используется ajax, и, для упрощения, jQuery. Поэтому подключаем сам jQuery, если не подключен, а после, и сам скрипт. Я сделал специальную папку telegramform, которую нужно поместить в корень сайта. Если нужно, сделаю исходник без использования jQuery.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="/telegramform/js/telegramform.js"></script>
Код с AJAX запросом. Файл - telegramform.js
(function ($) {
$(".contact-form").submit(function (event) {
event.preventDefault();
// Сообщения формы
let successSendText = "Сообщение успешно отправлено";
let errorSendText = "Сообщение не отправлено. Попробуйте еще раз!";
let requiredFieldsText = "Заполните поля с именем и телефоном";
// Сохраняем в переменную класс с параграфом для вывода сообщений об отправке
let message = $(this).find(".contact-form__message");
let form = $("#" + $(this).attr("id"))[0];
let fd = new FormData(form);
$.ajax({
url: "/telegramform/php/send-message-to-telegram.php",
type: "POST",
data: fd,
processData: false,
contentType: false,
beforeSend: () => {
$(".preloader").addClass("preloader_active");
},
success: function success(res) {
$(".preloader").removeClass("preloader_active");
// Посмотреть на статус ответа, если ошибка
// console.log(res);
let respond = $.parseJSON(res);
if (respond === "SUCCESS") {
message.text(successSendText).css("color", "#21d4bb");
setTimeout(() => {
message.text("");
}, 4000);
} else if (respond === "NOTVALID") {
message.text(requiredFieldsText).css("color", "#d42121");
setTimeout(() => {
message.text("");
}, 3000);
} else {
message.text(errorSendText).css("color", "#d42121");
setTimeout(() => {
message.text("");
}, 4000);
}
}
});
});
})(jQuery);
А теперь сам обработчик нашей формы. Файл - send-message-to-telegram.php:
<?php
// Токен
const TOKEN = '341996777:AAHbnuvQib-vHU47i-6hbUrCU9D-qHYekxc';
// ID чата
const CHATID = '-209253141';
// Массив допустимых значений типа файла.
$types = array('image/gif', 'image/png', 'image/jpeg', 'application/pdf');
// Максимальный размер файла в килобайтах
// 1048576; // 1 МБ
$size = 1073741824; // 1 ГБ
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$fileSendStatus = '';
$textSendStatus = '';
$msgs = [];
// Проверяем не пусты ли поля с именем и телефоном
if (!empty($_POST['name']) && !empty($_POST['phone'])) {
// Если не пустые, то валидируем эти поля и сохраняем и добавляем в тело сообщения. Минимально для теста так:
$txt = "";
// Имя
if (isset($_POST['name']) && !empty($_POST['name'])) {
$txt .= "Имя пославшего: " . strip_tags(trim(urlencode($_POST['name']))) . "%0A";
}
// Номер телефона
if (isset($_POST['phone']) && !empty($_POST['phone'])) {
$txt .= "Телефон: " . strip_tags(trim(urlencode($_POST['phone']))) . "%0A";
}
// Не забываем про тему сообщения
if (isset($_POST['theme']) && !empty($_POST['theme'])) {
$txt .= "Тема: " . strip_tags(urlencode($_POST['theme']));
}
$textSendStatus = @file_get_contents('https://api.telegram.org/bot'. TOKEN .'/sendMessage?chat_id=' . CHATID . '&parse_mode=html&text=' . $txt);
if( isset(json_decode($textSendStatus)->{'ok'}) && json_decode($textSendStatus)->{'ok'} ) {
if (!empty($_FILES['files']['tmp_name'])) {
$urlFile = "https://api.telegram.org/bot" . TOKEN . "/sendMediaGroup";
// Путь загрузки файлов
$path = $_SERVER['DOCUMENT_ROOT'] . '/telegramform/tmp/';
// Загрузка файла и вывод сообщения
$mediaData = [];
$postContent = [
'chat_id' => CHATID,
];
for ($ct = 0; $ct < count($_FILES['files']['tmp_name']); $ct++) {
if ($_FILES['files']['name'][$ct] && @copy($_FILES['files']['tmp_name'][$ct], $path . $_FILES['files']['name'][$ct])) {
if ($_FILES['files']['size'][$ct] < $size && in_array($_FILES['files']['type'][$ct], $types)) {
$filePath = $path . $_FILES['files']['name'][$ct];
$postContent[$_FILES['files']['name'][$ct]] = new CURLFile(realpath($filePath));
$mediaData[] = ['type' => 'document', 'media' => 'attach://'. $_FILES['files']['name'][$ct]];
}
}
}
$postContent['media'] = json_encode($mediaData);
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]);
curl_setopt($curl, CURLOPT_URL, $urlFile);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postContent);
$fileSendStatus = curl_exec($curl);
curl_close($curl);
$files = glob($path.'*');
foreach($files as $file){
if(is_file($file))
unlink($file);
}
}
echo json_encode('SUCCESS');
} else {
echo json_encode('ERROR');
//
// echo json_decode($textSendStatus);
}
} else {
echo json_encode('NOTVALID');
}
} else {
header("Location: /");
}
Во многом он повторяет обработчик из других форм на блоге. Например, в статье "Создание формы обратной связи" используется аналогичный подход, и вы легко сможете осуществить отправку данных как на почту, так и в мессенджер одновременно. Но помните, что это все тестовый, учебный пример и в реальной жизни можно сделать намного больше проверок.
Тут стоит обратить внимание на константы TOKEN и CHATID. Не забывайте подставить туда свои данные. Чтобы принимать какой-то определённый тип файла, поместите его в "Массив допустимых значений типа файла." Из популярных можно выделить:
.jpeg .jpg | image/jpeg |
.csv | text/csv |
.doc | application/msword |
.docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.svg | image/svg+xml |
.txt | text/plain |
.xls | application/vnd.ms-excel |
.xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
.png | image/png |
application/pdf |
При этом файлы будут приходить общим потоком, одним сообщением. Если тип файла не проходит проверку, то он просто не отправляется. Специально не прерываю отправку, так как для большинства важно получить хотя бы контакты для связи, чтобы не потерять лида. Больше типов файлов тут.
Вот так выглядит отправка сообщения:
Не стал делать каких-то серьезных валидаций, так как это просто пример и вам наверняка нужно будет не только отправка текста или картинки в Телеграм, но и на почту, а значит все равно подстраивать под свои нужды. Если будут вопросы и замечания - пишите в комментариях.
Видеопример:
Вот так, средствами PHP можно отправлять в Telegram сообщения и файлы. Если вы используете CMS MODX, то на блоге igamov.ru есть отличная инструкция по интеграции формы с мессенджером.
Исходник для отправки данных формы в Телеграм
Размер: 0,008
Кстати, подписывайтесь на Telegram канал. Уведомления об обновлениях на блоге, в первую очередь, приходят туда).
333 комментария
Здравствуйте!) Спасибо огромное за статью!
У меня есть один вопрос, как можно добавить ещё несколько полей ввода?
Уже почти сутки голову ломаю, но ничего не получается, нужно добавить в одной из форм 3 поля, но постоянно, то ошибка PHP, то "Ошибка. Вы заполнили не все обязательные поля"..
Подскажите пожалуйста)
За ранее спасибо) и прошу прощение, если вопрос уже поднимался в комментариях, не увидел.
Вот как у меня "сделано"...
HTML:
Этажность
t2
t3
Площадь
t4
t5
Конструкция
t7
t8
Ваш телефон:
Я прочитал(а) и согласен с Политикой конфиденциальности
PHP:
$theme,
$nameFieldset => $name,
$name1Fieldset => $name1,
$name2Fieldset => $name2,
$name3Fieldset => $name3,
$phoneFieldset => $phone
);
foreach($arr as $key => $value) {
$txt .= "".$key." ".urlencode($value)."%0A";
};
$sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");
if ($sendToTelegram) {
echo 'Спасибо за отправку вашего сообщения!';
return true;
} else {
echo 'Ошибка. Сообщение не отправлено!';
}
} else {
echo 'Ошибка. Вы заполнили не все обязательные поля!';
}
} else {
header ("Location: /");
}
?>
У меня как с openserver отправляется так и с сайт https, но только без фото!
Если я заполняю только два поля name и phone, и делаю отправку формы, то выскакивает, "Спасибо за отправку вашего сообщения!". А если я выбираю изображение, то в телеграм приходит без фото и на форме не чего не высвечивается!
if(!empty($_FILES['file']['tmp_name'])) {
// Путь загрузки файлов
$path = $_SERVER['DOCUMENT_ROOT'] . '/telegramform/img/';
Я вот недопонимаю, что значит путь загрузки?! Что в этой папке должно быть?
Александр, а не подскажите как поставить его на опенсервер
Всё разобрался! Это было записано в файле
а реальный путь был таким /telegram/img/
Теперь вопрос в другом?! Как сделать чтобы после отправки, поля очищались?
Думал сделать редирект, но тогда суть скрипта без перезагрузки, теряется!
Александр посмотрите в сторону
Здравствуйте, помогите пожалуста, что то сделал скорей всего не так. но не могу понять что именно. После нажатия отправить, страница перезагружается но никаких сообщений не приходит
Саня, здравствуйте. Проверьте ошибки в консоли браузера.
Не могу написать ошибку, пишет обсуждение закрыто
Здравствуйте, Дмитрий
Все настроил по инструкции как сказано в статье на локальном сайте все работает файл и текст отправляется на телеграмм.... только когда загружаю на хостинг не работает.... после ввода данных страница просто обновляется и все
хостинг Beget - curl включён
не знаю что делать ?
Искандар, нужно открыть консоль браузера и проверить на ошибки. В том числе и возникающих во время процесса отправки.
Дмитрий
Спасибо нашел проблему )
Искандар, подскажите, в чем проблема заключалась?
Добрый день никак не могу поблороть проблему : Uncaught SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse ()
at Function.n.parseJSON (jquery.min.js:4)
at Object.success (telegramform.js:19)
at i (jquery.min.js:2)
at Object.fireWith [as resolveWith] (jquery.min.js:2)
at z (jquery.min.js:4)
at XMLHttpRequest. (jquery.min.js:4)
Никита, здаравствуйте. Посмотрите что приходит в res, прежде чем делать $.parseJSON(res), там не должно быть ничего лишнего, кроме нужных данных.
У меня такая проблема
Status Code: 405 Method Not Allowed
Уважаемые, не нужно создавать группу в телеграме, чтобы бот отправлял в группу, можно сделать чтобы он отправлял лично конкретному человеку, просто отправьте (или пусть ваш клиент отправит) боту сообщение с текстом /join @ИмяБота и так же в браузере по ссылке с токеном отобразится id этого чата, только уже не группового, а того контакта который отправил сообщение, и так же просто указываете этот id в обработчике и бот будет отправлять в этот чат. Не надо заморачиваться с группой, особенно когда делаете для клиента. Почему автор об этом не сказал, не знаю.
Руслан, А зачем? если клиент заполняет на сайте форму обратной связи, для чего ему заморочки с отправкой боту сообщений? Это ведь просто как оповещание, что клиент заказал звонок
Саня, ты сначала статью прочитай до конца, потом поймешь какой ты бред написал. Сообщение отправляется боту 1 раз при настройке, чтобы ПОЛУЧАТЬ заявки с сайта. Автор предлагает создавать группу, для получения заявок, это тупо если можно получать заявки напрямую.
Руслан, в статье есть же сноска:
"Кстати, если не хотите создавать группу, то можете получать личные сообщения от бота. Просто напишите своему боту /join @ник_бота, а потом, в браузере наберите https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXX/getUpdates. Как и в первом случае, нужно просто узнать id чата."
Дмитрий Давыдов, Ну это ты добавил уже после моего комментария, сказки не рассказывай, лучше бы сказал спасибо за мою подсказку, как мужик.
Ах-ха. Ну отправлять напрямую - никогда не было цели. Так как, зачастую, уведомления нужны не только владельцу сайта, но и его отделу продаж. Поэтому речь шла о чате, а не личных сообщениях. После того, как вследствие, твоего комментария (как мужик говорю) возник спрос, я добавил упоминание об этом в статье. Надеюсь самолюбие больше не задето?)))
Дмитрий Давыдов, И вот это "/join @ник_бота" не нужно писать боту, достаточно нажать start или просто любое сообщение отправить, id чата определяется точно так же, откуда ты вообще взял это понять не могу. Но ты наверное исправишь а потом скажешь "так там же есть сноска что можно писать любое сообщение"
"Но ты наверное исправишь а потом скажешь "так там же есть сноска что можно писать любое сообщение" - ох, серьезно? Зачем же так сложно, если бы хотел, просто удалил все сообщения твои и все... Ты серьезно думаешь, что я буду ввязываться во все это с тобой?)) Расслабься.
По поводу /join @ник_бота - мне так хочется. Статья написана 5 лет назад. С небольшими правками в части отправки данных. Возможно, тогда запарился или так нужно было. Не помню уже и, в любом случае, разве "/join @ник_бота" не подходит под "просто любое сообщение отправить"?
добрый день, такой вопрос. Форму вашу встроил в свою, всё работает, спасибо большое за решение! Но не могу разобраться, помогите. На странице имеется две формы, в начале страницы и в конце, и отправляются данные только с заполненными полями в верхней форме. Как изолировать их друг от друга?
Например заполнена форма верхняя, данные отправляются при нажатии на кнопку от обоих форм.
Если данные заполнены только внизу то форма не отправляется.
Инкапсулировать бы их как то
Денис, здравствуйте. Да, конечно можно, просто укажите у форм разный id
Здравствуйте,
При нажатии на кнопку submit в браузере открывается сам файл php с кодом. В чем может быть ошибка?
Korney Ivanov, вы же на сервере тестируете? Какая версия PHP?
Если пробовать через локальный сервер MAMP, то будет работать?
Валерий, нет
Здравствуйте, можно ли как то реализовать вывод на страницу с телеграмма сообщений?
Здравствуйте, я не в курсе даже.
Добрый вечер. После нажатия на кнопку отправить не появляется сообщение об успешной отправке, но появляется ошибка в консоли:
[javascrtipt]
VM18924:1 Uncaught SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse ()
at Function.n.parseJSON (jquery-2.2.4.min.js:4)
at Object.success (telegramform.js:21)
at i (jquery-2.2.4.min.js:2)
at Object.fireWith [as resolveWith] (jquery-2.2.4.min.js:2)
at z (jquery-2.2.4.min.js:4)
at XMLHttpRequest. (jquery-2.2.4.min.js:4)
n.parseJSON @ jquery-2.2.4.min.js:4
success @ telegramform.js:21
i @ jquery-2.2.4.min.js:2
fireWith @ jquery-2.2.4.min.js:2
z @ jquery-2.2.4.min.js:4
(anonymous) @ jquery-2.2.4.min.js:4
load (async)
send @ jquery-2.2.4.min.js:4
ajax @ jquery-2.2.4.min.js:4
(anonymous) @ telegramform.js:14
dispatch @ jquery-2.2.4.min.js:3
r.handle @ jquery-2.2.4.min.js:3
[/javascrtipt]
использую твою форму обратной связи с отправкой информации в телеграм, все работает супер! спасибо большое за такую подробную статью!
но вот есть проблемка, перечитал уже все коментарии... как можно сделать всплывающее окно для подтверждения отправки?
чтоб вызывать не текст а именно эту модалку
Владимир. Создаем модальное окно, например, с классом modal-form. Делаем его скрытым, при помощи css, например, так:
Когда получили статус отправки, добавляем модальному окну класс с modal-form_active и добавляя стили ему:
При этом, в любой тег внутри modal-form, можно записать текст успешной отправки или ошибки при помощи js.
Всем привет. Использую эту форму обратной связи с отправкой информации в телеграм, все работает сообщение в телеграм приходит, всё правильно.
Есть проблема. После отправки формы меня выкидывает в по адресу http://example.com/telegram.php
С таким сообщением:
{"okSend":"\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f!"}
Мой код js
function SubmitForm(data) {
data.submit(function (event) {
event.preventDefault();
let form = $("#" + $(this).attr("id"))[0];
let message = $(this).find(".contact-form__message");
let fd = new FormData(form);
$.ajax({
url: "/telegram.php",
type: "POST",
data: fd,
processData: false,
contentType: false,
success: function success(res) {
let respond = JSON.parse(res);
if (respond.err) {
message.html(respond.err).css("color", "#d42121");
setTimeout(() => {
message.text("");
}, 3000);
} else if (respond.okSend) {
message.html(respond.okSend).css("color", "#21d4bb");
setTimeout(() => {
message.text("");
}, 3000);
} else {
alert("Необработанная ошибка. Проверьте консоль и устраните.");
}
},
});
});
}
Мой код php
P.s. {my_chat_id} и {my_token} спецаильно заменил
Пожалуйста подскажите в чём проблема?
а как сделать? когда передается номер телефона, что бы в телегу приходила ссылка телефона, сейчас приходит номер как обычный текст
Посмотрите с мобильного устройства. У меня кликабельная ссылка, а не текст: https://prnt.sc/24brx0g
Борис, у меня и у меня почему без "+" приходят сообщения (номера)
Покажите скрин файла send-message-to-telegram.php
Борис, https://cloud.mail.ru/public/7rzg%2FX1yjdRnzB
ну так это и не файл, который я рекомендовал использовать. Я думал вы скачали исходник и у вас проблемы возникли... У вас свой обработчик. Если хотите, чтобы приходил телефон с "+" обратите внимание на то, как у меня сделана валидация полей, а именно на функцию "urlencode":
Спасибо!
Здравствуйте, спасибо за столь подробный гайд это топ статья!
Подскажите использую ваш шаблон, ничего не менял.
Задача:
Отправить фотки по 10-20 мб 50 штук.
Когда выбираю 3 фотки все ок, если больше то пишет
"Заполните поля с именем и телефоном"
Как можно решить данную задачу?
__https://1x5code.ru
ой не туда написал
а я использую upostmanbot.ru
Пётр, здравствуйте. Зачем?
Страница недоступнаЕсли проблема не исчезнет, свяжитесь с владельцем сайта.
HTTP ERROR 405
О чем речь, какая страница недоступна?
При запуске с live server выдаёт ошибку, хотя год назад ещё нормально всё работало.
Ищите проблему у себя - все работает: https://prnt.sc/AyEHnFfzE21p
Форма то запускается, отправка не работает
Не удивительно... Как вы можете отправить что-то при помощи PHP без PHP-сервера?
Я не владею php, учусь на full stack js. Как создать pho сервер?
Скачайте openserver. Это готовое решение, которым сам пользуюсь. Не знаю какая у вас операционная система. Возможно под Мак нет версии. В таком случае Xampp какой-нибудь должен подойти.
А как изменить шрифт текста котоырй приходит в телеграм? У всех ботов разные шрифты есть кликабельные шрифты вот каких поставить в код, что бы бот отправлял кликабельный текст в чат? @bold
Если убираю из формы поле с phone, из проверки тоже его исключаю в файле php, то не приходит вложенный файл. В чем может быть проблема? Если поле с телефоном на месте, все приходит.
Не знаю даже, наверняка синтаксическая где-то ошибка значит.
Вот тут не забыли убрать?
А вы пробовали перейти по урл с файлом php для отправки формы, например на site.ru/send-message-to-telegram.php? У меня каждый раз отправляется пустая форма
Как передать type="date" в telegram?
У вас в коде написано "Максимальный размер файла в килобайтах", а ведь на самом деле размер в байтах. Не путайте народ.)
1Мб - 1024 Кб
1Мб - 1048576 Б
Подскажите пожалуйста,
В самом телеграмме можно сделать форму для заполнения как на сайте? что бы бот работал не вопрос-ответ, а выкатил именно визуальную форму с полями
Здравствуйте. Подскажите как в обработчик добавить почту , что бы один обработчик отсылал и в телегу и на почту. Спасибо.
Не отправляется фото и медия, что делать?
Фото и медиа меньше 50 мб?
Никита, если используете код из статьи без изменений, то вам нужно создать в корне сайта такие папки "/telegramform/tmp/" (telegramform, а в ней tmp). В статье этот момент не рассмотрен от слова совсем, возможно предполагается, что все и так понятно из кода.
Подскажите пожалуйста, что может быть если через OpenServer отправляет, а когда выгружаешь на хостинг (с https) то уже нет, при обращении к скрипту выводит ERROR
Владимир, попробуйте вывести то, что в переменной $textSendStatus приходит.
А так, проверьте одинаковая ли версия PHP на локальном и реальном сервере.
Добрый день. Подскажите причину, почему страница с инпутами по вашему примеру, перезагружается, но не отправляет сообщение? Скрипт js и jquery на странице подключен. Файлы в папке telegramform, CHATID (c - дефисом) и TOKEN указаны. Бот и группа созданы. Скрипт на сервере. PHP 7.4 версии. В консоле ошибок нет. Что не так еще может быть?
И ajax ошибки тоже не выводятся, то есть если пропустить телефон например
let successSendText = "Сообщение успешно отправлено";
let errorSendText = "Сообщение не отправлено. Попробуйте еще раз!";
let requiredFieldsText = "Заполните поля с именем и телефоном";
Иван, здравствуйте. Класс, указанный здесь
Совпадает с классом формы? У формы кнопка, отравляющая форму имеет type="submit"? ID у формы уникален на странице?
Дмитрий, помогите пожалуйста разобраться
Да, класс совпадает, страница перезагружается, форма обновляет инпуты, ошибок нет (то что отправлена или не заполнена). Форма на чистой страницы, без лишних элементов.
Как насчет ответов на вторые два вопроса? По поводу type="submit" и id?
Лучше ссылку, наверное, скинуть на сайт. Будет нагляднее.
Лендинг, на нем несколько форм, хотелось бы настроить отправку в телеграмм, кнопка имеет type="submit"
2 раза уточнял по поводу id, в итоге id у форм - нет... Возьмите исходник, подключите своего бота и группу и убедитесь, что сообщения доходят. Затем по аналогии адаптируйте под свою форму.
Здравствуйте, подставил айди чата и токен бота, но чет не работает
Здравствуйте, версия PHP? Поддержка curl? Ошибки консоли?
Дмитрий Давыдов, версияи php 7.1, использую локальный сервер опенсервер, в консоли вот такая ошибка: "Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на file:///D:/OpenServer/domains/sendtotelegram/telegramform/php/send-message-to-telegram.php. (Причина: запрос CORS выполнен не по http)."
У вас сервер настроен так, что папка sendtotelegram - это корень сайта? Сейчас ошибка в том, что вы пытаетесь послать запрос на другой сайт, что запрещено политикой CORS, почитайте об этом. многое прояснится. Вообще, подымите версию хотя бы до 7.4. Только что проверил скрипт, скачав и ничего не меняя в нем. Вот результат - работает все https://prnt.sc/5qkVipGw9goM
добрый вечер скачал архив все вроде сделал правельно залил на гит хаб но не пашет выдает ошибку 405
Добрый вечер. Залейте на сервер, у которого есть поддержка php > 7.4 и включен CURL
залил и вот что выдает
Не удалось загрузить карту исходного кода с помощью инструментов разработчика: Не удалось загрузить контент для _http://u29233w2.beget.tech/css/style.css.map: Ошибка HTTP. Код статуса 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE...
Дмитрий Валерьевич, _http://u29233w2.beget.tech/
вот залил на бэгет
Пути к файлам правильно пропиши.
Сейчас ты пытаешься подключит js-файлы по такому пути: _http://u29233w2.beget.tech/telegramform/js/telegramform.js
У тебя по такому пути нет файла telegramform.js
все спасибо вопрос закрыт люди помогли))))
Дмитрий, здравствуйте. Как сделать Переброс на страницу благодарности?
После получения статуса об успешной отправке добавьте:
window.location.replace("/thank-you-page.php");
Пример есть тут.
Дмитрий, огромное спасибо!!! разобралась
Яна, супер)
Здравствуйте. а как сделать чтобы понимать с какой страницы пришли данные в тг?
я добавил скрытое поле в htmlку и добавил код обернул код document.addEventListener в script и загружаю его в футуре. но данные урла в тг не приходят
все, заработало, забыл валидацию добавить, спасибо Автор!
Привет, хорошо, что разобрался)
Один момент. в телегу приходит номера телефона и можно кликнуть по номеру если он начинается с +. без копируется все сообщение. как можно подставить свое значение для номера. например "+375"
Как вы уже пробовали? В чем возникла сложность, какие ошибки получили, как пытались их исправить?
Дополните, прикрутите капчу цифровую!
Т.е. чтобы отправить сообщение ещё нужно циферке ввести ;)