Как отправить таблицу эксель в телеграм
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |
Отправить эксель таблицу в телеграм-бот?
Пытаюсь отправить через телеграм-бота документ excel методом sendDocument посредством отправки URL этого документа на нашем сайте.
Но получаю ошибку «Bad Request: wrong file identifier/HTTP URL specified».
В доках на забугорном языке написано что-то про поддерживаемые форматы, но типа и другие форматы тоже воде как должны работать.
Ссылка на документ рабочая, я проверял..
Кто знает где собака порылась?
- Вопрос задан более года назад
- 603 просмотра
Как сделать Telegram Bot, который выдаёт готовый Excel-файл?
Есть таблица Excel, куда в две ячейки вводятся данные, а остальные подтягиваются по условиям.
Хочу сделать телеграм бота, в который нужно будет отправлять эти данные, а он будет выдавать готовый файл Excel. (В разработке ботов мало понимаю)
Возможно ли это реализовать? Если да, то как?
P.S. Понимаю, что довольно нагло просить скинуть готовый вариант, поэтому буду благодарен за любую информацию: алгоритм, похожие темы, что прочитать и тд.
- Вопрос задан 15 мар. 2023
- 750 просмотров
2 комментария
Средний 2 комментария

из телеграмного функционала тут только отправить файл. остальной скрипт по генерации файла вообще к телеграму не относится.

Модератор @TosterModerator
Не надо ставить как можно больше тэгов. Лучше оставить один, но конкретный, с которым проблема.
См.п.3.1 Регламента. Также обратите внимание на п.3.4
Решения вопроса 0
Ответы на вопрос 2

Сергей П @trapwalker
Программист, энтузиаст
Судя по постановке вопроса вам надо к фрилансерам, сами не потянете, ведь нужно «всего лишь» научиться программировать, выбрать любую библиотеку для работы с API, реализовать необходимую функциональность, вызывать её из бота. Элементарно. Хорошо, что для этого не придётся вас сначала учить читать и писать.
Вот сейчас все соберёмся и начнем вас с нуля обучать всему этому индивидуально и бесплатно. Вы как себе это предствляете?
Ответ написан 15 мар. 2023
Комментировать
Нравится 3 Комментировать

Программист
просто — берешь и делаешь.
pytelegtambotapi openpyxl
Создаешь бота, прописываешь токен в инициализаторе, создаешь обработчик команды в нем создаешь файл сохраняешь его как BytesIO объект и отправляешь в сообщении ботом.
Ответ написан 15 мар. 2023
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +1 ещё
Как открывать браузер у конкретного пользователя?
- 1 подписчик
- 7 часов назад
- 32 просмотра
Как связать форму на сайте с Telegram
Всем — привет. Давно зрела идея разобраться с отправкой данных из формы на сайте в мессенджер Telegram, но руки не доходили, а моментально получать заявки прямо в телефон, ой как хотелось!
И вот, наконец-то посидел и разобрался. Конечно постичь все тонкости API — не удалось, но по кусочкам насобирал информацию и удалось отправить данные из контактной формы в чат Telegram.
Это актуализированная статья, в которой решены такие проблемы, как отправка фото и пропадающий символ «+», который не приходил в сообщение и из-за этого номер телефона был некликабельным. Появилась возможность не просто отправлять 1 фото, а сразу несколько файлов, в том числе PDF, docx и любых других.
Важно: для отправки файла из формы в Телеграм на вашем сервере должен быть включен cURL. Обратитесь к техподдержке вашего хостинга, они подскажут что делать и как включить. У многих он включен по умолчанию. Например, на моем хостинге Beget — так.
Как отправить данные формы на сайте в Telegram
Итак, давайте приступим. Первое что нам нужно — это создать своего бота. Делается это достаточно просто. В поиске наберите @botfather, откройте родительского бота и нажмите «Start»:

- Пишем команду /newbot, для создания нового бота.
- Придумываем имя бота.
- Придумываем ник бота.

Если все прошло успешно, то увидите поздравления и токен вашего бота, в моем случае это:
Теперь нужно найти своего бота в поиске, указав его ник и нажать «Start», чтобы активировать его. В моем случае ник @DWS_MESSAGE_bot.

После этого можно пойти двумя путями:
- создать групповой чат, в который будут приходить заявки и пригласить туда нашего бота;
- вступить в переписку с ботом и получать личные сообщения от него.
Давайте займемся этим и, пока, пойдем по первому пути.
Зайдите в меню, нажмите «New Group» («Создать группу») и задайте имя вашему чату.

Не забываем пригласить своего бота в чат. Откройте меню чата, перейдите в «Add Members» («Добавить участников») и введите имя своего бота.

На данный момент у нас есть бот, мы знаем его токен, есть чат, в который будут приходить заявки, и нам осталось узнать только id чата. Для этого, напишем в чате:
А затем перейдите в браузер, если используете приложение и введите:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXX/getUpdates
где, XXXXXXXXXXXXXXXXXXXXXXX — токен вашего бота, полученный ранее.
Если все сделали правильно, то перед вами откроется подобная страница:

Кстати, если не хотите создавать группу, то можете получать личные сообщения от бота. Просто напишите своему боту /join @ник_бота, а потом, в браузере наберите https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXX/getUpdates. Как и в первом случае, нужно просто узнать id чата.
Разметка формы
Не стал выдумывать что-то сверхсложное, а просто 2 поля и возможность прикрепить файл. Оставил телефон, ведь у многих возникала проблема с символом «+», а файл добавил, так как меня просили разобраться с этой темой, при этом, теперь можно вставлять несколько штук.
Добавил стили — получилось примерно так (внешний вид в исходнике немного отличается):

Не забывайте, что форма отправляется без перезагрузки страницы, а значит используется ajax, и, для упрощения, jQuery. Поэтому подключаем сам jQuery, если не подключен, а после, и сам скрипт. Я сделал специальную папку telegramform, которую нужно поместить в корень сайта. Если нужно, сделаю исходник без использования jQuery.
Код с 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:
// Номер телефона 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)->) && json_decode($textSendStatus)-> ) < 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 есть отличная инструкция по интеграции формы с мессенджером.
Исходник для отправки данных формы в Телеграм