Telegram-группа русскоязычных экспатов, Дананг ·
Telegram-лента, которая наполняется сама
Погода и курсы в семь утра, новость в девять, урок языка в полдень — три рубрики выходят по расписанию без человека. Самым трудным оказалось не написать ботов, а вовремя узнавать, что один из них замолчал.
474 Публикаций без человека с 31 марта по 16 сентября 2026
6173 Повторов не дошло до ленты столько раз новость опознана как уже опубликованная
0 Ручных действий в день расписание живёт на сервере, вмешательство — только на правках

Что за задача
Тематическая группа держится на регулярности. Пока в ленте каждый день что-то есть, люди заходят; как только появляются паузы — заходить перестают, и вернуть их сложнее, чем было привести.
Регулярность упирается в человека. Когда владелец постит сам, это обычно выглядит так: сначала каждый день, потом через день, потом «на этой неделе не успел». Нанятый SMM-щик стоит денег каждый месяц, болеет, уезжает и однажды увольняется. А контент для группы экспатов — это ещё и работа руками: новости про город выходят на английском и вьетнамском, каждую надо найти, проверить дату, перевести, переписать под свою аудиторию и оформить. И так каждый день, без выходных.
И есть отдельная беда, которую замечают подписчики: одна и та же новость приходит из пяти агрегаторов под разными заголовками. Через неделю уже не помнишь, публиковал ты её или нет, и публикуешь второй раз.
Что это дало
Лента в группе выходит сама — в выходные, в отпуске и ночью: расписание живёт на сервере, а не в чьей-то голове. Одна и та же новость из разных источников отсекается до публикации. Сколько всего вышло и сколько повторов поймано — в цифрах на первом экране, рядом с источником.
Что выходит в ленте
Три рубрики, у каждой своё время и своё место в группе. Всего выходит 21 публикация в неделю — то есть три раза в день, семь дней.
| Время | Что выходит |
|---|---|
| 07:00 | Утренний дайджест: погода и прогноз на три дня, качество воздуха, курсы валют, цены на топливо и золото |
| 09:00 | Новость про город и провинцию — пересказ на русском со ссылкой на источник |
| 12:00 | Урок вьетнамского: фраза дня, разбор по словам, подсказка по тонам |
Новость — не голый перевод. В конце каждой ИИ дописывает короткий абзац «Для экспатов»: одно-два предложения о том, как эта новость скажется на жизни иностранцев в Дананге. Перед отправкой бот проверяет, что абзац на месте, — без него пост не выходит. Также обязательны иллюстрация из самой статьи и ссылка на источник.

Урок вьетнамского идёт курсом, рассчитанным на 365 дней: уроки готовятся партиями, на 16 сентября 2026 готово 120, опубликован 94-й день. Это не случайные фразы: каждая привязана к месту, где она пригодится, — рынок, кафе, аренда байка.

