Вставить таблицу в сообщение Телеграм

Сегодня я хочу рассказать как в этом самом сообщение передать фотографии и HTML теги.

По сути на план такой:

  1. Научится добавлять HTML тэги
  2. Научиться добавлять изображения

Если вы хотите понять как отправить любое сообщение с сайта в чат/группу Telegram, то можете прочитать гайд по ссылке.

1 задача – Научится добавлять HTML тэги

Если мы возьмём за основу то, что мы понимаем как отправлять простое сообщение, то для отправки html тэгов нам нужно будет лишь добавить в наш url ещё один параметр – parse_mode=html. Выглядеть это будет следующим образом:

https://api.telegram.org/botТОКЕН/sendMessage?chat_id=ID_ЧАТАparse_mode=html

По итогу мы сможем смело использовать некоторые HTML тэги, например:

  1. Для выделения жирным – ,
  2. Для наклонного шрифта – ,
  3. Для подчёркивания – ,
  4. Ссылку –
  5. Зачёркивание – , ,
  6. и некоторые другие

Полный список сможете посмотреть по ссылке.

Отправка сообщений из Google Таблицы в телеграмм


Не так много как хотелось бы, но, в целом, есть с чем работать)

Ещё один важный момент, который хотел отметить – перенос строки. Так как тэг
не поддерживается, то пришлось искать выход из этой ситуации. В итоге хорошо подходит выражение PHP_EOL.

$order_detail = ‘Заказ №’ . $order_id . » . PHP_EOL . PHP_EOL; $order_detail .= ‘Состав заказа:’ . PHP_EOL; $order_detail .= $ordered_items . PHP_EOL; $order_detail .= ‘Время оплаты: ‘ . $order_date_created . PHP_EOL . PHP_EOL; //.

В итоге в Telegram сообщение будет иметь следующий вид:

Вывод сообщений в Telegram с тэгами HTML

2 задача – Научиться добавлять изображения

В принципе, это тоже не сложно и описано в официальной документации. Более того, в документации можно найти много различных методов, которые позволяют отправлять видео, геолокацию, аудио и тд. Но нас сейчас интересует сам подход, а как заменить одно на другое вы разберётесь сами.

Суть в том, что нам нужно заменить url на другой. Вместо страницы sendMessage мы обращаемся на страницу sendPhoto, а также теперь меняются параметры и минимально нужный нам это ссылка на само изображение, которое передаётся в параметр photo.

//ссылка для отправки текста https://api.telegram.org/botТОКЕН/sendMessage?chat_id=ID_ЧАТАparse_mode=html //ссылка для отправки изображения https://api.telegram.org/botТОКЕН/sendPhoto?chat_id=ID_ЧАТА $chat_id = ‘-1001565978363’; $image_url = ‘https%3A%2F%2Fstatic.onecms.io%2Fwp-content%2Fuploads%2Fsites%2F6%2F2019%2F05%2Fmsdghos_ec065-2000.jpg’; $url = ‘https://api.telegram.org/bot’ . $botToken . ‘/sendPhoto?chat_id=’ . $chat_id . ‘ $result = file_get_contents( $url );

Итогом будет отправка изображения в чат или группу в телеграмме:

Источник: burtnek.ru

Телеграм-бот и таблица Гугл: решение некоторых проблем

С какими проблемами вы можете столкнуться и как их обойти

Тема Телеграм-ботов только ширится, связка «Телеграм-бот и таблица Гугл» тоже. Если вы разрабатываете дополнения для Google Sheets, то пишете код на Google App Script (GAS). Поэтому наверное, и мозги для этих ботов пишете на GAS.

Возникла идея написать бота, который будет искать ключевые слова в сообщениях чата и что-то с этими сообщениями делать. Например, присылать мне извещение, что кто-то что-то написал на интересующую меня тему. Или, наоборот, удалять нецензурную лексику и спам, а авторов таких сообщений банить в чате.

