Как написать пост с картинками, видео и прочими ништяками(
Как этот)
Телеграм выкатили обновление и теперь боты умеют публиковать посты с хитрой версткой. Дуров в X пообещал, что скоро появится редактор, но пока его нет.
Эта хитрая верстка называется Rich Messages. Через неё можно отправлять посты с заголовками, абзацами, картинками, видео, аудио, таблицами, цитатами, коллажами, слайдшоу и прочими радостями.
На текущий момент отправлять такие посты умеют только боты, но раз этот пост в канале, значит есть и варианты: репост, либо добавление бота в админы.
В любом случае, вам нужен бот, заведите его через
@BotFather и сохраните токен, никому его не показывайте, в том числе нейронкам. Мало ли чего они там запомнят.
Чтобы публиковать сразу в канал, добавьте бота в админы канала, выдайте права на публикацию и редактирование. Этого достаточно.
Теперь нужно сверстать текст и отправить POST-запрос с нужными параметрами.
Текст проще всего сверстать в формате markdown. Я для этого использую Obsidian. А еще есть неплохой экспорт в markdown прямо из гугл-документов. Но естественно они поддерживают не все фичи телеграма, и для некоторых нужно допилить верстку руками. Например, для коллажей или слайдшоу.
Сообщение можно отправить через метод
sendRichMessage любым удобным способом. Хоть через постман, хоть через curl.
Параметры, которые нужно указать:
chat_id — id чата или username канала, например
@frontend_lead_mentorrich_message — объект с содержимым поста. Внутри rich_message нужно передать markdown или html.
Я использую Node.js, потому что я люблю JavaScript и мне так проще всего.
Пример файла bot.js:
const token = process.env.BOT_TOKEN;
const chatId = process.env.CHAT_ID;
const markdown = `
# Заголовок поста
Обычный абзац текста.
**Жирный текст**
`;
const response = await fetch(`https://api.telegram.org/bot${token}/sendRichMessage`, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
chat_id: chatId,
rich_message: {
markdown,
},
}),
});
const data = await response.json();
if (!data.ok) {
throw new Error(data.description);
}
console.log('chat_id:', data.result.chat.id);
console.log('message_id:', data.result.message_id);
В ответ придет объект, из него пригодятся параметры
message_id и
chat.id, по ним потом можно найти и отредактировать опубликованный пост с помощью метода
editMessageText:
await fetch(`https://api.telegram.org/bot${token}/editMessageText`, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
chat_id: chatId,
message_id: messageId,
rich_message: {
markdown: `
# Обновленный заголовок
Пост отредактирован.



Текст после коллажа.
,
},
}),
});
Нюансы:
- сначала лучше публиковать в личку или в канал с черновиками
- картинки предварительно нужно где-то захостить, вставлять их можно только прямой ссылкой
- разные клиенты телеграма по разному рендерят текст. Разные шрифты, разные отступы. В общем, чего взять с олимпиадников — главное что работает. Поэтому смотрите с разных клиентов и ищите компромисс
- у rich-постов есть лимиты: до 32768 символов, до 50 медиа-вложений
Что еще посмотреть:
1. Паша Молянов сделал
бота, которого можно развернуть у себя на компе или vps.
2. Ноунейм из UX live сделал
обзор на возможности и показал как может выглядеть редактор.
3. Документация телеги
тут4.
TipTap - модный фреймворк, на котором я завайбкодил свой редактор для телеги
Лайк, репост, подписка ⤵️