Как отправить таблицу в телеграмм
Подключение телеграм бота к гугл таблицам
Всем привет, хабравчане!
Это мой первый пост на этой площадке, целью которого является погружение в коммьюнити для обратной связи и полезных ремарок относительно этой статьи. Также буду рада, если эта статья станет полезной для начинающих свой путь в написании ботов людей 🙂
За последний год я узнала об интересном способе автоматизации бизнес-процессов, которая достигается комбинацией гугл-таблиц и телеграма. Такие задачи как учет финансов, тайм-менеджмент, пересылка событий, сообщений, уведомлений и т.п. легко решаются с помощью бесплатного инструментария гугла и телеги.
Далее речь пойдет о создании первого бота и написании скрипта в Apps Script. Поехали!
Создание телеграм-бота
Откуда вообще берутся боты в телеграме? Опытному пользователю можно пропустить это пункт, ну а новичкам настало время познакомится с @BOTFATHER
Находим отца всех ботов в поиске телеги и видим, что этот бот вообще из себя представляет.
После старта этого бота мы увидим список команд.
Здесь нам нужна команда /newbot, чтобы создать нашего первого бота.
Порядок действий незамысловатый: создаем бота помандой /newbot, даем ему вменяемое имя и задать ему username с обязательным окончанием bot. В результате получаем API токен нашего бота, который и будем дальше использовать.
Можете проверить работоспособность созданного бота перейдя по следующему URL:
https://api.telegram.org/bot2011183802:AAEW7ZNRVvlr1TG1N0DNkRB9G4FmvkBUUUU/getMe
выделенное жирным замените на апи своего бота
Запрос вернет примерно это:
Подключение гугл-таблицы
Переходим к гугл табличкам и создаем новый док.
Должно получиться вот это:
Затрем скрипт и напишем свой на языке JavaScript. Дополнительно в скрипте могут быть использованы инструменты гугла (классы, методы и т.п.), что мы далее и рассмотрим.
Напомню, что АПИ бота мы получили в диалоге с botfather.
Далее напишем функцию send, которая будет отправляет сообщение в чат с нашим ботом.
Это стандартная функция при работе с телеграм ботами, в которую зашиваются ответные действия от бота при отправке сообщения в чат с ним.
Здесь мы сравниваем текст полученного ботом сообщения с текстом «/hello» и вызываем функцию send() при совпадении. Это все действия нашего бота.
В результате откроется окно New deployment, где нужно кликнуть по шестеренке и выбрать Web app.
В поле Who has access выбираем Anyone, что позволит другим пользователям вносить правки в проект и деплоить без вашего участия.
При первом запуске приложение попросит авторизации. Проделываем это упражнение.
Здесь нам нужен URL в самом конце. Копируем его по кнопке Copy и вставляем в качестве значения глобальной переменной App_link, значение для которой мы оставили изначально пустым.
Создадим функцию установки вебхука для получения обновлений от нашего бота.
Добавим следующий код к нашему скрипту:
Функция принимает обе глобальные переменные API и App_link, так что убедитесь, что они у вас есть и их значения установлены корректно.
Снова сохраняем код и запускаем только функцию api_connector:
Если функция выполнилась без ошибок, идем проверять работу нашего бота непосредственно в телеге.
Сообщение «/hello» успешно распознано, на что наш бот ответил «Hello world».
Скрипт целиком ниже:
Заключение
Мы создали простейшего бота для демонстрации работы гугл скриптов в связке с телеграмом.
Если тема интересна, с удовольствием подготовлю материал по написанию более сложных функций и/или более полезных с точки зрения бизнеса и автоматизации
Передача данных из «Google Таблиц» в Telegram – это просто!
Вы думаете, что настроить передачу данных из Google Sheets в Telegram – это сложно? На самом деле, всё гораздо проще, чем можно себе представить!
Настройка передачи информации из «Гугл Таблиц» в «Телеграмм» открывает бизнесу, фрилансерам и обычным пользователям массу возможностей и может избавить их от необходимости выполнят рутинные задачи. Зачем тратить время на ручную отправку сообщения о добавлении новых строк в таблицу, когда можно сделать так, чтобы соответствующие уведомления отправлялись автоматически.
Кому могут понадобиться такие возможности и как их реализовать — об этом и пойдет речь ниже.
Кому и зачем нужна интеграция «Телеграмма» с «Гугл Таблицами»?
Рассмотрим только две ситуации, хотя на самом деле их огромное множество. Допустим, у вас есть интернет-магазин, вы пока не используете CRM и фиксируете информацию о заказах и клиентах в «Гугл Таблице». Вам может понадобиться распределить поступающие заказы между ответственными менеджерами. Часто при этом передача данных осуществляется вручную. Если заказов 10-20, то справиться можно, хотя это и потребует дополнительных временных затрат. Но как быть, если в день поступает 50, 100 и больше заказов и идут они из разных источников? Трудно ничего не пропустить и не допустить ошибку.
Другой пример, вы работаете на фрилансе и получаете задачи от клиента в «Гугл Таблицах», чтобы ничего не пропустить нужно постоянно заглядывать в файл или ждать, когда о новых задачах сообщит заказчик. Если оба замотались — пропущена задача и снова потеряно время.
Получается, в обоих случаях ручная рутинная работа и мониторинг отнимают время, которое могло быть потрачено на более важные задачи, и приводит к ошибкам, а это уже упущенная прибыль, репутационные риски.
После настройки автоматизации уведомления об изменениях в таблице будут сразу же приходить в мессенджер ответственному менеджеру или фрилансеру, как в примерах выше. К тому же можно сделать так, чтобы вы могли указать, какие именно данные будут передаваться в мессенджер и при каких условиях.
Но сначала давайте разберемся, как настроить связь таблицы с Telegram с помощью ApiX-Drive на примере упомянутого выше интернет-магазина.
Как связать работу «Google Таблиц» и Telegram с помощью ApiX-Drive?
Не будем останавливаться подробно на регистрации в сервисе, делается это очень просто и быстро, тут сможет разобраться каждый.
После того, как процедура регистрации успешно завершена, заходим в личный кабинет и нажимаем «Создать связь». Дальше нужно выбрать систему, из которой будут экспортироваться данные, в нашем случае «Гугл Таблицы».
Указываем, о каком действии будут отправляться уведомления в «Телеграмм». Нам нужно, чтобы приходила информация о новых заказах, поэтому выбираем «Загрузить строки (новые)».
Теперь подключаем аккаунт, в котором находится таблица с заказами. Если вы выполнили вход в профиль любого сервиса «Гугла» — система сама распознает, ваш аккаунт, вам останется только предоставить ей доступ к данным.
Выбираем файл, с которым будем связывать Telegram. ApiX-Drive подгрузит все таблицы с вашего «Гугл Диска», указываем нужную. Если в ней много листов — понадобится указать конкретный лист, с которого системе нужно брать данные.
После этого нужно прописать порядковый номер строки, начиная с которой будут передаваться заказы. Если информировать менеджеров о первых заказах, которые уже выполнены, не нужно, и вы хотите, чтобы приходила информация только о будущих заказах, то указываем номер первой пустой строки. В нашем примере это строка 7.
Затем ApiX-Drive предлагает настроить фильтры, если это необходимо. Допустим, нам не интересны заказы с суммой меньше 200 долларов. Их будут обрабатывать в обычном режиме, а менеджеры получат оповещения в «Телеграмм» только о тех, которые равны или больше этой цифры. Так они смогут проследить лично за исполнением крупных заказов.
Чтобы это настроить, нажимаем «Добавить условие фильтрации».
В «Поле для фильтрации» указываем столбец, в котором вы записываете цены. В пункте «Действие» выбираем «больше равно», затем появится поле «Значение», сюда записываем цифру 200.
Можно выбирать и другие условия для передачи, например, по статусу сделки, дате её исполнения, источнику. Так, возможно вы хотите отправлять менеджеру информацию о заказах, полученных именно с сайта, игнорируя все офлайн-заказы. В таком случае выбираем колонку с источником сделки в «Поле для фильтрации», выбираем действие «регулярное выражение», а в «значении» пишем «сайт».
Обратите внимание, что есть возможность одновременно подключать сразу несколько фильтров по разным значениям, сочетая их между собой. При этом можно задействовать два варианта условий. «И» – если вам нужно, чтобы выполнялось условие всех фильтров одновременно; «ИЛИ» – когда достаточно срабатывания лишь одного из фильтров.
Так, в первом случае можно настроить передачу уведомлений, когда заказ больше или равен 200 долларов И получен с сайта. Во втором же случае достаточно, чтобы выполнялось то ИЛИ другое условие.
Как видим, фильтры – это очень мощный инструмент, позволяющий не ограничиваться простой передачей данных, но сделать так чтобы при этом учитывались самые разные условия.
На этом настройка «Гугл Таблиц» завершена, переходим к Telegram, который будет использоваться как приёмник данных.
Выбираем его в списке и добавляем нужное нам действие действие — «Отправить сообщение».
Теперь подключаем аккаунт «Телеграмм». Для этого необходимо найти в «Телеграмме» бота ApiX-Drive: @apix_drive_bot. Отправьте ему сообщение, в которое скопируйте строку подключения, ее вам на этом этапе уже сгенерировала система. Бот отреагирует на это вот таким сообщением:
Это означает, что вы всё сделали правильно. Теперь настраиваем сообщение, которое будет приходить в мессенджер.
Системные данные — это информация о том, когда произошло событие. Если вам важно, чтобы менеджер получил время и дату, когда заказ был добавлен в таблицу — добавляем эти значения. Лучше в столбик, так удобнее будет форматировать и просматривать.
Когда закончили с системными, переходим к данным из «Гугл Таблиц». Чтобы менеджеру приходила не только сумма, но и информация о заказе, выбираем нужные колонки, например, добавим еще ФИО клиента, у нас эти данные в колонке В.
На этом настройка связи завершена, чтобы проверить, что всё работает, можно отправить тестовое сообщение. Осталось включить автообновление.
Добавим в «Гугл Таблицу» новый заказ в графу 7, с которой мы настроили прием уведомлений:
И вот в «Телеграмм» пришло сообщение о новом заказе:
Теперь добавим заказ со значением 200 долларов. И для чистоты эксперимента добавляем еще заказ с меньшей суммой, например, 150 долларов:
Уведомление о заказе на 200 пришло пришло, а вот на 150 – нет. Все работает!
На самом деле настраивать связь и передавать нужные данные очень просто. У сервиса интуитивно понятный интерфейс. На каждом этапе вам будут предлагаться пошаговые инструкции. Если же всё равно что-то будет непонятно, то к вашим услугам подробная справка со скриншотами и даже видеоуроками.
У ApiX-Drive очень широкие возможности, можно выстраивать целые структуры, позволяющие автоматизировать практически что угодно. Например, зачем вносить данные о новых заказах в Google Sheets вручную, если можно сделать так, чтобы они автоматически погружались с сайта магазина. Получается уже более интересная схема – сначала данные автоматически приходят в таблицы, а затем уже отправляются в мессенджеры менеджерам.
И подобных идей можно придумать множество – все зависит от потребностей вашего бизнеса! Например, почему бы не настроить отправку уведомлений из Trello в Telegram?
Как отправить таблицу в телеграмм
Добрый день, эксперты!
Подскажите, пожалуйста, как- то можно отправить через Excel(VBA) таблицу с данными. То есть, к примеру, у меня есть таблица c данными на листе в ячейках B38:J39.
Эту таблицу хотелось бы отправить в телеграм. Вижу пока только два варианта: отправка каждой строки в отдельном сообщении, где построчно будут данные из столбцов каждой строки; Либо отдельным макросом сначала формировать скриншот этого диапазона, отправлять его картинкой и удалять этот скриншот.
Собрал вот такой код, он рабочий, но он отправляет данные только из одной ячейки, и если в ячейке есть переносы на другую строку, то текст всё равно приходит в «слипшимся» виде(т.е. без переносов):
[vba]
Function RussianStringToURLEncode_New(ByVal txt As String) As String
For i = 1 To Len(txt)
l = Mid(txt, i, 1)
Select Case AscW(l)
Case Is > 4095: t = «%» & Hex(AscW(l) \ 64 \ 64 + 224) & «%» & Hex(AscW(l) \ 64) & «%» & Hex(8 * 16 + AscW(l) Mod 64)
Case Is > 127: t = «%» & Hex(AscW(l) \ 64 + 192) & «%» & Hex(8 * 16 + AscW(l) Mod 64)
Case 32: t = «%20»
Case Else: t = l
End Select
RussianStringToURLEncode_New = RussianStringToURLEncode_New & t
Next
End Function
Sub MessegeToTelegram1()
Dim Token As String, ChatID As String, message As String, strPhoto As String
Dim sURL As String, oHttp As Object, sHTML As String
message = RussianStringToURLEncode_New(Range(«B38»).Text) ‘ отправляется текст из ячейки B34
‘message = RussianStringToURLEncode_New(Range(«B38»).Text)
‘strPhoto = ConvertFileToBase64(«C:\Users\. \Desktop\12.jpg»)
‘strPhoto = «C:\Users\. \Desktop\12.jpg»
Token = «. »
ChatID = «. »
sURL = «https://api.telegram.org/bot» & Token & «/sendMessage?chat_id=» & ChatID & «&text=» & message
Set oHttp = CreateObject(«Msxml2.XMLHTTP»)
oHttp.Open «POST», sURL, False
oHttp.Send
Set oHttp = Nothing
End Sub
Вообще возможно, чтобы в телеграм сообщение приходило построчно, т.е. одна ячейка= одна строка:
Первое сообщение:
Первая строка: данные из ячейки B38
Вторая строка: данные из ячейки С38
.
.
.
Последняя строка: данные из ячейки J38
Второе сообщение:
Первая строка: данные из ячейки B39
Вторая строка: данные из ячейки С39
.
.
.
Последняя строка: данные из ячейки J39
и т.д.
Не совсем еще представляю как это реально будет выглядеть и «удобочитаемо» ли это будет, по-этому еще пытался сделать отправку скришота таблицы в JPG, но тут так и не понял как правильно отправить файл с локального диска.
Прошу подсказать, где я допускаю ошибку.
Заранее спасибо. :help:
Добрый день, эксперты!
Подскажите, пожалуйста, как- то можно отправить через Excel(VBA) таблицу с данными. То есть, к примеру, у меня есть таблица c данными на листе в ячейках B38:J39.
Эту таблицу хотелось бы отправить в телеграм. Вижу пока только два варианта: отправка каждой строки в отдельном сообщении, где построчно будут данные из столбцов каждой строки; Либо отдельным макросом сначала формировать скриншот этого диапазона, отправлять его картинкой и удалять этот скриншот.
Собрал вот такой код, он рабочий, но он отправляет данные только из одной ячейки, и если в ячейке есть переносы на другую строку, то текст всё равно приходит в «слипшимся» виде(т.е. без переносов):
[vba]
Function RussianStringToURLEncode_New(ByVal txt As String) As String
For i = 1 To Len(txt)
l = Mid(txt, i, 1)
Select Case AscW(l)
Case Is > 4095: t = «%» & Hex(AscW(l) \ 64 \ 64 + 224) & «%» & Hex(AscW(l) \ 64) & «%» & Hex(8 * 16 + AscW(l) Mod 64)
Case Is > 127: t = «%» & Hex(AscW(l) \ 64 + 192) & «%» & Hex(8 * 16 + AscW(l) Mod 64)
Case 32: t = «%20»
Case Else: t = l
End Select
RussianStringToURLEncode_New = RussianStringToURLEncode_New & t
Next
End Function
Sub MessegeToTelegram1()
Dim Token As String, ChatID As String, message As String, strPhoto As String
Dim sURL As String, oHttp As Object, sHTML As String
message = RussianStringToURLEncode_New(Range(«B38»).Text) ‘ отправляется текст из ячейки B34
‘message = RussianStringToURLEncode_New(Range(«B38»).Text)
‘strPhoto = ConvertFileToBase64(«C:\Users\. \Desktop\12.jpg»)
‘strPhoto = «C:\Users\. \Desktop\12.jpg»
Token = «. »
ChatID = «. »
sURL = «https://api.telegram.org/bot» & Token & «/sendMessage?chat_id=» & ChatID & «&text=» & message
Set oHttp = CreateObject(«Msxml2.XMLHTTP»)
oHttp.Open «POST», sURL, False
oHttp.Send
Set oHttp = Nothing
End Sub
Вообще возможно, чтобы в телеграм сообщение приходило построчно, т.е. одна ячейка= одна строка:
Первое сообщение:
Первая строка: данные из ячейки B38
Вторая строка: данные из ячейки С38
.
.
.
Последняя строка: данные из ячейки J38
Второе сообщение:
Первая строка: данные из ячейки B39
Вторая строка: данные из ячейки С39
.
.
.
Последняя строка: данные из ячейки J39
и т.д.
Не совсем еще представляю как это реально будет выглядеть и «удобочитаемо» ли это будет, по-этому еще пытался сделать отправку скришота таблицы в JPG, но тут так и не понял как правильно отправить файл с локального диска.
Прошу подсказать, где я допускаю ошибку.
Заранее спасибо. :help: lanitfin
Сообщение Добрый день, эксперты!
Подскажите, пожалуйста, как- то можно отправить через Excel(VBA) таблицу с данными. То есть, к примеру, у меня есть таблица c данными на листе в ячейках B38:J39.
Эту таблицу хотелось бы отправить в телеграм. Вижу пока только два варианта: отправка каждой строки в отдельном сообщении, где построчно будут данные из столбцов каждой строки; Либо отдельным макросом сначала формировать скриншот этого диапазона, отправлять его картинкой и удалять этот скриншот.
Собрал вот такой код, он рабочий, но он отправляет данные только из одной ячейки, и если в ячейке есть переносы на другую строку, то текст всё равно приходит в «слипшимся» виде(т.е. без переносов):
[vba]
Function RussianStringToURLEncode_New(ByVal txt As String) As String
For i = 1 To Len(txt)
l = Mid(txt, i, 1)
Select Case AscW(l)
Case Is > 4095: t = «%» & Hex(AscW(l) \ 64 \ 64 + 224) & «%» & Hex(AscW(l) \ 64) & «%» & Hex(8 * 16 + AscW(l) Mod 64)
Case Is > 127: t = «%» & Hex(AscW(l) \ 64 + 192) & «%» & Hex(8 * 16 + AscW(l) Mod 64)
Case 32: t = «%20»
Case Else: t = l
End Select
RussianStringToURLEncode_New = RussianStringToURLEncode_New & t
Next
End Function
Sub MessegeToTelegram1()
Dim Token As String, ChatID As String, message As String, strPhoto As String
Dim sURL As String, oHttp As Object, sHTML As String
message = RussianStringToURLEncode_New(Range(«B38»).Text) ‘ отправляется текст из ячейки B34
‘message = RussianStringToURLEncode_New(Range(«B38»).Text)
‘strPhoto = ConvertFileToBase64(«C:\Users\. \Desktop\12.jpg»)
‘strPhoto = «C:\Users\. \Desktop\12.jpg»
Token = «. »
ChatID = «. »
sURL = «https://api.telegram.org/bot» & Token & «/sendMessage?chat_id=» & ChatID & «&text=» & message
Set oHttp = CreateObject(«Msxml2.XMLHTTP»)
oHttp.Open «POST», sURL, False
oHttp.Send
Set oHttp = Nothing
End Sub
Вообще возможно, чтобы в телеграм сообщение приходило построчно, т.е. одна ячейка= одна строка:
Первое сообщение:
Первая строка: данные из ячейки B38
Вторая строка: данные из ячейки С38
.
.
.
Последняя строка: данные из ячейки J38
Второе сообщение:
Первая строка: данные из ячейки B39
Вторая строка: данные из ячейки С39
.
.
.
Последняя строка: данные из ячейки J39
и т.д.
Не совсем еще представляю как это реально будет выглядеть и «удобочитаемо» ли это будет, по-этому еще пытался сделать отправку скришота таблицы в JPG, но тут так и не понял как правильно отправить файл с локального диска.
Прошу подсказать, где я допускаю ошибку.