Как всегда, в процессе практической реализации задуманного всплывают подводные камни. О некоторых из них и способах их обхода я и расскажу ниже. Но сначала немного теории.

getUpdates VS setWebhook?

Неважно, на каком языке вы пишете своего бота — на GAS, PHP, Pyton или чём-то ещё. В любом случае вы используете Телеграм API.

API сейчас поддерживает два способа обработки обновлений ботов: getUpdates и setWebhook.

getUpdates — это механизм pull, setWebhook — push.

Например, вы 1 раз в час запускаете getUpdates и получаете все сообщения, написанные в чате за этот час. В GAS можно настроить временной триггер с таким интервалом. Но это значит, что для нашего примера с антиспам-ботом спам будет целый час безнаказанно висеть в чате. Нехорошо это, желательно подстрелить спам сразу на подлёте.

Поэтому надо использовать setWebhook. Как написано в Чудесном путеводителе Марвина по всем вещам Webhook:

Webhook по сравнению с getUpdates

  • избавляет вашего бота от необходимости часто запрашивать обновления.
  • избегает необходимости в каком-либо механизме опроса в вашем коде.
Еще по теме:  Как восстановить диалог в Телеграмме после удаления на Айфоне

setWebhook() + fetch(url)

Теперь пара слов о механизме получения апдейтов, или, проще говоря, сообщений из Телеграм-чата.

1.. Пишем в редакторе GAS простейший скрипт:

function doPost(e) < var contents = JSON.parse(e.postData.contents); var chat_id = contents.message.from.id; // код извлечения данных и записи на лист >

Всё, в переменной contents у нас апдейт. С помощью дальнейшей обработки из него можно извлечь всё, что нужно. Например, chat_id — идентификатор отправителя сообщения, text — текст сообщения.

Дальше можно эти данные записать на лист, переслать кому-то и т.д.

2. Разворачиваем скрипт как веб-приложение.

При этом указываем параметры “Запуск от имени: От моего имени, У кого есть доступ: Все” и копируем ссылку на веб-приложение (webAppUrl).

3. Формируем ссылку.

Для этого надо соединить токен бота и урл веб-приложения следующим образом:

var token = «1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ»; var webAppUrl = «https://script.google.com/macros/s/XXXXXXXX/exec»; var telegramUrl = «https://api.telegram.org/bot» + token;

4. Фетчим урл и устанавливаем webhook:

function setWebhook() < var url = telegramUrl + «/setWebhook?url has-medium-font-size»>Можно и безо всякого скрипта перейти по этому url в браузере и увидеть

Это объект JSON, разобрав который, можно извлечь все 3 поля по отдельности — ok, result и description. Затем их можно использовать в условной логике, показывать юзеру и всё такое.

Подводные камни

Итак, у нас есть связка «Телеграм-бот и таблица Гугл», которая моментально записывает все сообщения из Телеграм-чата в таблицу. Дальше можно искать в них ключевые слова и что-то делать с этими сообщениями.

Но представьте, что вы, обрадованный, выложили ссылку на этого своего бота в широкий доступ и ждёте, что довольные юзеры будут вас благодарить за полезный инструмент.

Всем удобны Google-сервисы. И таблицы они вам предоставляют, и среду разработки скриптов, и мощные сервера по всему свету, на которых эти скрипты работают, и многие другие вкусные плюшки. Однако есть подводные камни, и один них — квоты и ограничения Google. “Службы Apps Script имеют ежедневные квоты и ограничения на некоторые функции. Если вы превысите квоту или ограничение, ваш скрипт выдаст исключение и выполнение остановится”. Например, вызовы URL Fetch ограничены 20,000 в день, а ограничение на одновременное выполнение скрипта — 30 юзеров. Это означает, что если число пользователей бота станет достаточно большим, он перестанет работать.

И что же делать?