Что сделал
Разделил ленту на независимые рубрики
Каждая рубрика — отдельная программа со своим расписанием и своей памятью о том, где она остановилась. Упала одна — остальные выходят как обычно. Новую рубрику можно добавить, не трогая работающие: так к погоде добавились новости, потом уроки языка.
Научил бота писать на языке аудитории
Источники новостей — англоязычные и вьетнамские. На выходе нужен живой русский с местным контекстом, а не машинный перевод. Пересказ делает ИИ по жёсткому шаблону: заголовок, суть, деньги и сроки, отдельный абзац «для экспатов», источник, хештеги.
У моделей есть привычка начинать ответ с «Вот перевод статьи:» или дописывать примечание в конце — в готовом посте это выглядит как брак. Такие следы вырезаются отдельной проверкой, через которую проходит текст любой рубрики; мимо неё не публикуется ничего.
Поставил три проверки на повтор
Дубль в ленте — то, за что подписчики перестают доверять группе, поэтому проверка не одна.
| Проверка | Отклонено |
|---|---|
| Тот же адрес статьи | 2394 |
| Похожий заголовок | 2423 |
| Та же история на другом языке | 1356 |
Третья проверка — самая интересная. Новость, которую вчера опубликовали на русском, сегодня приходит на английском из другого агрегатора. Тексты не совпадают ничем, но числа, имена и латинские названия внутри переживают перевод: «20 million», «SKYTRAX», «2030» одинаковы в обоих. По ним история и опознаётся.
Дал боту память о постах, выложенных руками
Отдельная программа раз в сутки читает историю темы и добавляет в общую память то, что владелец опубликовал сам. Из 222 записей 145 пришли именно оттуда. Поэтому бот не повторит новость, которую человек уже выложил до него своими руками.
Сама она только читает — публикует всегда бот.
Сделал так, чтобы утренний пост выходил даже при отказе источников
Погода, воздух, курсы, топливо и золото добываются независимо друг от друга. Не ответил датчик воздуха — строка про воздух меняется на «нет данных». Не ответили курсы — блок исчезает. У курсов и цен есть запасные источники, а у цен на топливо и золото — последнее известное значение с его датой.
Утром 11 августа сервер погоды ответил ошибкой с первой попытки, а обе страницы с ценой бензина сменили вёрстку. Пост всё равно вышел в 07:00. Читатель разницы не увидел.
Вынес подготовку уроков отдельно от публикации
Уроки и материалы гайда готовятся заранее, партиями, и проходят проверку структуры до того, как попадут в очередь. В расписании остаётся простая задача: взять готовую запись и отправить. Публикация не зависит от того, доступна ли сейчас модель и не кончились ли лимиты.
Поставил проверку перед отправкой
Последний рубеж — формат готового поста: есть ли заголовок, есть ли строка источника, на месте ли обязательные хештеги, не слишком ли он короткий. Не прошёл — пост не публикуется, берётся следующая статья-кандидат.
Группа живёт, только пока у вас есть на неё время?
НаписатьТишина — худший вид поломки
Автоматизация ломается молча. Вот как это выглядело здесь и что пришлось сделать.
Программа, которая завершилась с ошибкой, о себе сообщает. Программа, которая честно отработала и ничего не опубликовала, не сообщает ничего — для сервера это успех.
12 воскресений
Рубрика еженедельного гайда не выходила три месяца. Следующий по очереди материал был пустой, бот это видел, писал предупреждение в служебный журнал и завершался успешно.
26 суток
Новости молчали в два захода летом. ИИ на сервере отвечал ошибкой, а в служебный журнал попадала только пустая строка — причина ошибки записывалась туда, куда никто не заглядывал.
Ноль сигналов
Ни в одном из случаев наружу не ушло ни одного сообщения. Обе аварии обнаружились, когда я сам открыл журналы руками.
Поэтому появился сторож. После каждой успешной публикации рубрика отмечается в общем файле — это её пульс. Сторож запускается по расписанию и проверяет две вещи: не молчит ли рубрика дольше положенного и хватает ли готового контента на ближайшее время. Нашёл проблему — пишет мне в служебный чат. Первый же его запуск на реальных данных поймал ровно ту аварию, ради которой он писался.
Для владельца это главное отличие от «бота, которого написали и отдали»: не «всё работает», а «я узнаю в тот же день, если перестанет».
В конце августа я остановил автопостинг на три недели и включил обратно после аудита — в ленте за этот период пусто.
Четвёртая рубрика, которой нет в ленте
Гайд для экспатов — еженедельные материалы про жизнь во Вьетнаме — написан, собран и работал: четыре выпуска вышли в мае. С 14 сентября 2026 он выключен, и в расписании его нет.
Причина простая: ни один из 39 подготовленных материалов не прошёл проверку фактов, а при беглом просмотре в них нашлись ошибки — например, утверждение про документы для внутреннего перелёта, которое неверно. Пока факты не перепроверены, рубрика не публикуется.
Выключить рубрику дешевле, чем разбирать последствия одного неверного совета про документы. Поэтому она и выключена, а не «работает, но за ней нужно приглядывать».
Что это даёт владельцу группы
Лента живёт в отпуске и в выходные
Никто не забыл запостить: расписание живёт на сервере, а не в голове.
Контент на языке аудитории
Источники англо- и вьетнамоязычные, на выходе — русский с местным контекстом.
Повторы новостей отсекаются
Одна история из пяти агрегаторов на двух языках опознаётся как одна ещё до публикации. Считая и то, что выложено руками.
Отказ источника не ломает пост
Секция без данных исчезает, остальное выходит вовремя.
Расширяется рубриками
Новая рубрика добавляется, не трогая работающие.
Что стоит денег
Источники данных бесплатные: погода, воздух, курсы, цены, новостной поиск. Платить надо за сервер и за ИИ, который переписывает тексты.
Цифры сняты 16 сентября 2026 с сервера, где работает проект: публикации посчитаны по служебным журналам рубрик и их файлам состояния, отказы дублей — по журналу новостного бота. Журналы начинаются 30 марта 2026, более раннего периода в данных нет. Отдельная нестыковка зафиксирована и не скрывается: успешных отправок новостей в журналах 210, а собственных записей в памяти о публикациях 77 — часть истории была потеряна до середины июня и восстановлена чтением самой ленты; точная причина потери не установлена.
Как это устроено технически
Python 3.10+, requests и beautifulsoup4, Telethon для чтения истории
темы, декодер ссылок Google News, ИИ через CLI на сервере, расписание —
cron. Ни базы данных, ни очередей, ни Docker: состояние в JSON-файлах рядом
с кодом, их видно, можно править руками и легко бэкапить. Разворачивание
на любой Linux-машине — несколько минут.
Запись состояния атомарная и только после успешной отправки: падение посреди работы не сдвигает счётчик дня и не теряет прогресс курса. Повторная отправка делается только там, где точно известно, что сообщение не ушло: при неизвестном исходе бот не повторяет и не откатывается на запасной вариант — пропущенный пост поймает сторож, а дубль в группе уже не отозвать. От параллельного запуска рубрики защищены файловой блокировкой, у каждой рубрики есть режим отправки в тестовый чат и режим показа поста без отправки.
Код открыт: github.com/jw-git-hub/jw_danang_group_bot
Кто это делал
За jw-dev.pro — я один, а не студия и не агентство. Значит, вы говорите напрямую с тем, кто делает: без менеджера, без брифа через третьи руки и без передачи проекта другому исполнителю посреди работы.
Часовой пояс UTC+7 — как в Бангкоке и Ханое. Делаю сайты, Telegram-ботов и автоматизацию — задача редко заканчивается страницей, обычно её нужно связать с тем, что у вас уже работает.
Чем дальше, тем реже задача звучит как «сделать сайт». Одному нужно, чтобы цена правилась в одном месте, а не на двадцати страницах. Другому — чтобы канал выходил без него. Третьему — чтобы весь прайс лежал внутри Telegram, куда его клиенты и так заходят каждый день. Поэтому список работ у меня открытый: если вашей задачи в нём нет, это ещё не значит, что она не решается.
Кейсы я пишу так, чтобы их можно было проверить: что было, что сделано и чем это измерено. Есть аналитика — ставлю её цифры и период, за который они сняты; мерить рано — так и пишу. «Увеличил продажи» вы тут не найдёте: это не результат, а обещание.
Нужно похожее?
Сайт, бот или то, что сейчас делается руками, — расскажите, что у вас происходит, и я скажу, решается это или нет.
Такая работа — услуга «Автопостинг в Telegram-канал и группу».
Заявка не ушла
Текст не пропал — вернитесь назад и попробуйте ещё раз. Или напишите напрямую: в Telegram, в WhatsApp или на почту.
Удобнее написать самому — в Telegram, в WhatsApp или на почту.
Не уверены, что с сайтом не так, — проверьте его бесплатно в Telegram: @jw_site_check_bot.
Кому потом всё принадлежит и что будет, если я пропаду, — ответы на главной.