Например, можно купить собственный сервер или арендовать его и обрабатывать всю логику на нём. Это стоит дополнительных денег и времени, поэтому логично подумать про что-то другое.

Выход из положения

Разработчику может прийти в голову следующее.

Поскольку веб-приложение выполняется от имени меня, то и расходуются мои квоты. А что, если разворачивать его не от моего имени, а от имени пользователя?

Заинтересованный пользователь может это сделать в 3 клика. Надо только дать ему шаблон таблицы с внедрённым в него скриптом. Он сделает себе копию таблицы, развернёт скрипт как веб-приложение и вставит webAppUrl в нужную ячейку таблицы.

Теперь будут расходоваться квоты и ограничения не разработчика, а пользователя.

И очень маловероятно, что у этого пользователя в его Телеграм-группе будет больше 20,000 сообщений в день.

Всё, вроде бы, должно заработать. Не тут-то было!

Снова подводные камни

Каждый разработчик хочет, чтобы плоды его творчества приносили пользу. И ему, и пользователям.

Как распространять наш скрипт, чтобы о нём узнали заинтересованные пользователи? Можно писать статьи на тематических площадках, давать рекламу в Google, Яндекс и т.п.

Это всё замечательно, но грех не использовать и бесплатные инструменты.

Говоря о плюшках Google, нельзя не упомянуть Google Workspace Marketplace. Там разработчики Google публикуют дополнения для продуктов Google — для таблиц, документов, почты и пр.

Таким образом, идея реализации связки «Телеграм-бот и таблица Гугл» вырисовывается такая:

1. Делаем шаблон таблицы Google.

В нём нарисован интерфейс с нужными заголовками, к таблице прикреплён скрипт веб-приложения.

2. Переносим из кода всю логику обработки сообщений Телеграм-чата в дополнение и публикуем его на Google Workspace Marketplace.

Пользователь устанавливает дополнение, делает себе копию шаблона, делает начальные установки (вводит в нужные ячейки токен бота, урл веб-приложения, свои ключевые слова) и пользуется себе на радость.

Да, тут мы часть работы переложили на пользователя, но потому-то и пишу эту статью. Возможно, кто-то из прочитавших подскажет обходные пути.

Тем более, что опять не тут-то было, здесь есть ещё подводные камни.

И опять

Проблема в том, что вы НИКАК не можете передать данные непосредственно в дополнение. Т.е. вам по вебхуку пришло сообщение, но вы в обработчик, который, напомню, вынесен в дополнение, это сообщение передать не можете.

Еще по теме:  Как закрыть канал в Телеграмме от посещаемости

Вы не можете запустить функцию, находящуюся внутри дополнения.

Вы даже не можете передать в дополнение какой-то тег или сигнал типа “Алё, адд-он! Сообщение пришло! Запускай fetch(url) и читай!”.

Низзя. Не знаю почему, то ли из соображений безопасности, то ли по ещё каким-то причинам. Об этом можно почитать тут: How to transfer data from webapp to addon. В посте как раз рассматривается связка «Телеграм-бот и таблица Гугл».

Может прийти в голову мысль: “Мы же пишем сообщения на лист. Ставь триггер onEdit() или onChange() и, как только сообщение запишется в таблицу, триггер сработает, считает данные и всё обработает, как надо”.

Тут есть 2 закавыки.

Одна из них заключается в том, что все операции ввода-вывода с листами относительно медленны — это доли секунды. При интенсивном общении в Телеграм-чате множественные обращения к листу и с листа могут вызвать существенные задержки.

В отличие от ситуации, если данные передавать, минуя листы, непосредственно из fetch() в код дополнения. Сервера у Google шустрые, и такие операции занимают миллисекунды.

Вторая закавыка заключается в том, что триггеры onEdit() или onChange() НЕ срабатывают при изменении данных на листе программным путём.

Эти триггеры срабатывают, если данные на листе изменил пользователь. Например, ввёл с клавиатуры, или выбрал из меню.

Подробнее об этом тут: Event Objects.

Выход есть!

На вопрос в посте на Стеке всё же нашёлся ответ. Автор даже назначил баунти за правильный ответ, но самое лучшее, что тогда ему подсказали, это использовать облачный сервис Google. Да, среди вкусных плюшек есть и такая. И это наверняка мощная штука.

Вот только она платная при превышении определённых показателей.

Да и хороших мануалов по нему я не видел.

По GAS таких ресурсов полно. Это и Google Apps Script, и mdn web docs, и ещё куча.

По Google Cloud же таких ресурсов намного меньше.

Поэтому, когда через полгода в пост пришёл Alan Wells и написал про Sheets API и USER_ENTERED, то сразу всё прояснилось.

Схема такая:
1. Включаем Sheets API в сервисах веб-приложения. Вы можете убедиться, что всё правильно, если посмотрите код файла appsscript.json. Если кто забыл, то для этого в настройках скрипта чекните флажок “Показывать файл манифеста appsscript.json в редакторе”.

В нём должен присутствовать следующий код:

«dependencies»: < «enabledAdvancedServices»: [< «userSymbol»: «Sheets», «serviceId»: «sheets», «version»: «v4» >] >

В дальнейшем, когда пользователь сделает себе копию вашего шаблона, этот сервис в его копии скрипта окажется включенным.

2. Обычно мы как пишем данные в таблицу?

Используем setValue(value). Типичный код:

var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets()[0]; var cell = sheet.getRange(«B2»); cell.setValue(100);

Код должен выглядеть примерно так:

var SHEETID = ‘XXXXXXX’; function doPost(e) < var data = e.postData.contents; var rowValues = [ [data, «»], ]; var request = < ‘valueInputOption’: ‘USER_ENTERED’, ‘insertDataOption’: ‘INSERT_ROWS’, ‘data’: [ < «range»: «TEMP!A2:B2», «majorDimension»: «ROWS», «values»: rowValues, >, ], >; var response = Sheets.Spreadsheets.Values.batchUpdate(request, SHEETID); >

Ключевыми здесь являются два момента:

А. Запись на лист производим с помощью batchUpdate().

Б. Параметр ‘USER_ENTERED’ как бы говорит триггеру, что данные на листе изменены не программным путём, а пользователем.

Связка «Телеграм-бот и таблица Гугл» работает

Всё, теперь данные, хоть и косвенно — через лист, передаются в надстройку, и вся схема функционирует.

Подробнее обо всём об этом можно почитать тут: Телеграм-Помощник: Описание и руководство. Там же есть ссылка и на дополнение, и на таблицу со скриптом. Можете всё это свободно использовать.

И буду признателен за конструктивную критику и советы!

Источник: baublys.ru

Ultimate Telegram Text Formatting Guide: Shortcuts, Tricks, and Tools

Knowing how to style text is incredibly important if you frequently use Telegram or post on your channel. Why? It’s straightforward: your jokes will be funnier your text will be easier to read, and you’ll get more responses from your channel/group subscribers. Currently, Telegram supports the following text formatting options: hidden (you’ll have to click on the text to see it), bold, italic, monospace , strikethrough, underlined , link.

How to format text in Telegram using the context menu

This is the simplest way to do the formatting which works on all platforms. The instruction for each platform is below:

  1. Select the text you want to add formatting to.
  2. Click it with the right mouse button.
  3. In the opened menu select “Formatting”.

  1. Select the text you want to add formatting to.
  2. Press three dots at the right top corner.
  3. Instead of the usual menu, you’ll see the formatting options menu:
Еще по теме:  Как разархивировать зип Телеграм аккаунт

  1. Select the text you want to add formatting to.
  2. Click “Format” or “BIU” in the opened context menu (if you don’t see it press ▶ on the right).
  3. Select the desired formatting option (you can scroll through all formatting options by pressing ◀ ▶ on the sides)

  1. Select the text you want to add formatting to.
  2. Right-click it.
  3. Select “Transformations” in the opened menu:

Telegram Web

Select the text you want to add formatting to and you’ll see all the options immediately:

Telegram keyboard shortcuts for text formatting

If you often format text on your PC or Mac, it will be useful to learn shortcuts to do this.

Simply select the text you want to format, then press:

Bold
Windows: Ctrl + B
MacOS: ⌘ + B

Italic
Windows: Ctrl + I
MacOS: ⌘ + I

Underlined
Windows: Ctrl + U
MacOS: ⌘ + Shift + U

Strikethrough
Windows: Ctrl + Shift + X
MacOS: ⌘ + Shift + X

Monospace
Windows: Ctrl + Shift + M
MacOS: ⌘ + Shift + K

Hyperlink
Windows: Ctrl + K
MacOS: ⌘ + U

Spoiler (hidden text)
Windows: Ctrl + Shift + P
MacOS: ⌘ + Shift + B

Remove all formatting (normal text)
Windows: Ctrl + Shift + N
MacOS: doesn’t have

Formatting with Markdown (special symbols)

If you like Markdown (it is the method of formatting your text by wrapping it with special symbols), then you’ll be happy to know that Telegram supports it:

  • **Bold text** – double asterisks from both sides of the text.
  • __Italic text__ – double underscore.
  • ~~Strikethrough text~~ – double tilde.
  • ` Monospaced text ` – one apostrophe.
  • “` Monospaced text 2 “` – three apostrophes, it will allow you to use a new line symbol (basically, to make multiple lines of text monospaced). It is different from the mono via context menu (on Mac it is without color and won’t be copied to the clipboard on both Windows and MacOS on the click, because of this to format multiple lines, better use the context menu).

Making text underlined with Markdown is impossible, as well as making it a hyperlink.

Monospaced font. What kind of beast is this?

I want to explain WTF what is this “monospaced font”. Because all other formatting options are pretty straightforward.

But “mono”… uh. The mono you will make with Markdown (the instruction is below), it is for sending the code. Other ones… who knows for what (by “code” I mean pieces of code in programming languages, or like HTML).

If you’ll click or press on the monospaced text, it will be automatically copied to the clipboard. As well on Windows, it will be green color, and on MacOS red color.

Monospaced text done with Markdown (see below how) won’t be changed by Telegram: links to websites won’t convert to clickable hyperlinks, emoji codes like won’t be converted to graphical emojis:

What it can be used for: if you don’t want your text to be converted to emojis or it will be very easy to copy it to the clipboard.

Weird fact: if you’ll make text mono with MarkDown (via triple apostrophe, see below), then it will be without color on MacOS. But on Windows, it will be still a green color. But it won’t be copied to the clipboard on the click on both Windows and Mac. But it will be copied on smartphones, at least on Android. Hmm, I should not have written this article at night…

Keep in mind that after you select the formatting option, your text will be immediately submitted!

Other options

Website piliapp.com

Another way of formatting text is replacing regular letters with ̤s̤p̤e̤c̤i̤a̤l̤ ̤s̤y̤m̤b̤o̤l̤s̤, which looks similar but has some d̷e̷c̷o̷r̷a̷t̷i̷o̷n̷. This website will help you do exactly that:

If it looks useful, you may wanna visit their website. On the top, you’ll see a menu you can use to switch between their tools.

UTF symbols

Telegram supports UTF-8, which means you can use any UTF-8 symbols you can find, such as: ✓ ♓ ⓷ ? etc.

That may help you to decorate your text as well. Here I found a nice table of those symbols, grouped into categories.

Services/bots for posting to channels https://makedreamprofits.com/telegram-text-formatting/» target=»_blank»]makedreamprofits.com[/mask_link]

Рейтинг
( Пока оценок нет )
Загрузка ...