Тестовые серверы Telegram: инструкция по эксплуатации

в 13:14, , рубрики: bot, selectel, telegram, тестовый сервер
Тестовые серверы Telegram: инструкция по эксплуатации - 1

Про разработку ботов в Telegram написано много текстов, а про «тестовый дата-центр» практически ничего. Ранее Pavelgram освещал этот вопрос: он кратко рассказал, что такое тестовые серверы и как с ними работать. Я продолжу это начинание.

Эта статья — сборник разбросанной документации и результатов экспериментов. Под катом расскажу о технических особенностях тестового окружения для разработки, покажу примеры ботов и юзерботов. В качестве бонуса — история «о жизни в тестовом контуре».

Используйте навигацию, чтобы выбрать интересующий блок:

Тестовые дата-центры
Свои, откройте!
Прятки с официальными аккаунтами
Чего нельзя сделать
Инструменты разработчика
Жизнь в тесте
Заключение

Тестовые дата-центры


Серверы мессенджера распределены по всему миру. Набор серверов в одном регионе в терминах Telegram называется дата-центром (ДЦ). Для оптимизации запросов к API клиент должен подключиться к ближайшему из доступных дата-центров. Запись о пользователе и все его данные хранятся в одном ДЦ, который определяется при первом входе.

При авторизации клиент не знает, в каком дата-центре располагается учетная запись пользователя, и отправляет запрос в случайный ДЦ, который возвращает ошибку и перенаправляет на нужные серверы. Если пользователь переезжает в другой регион и задерживается там надолго, то бэкенд может мигрировать пользователя в другой дата-центр — и клиенту придется обработать перенаправление.

Без корректной обработки перенаправлений клиент Telegram будет практически бесполезен: «недомашние серверы» пользователя откажутся сотрудничать. Поэтому разработчикам необходимо отладить функциональность переходов между ДЦ. Однако Telegram не любит отладку на проде: для всех аккаунтов в «боевом» окружении установлено ограничение по количеству успешных попыток входа. Превышение этого лимита приведет к ошибке 420 FLOOD_WAIT_X до следующего дня.

Здесь в игру вступает тестовое окружение — три дата-центра, полностью изолированные от основного Telegram. Это значит, что вы можете зарегистрироваться в тестовом окружении со своего номера телефона, и это будет новый аккаунт, который ничего не знает о вашем «настоящем» аккаунте.

Тестовые серверы Telegram: инструкция по эксплуатации - 2

40 000 аккаунтов уже готовы, еще миллион на подходе.

Для тестирования процессов авторизации, регистрации и переключений между дата-центрами в «тесте» существует 40 тыс аккаунтов с номером +999 66 X YYYY, где X — это цифра от 0 до 3, а YYYY — любое четырехзначное число. Число X задает принадлежность к дата-центру: 1-3 — пользователи явно «прибитые» к соответствующему ДЦ, а 0 — автоматически определяется как ближайший к клиенту.

Аккаунты +999 имеют фиксированный OTP (One-Time Password) для входа: это пять цифр X из номера телефона. Например, если номер телефона — +999 66 2 4227, то код для входа — 22222. Если у вас появилось желание воспользоваться таким публичным номером, не пренебрегайте информационной безопасностью.

  1. «Секрет» входа в публичные аккаунты — не секрет. Особенно после публикации очередной статьи на эту тему.
  2. Если вы хотите сохранить действия на аккаунте в тайне от других любопытствующих, стоит поставить облачный пароль (2FA).
  3. Фиксированный OTP на публичных номерах значит, что любой желающий может удалить ваш защищенный облачным паролем аккаунт.
  4. Публичные аккаунты периодически очищаются.
  5. При входе с мобильных устройств по умолчанию выбран пункт «Синхронизировать контакты». Обязательно выключайте!

Тестовые серверы Telegram: инструкция по эксплуатации - 3

Слева — аккаунт на личный номер, справа — «публичный» аккаунт.

Еще одна особенность публичных аккаунтов: Telegram скрывает IP-адрес и локацию входа.

Тестовые дата-центры — это полноценный Telegram, где, кажется, платные функции можно купить за «фантики». От этой мысли резко захотелось войти в тестовое окружение.

Тестовые серверы Telegram: инструкция по эксплуатации - 4

Свои, откройте!


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

Telegram Desktop (Windows, Linux): зайдите в настройки → нажмите Shift+Alt и ПКМ по кнопке Add Account → выберите Test Server.

Telegram Desktop (macOS): десять раз кликните на кнопку Settings → нажмите cmd и кликните по кнопке Add Account.

Android: скачайте приложение Telegram Beta с AppCenter → при первом входе выберите пункт Test Backend.

iOS: десять раз кликните по кнопке Settings → перейдите в Accounts → нажмите Add Account → выберите Test Server.

Напоминание: не синхронизируйте контакты своего телефона при входе в публичные аккаунты!

Ну вот и все, дойти до тестового окружения Telegram было не сложно. Теперь можно заниматься обычными «телеграмными» делами.

Прятки с официальными аккаунтами


В Telegram многие вопросы — а может и все — решаются через ботов. Их можно распознать по имени и галочке верификации. Однако в тестовом окружении есть определенные проблемы и с тем, и с другим.

Сервисный аккаунт

Первым в Telegram встречает сервисный аккаунт с номером телефона +42777. Этот аккаунт уведомляет о попытках входа и рассказывает, что изменилось при обновлении приложения.

Еще существует сервисный аккаунт с номером +333. У него нет верификации, но он доступен как в тестовом окружении, так и в продовом. «Старички» могли видеть от него приглашение в Telegram Desktop. Сейчас аккаунт не отвечает на сообщения.

В тестовом окружении сервисный аккаунт совершенно внезапно откликается на одну команду:

# Шаблон
/react {t.me url} {limit} {emoji_count}
# Ограничения
1 <= limit <= 200
1 <= emoji_count <= 11
# Пример
/react https://t.me/***/131 40 2

Данная команда увеличивает число реакций на указанном сообщении на limit. Параметр emoji_count указывает на количество реакций, доступных команде. Например, при emoji_count = 1 команда выбирает случайную реакцию из доступных и ставит ее limit раз. Если emoji_count = 4, то команда распределяет limit реакций между четырьмя случайными эмодзи. У этой команды есть несколько побочных эффектов:

  1. Реакции ставятся от имени «публичных» аккаунтов. Эти пользователи не вступают в канал/группу и не увеличивают счетчик просмотров. Так что возможна ситуация, когда реакций больше просмотров.
  2. Хотя верхняя граница limit — 200, более 38 реакций получить не удалось.
  3. Реации ставятся от одного набора аккаунтов. Иными словами, многократный вызов этой команды на одно сообщение не будет увеличивать количество реакций.
  4. Нет возможности управлять какую реакцию необходимо поставить. При emoji_count = 1 будет поставлена случайная реакция: это может быть как 💩, так и ❤️.

Вероятно, эта команда появилась перед релизом реакций на сообщения. Как была найдена — мне неизвестно. Неизвестно и о наличии других команд для сервисного аккаунта. Перебор нецелесообразен: аккаунт не отвечает ошибками.

Премиум

Второй бот открывает себя из меню Telegram Premium — izpremiumbot. Он управляет подпиской. В тестовом окружении ее можно купить на четыре временных промежутка:

  • 5 минут: купить подписку любой длительности непосредственно у бота.
  • 15 минут: получить подписку на 3 месяца в подарок от другого пользователя.
  • 30 минут: получить подписку на 6 месяцев в подарок от другого пользователя.
  • 1 час: получить подписку на 12 месяцев в подарок от другого пользователя.

Для оплаты можно использовать любую тестовую карту — например, широко известную 4242 4242 4242 4242 с любым владельцем, датой и CVC. Эта карта — лишь один из вариантов: все доступные варианты описаны в документации Stripe. Также важно учитывать, что ни один из способов получения Premium не позволяет его автоматически продлить.

Замечание для разработчиков: в test DC 2 Premium-подписка ломает взаимодействие с Encrypted CDN.

Боты, которые не прячутся

По памяти можно найти несколько ботов, которые совсем не маскируются и имеют ник как в основном Telegram.

BotFather. Управляет ботами и приложениями WebApp. Потерял аватарку и верификацию, но работает как обычно, дополнительных функций не предоставляет.

Stickers. Управление стикерами. Тоже без аватарки и «галочки». Кстати, помните красивые масштабные анимации для одиночных эмодзи, например, для 🔥? Так вот, воспроизводимая анимация — это специальный стикерпак, доступный в том числе в проде. ;)

SpamBot. Информационный бот, который поможет узнать, наложили ли на ваш аккаунт ограничения.

PremiumJoinBot. Бот, который автоматически одобряет заявки на вступление для подписчиков Telegram Premium. Потерял верификацию.

DurgerKingBot. Известная демонстрация WebApp. Работает.

like и vote. Потеряли не только аватарку, но и работоспособность. Их товарищи по inline — боты bold, gif и pic — вообще не существуют в тестовом окружении.

Отсюда начинается квест.

Верификация

Тестовые серверы Telegram: инструкция по эксплуатации - 5

Верифицированная магия суффиксов

В тестовом окружении очень просто получить «галочку» верификации для своего канала или группы. Достаточно добавить суффикс _vf в ссылку, например habr_vf. Наличие верификации запрещает изменять ссылку, имя канала или группы.

Управлять верификацией можно с помощью VerifyBot — например, оставить заявку на получение «галочки» или мгновенно ее снять. В тестовом окружении этот бот работает, но имеет нетривиальное имя: asmico_verify_bot.

Прочие автоматизированные боты

Эти боты поменяли свой ник, но продолжают работать.

MTProxyBot → izmtproxy_bot. Бот для регистрации MTProro Proxy.

ShopBot → izshopbot. Демонстрация магазина в Telegram.

wiki → wikibot. Еще один inline-бот, который смог. Ищет страницы в Википедии.

Спортлото

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

username_bot → asmico_username_bot + username_asmico_bot. Боты для обжалования занятых имен. Если вы используете ник habr_it в других социальных сетях, а в Telegram он занят простаивающим каналом с двумя подписчиками, вы можете написать заявку и ник освободят. Первый бот работает, а второй — верифицирован.

design_bot → asmico_designers_bot. Сюда отправляют дизайнерские работы.

Stripe → izstripebot. Поддержка платежной системы Telegram.

jobs_bot → asmico_jobs_bot. Сюда можно подать резюме, если хотите работать в Telegram.

Transparency → asmicoTransparencyBot. Отчет о прозрачности.

PressBot → AsmicoPressBot. Заявки в пресс-центр.

GDPRBot → asmicogdprbot. Позволяют получить выгрузку своих данных в соответствии с GDPR. В проде предлагает перейти на EURegulation, в тестовом окружении бот не работает.

Чего нельзя сделать


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

Вы не можете использовать дополнительные имена. Площадка аукционов Fragment позволяет купить коллекционное имя пользователя. А за дополнительную плату (5 000 TON, ~600 тыс рублей) — назначить его боту, который от такой щедрости научится отправлять премиум-emoji. У Fragment нет официальной тестовой площадки, так что дополнительные имена остаются действительно уникальной вещью. Отсюда следует другое ограничение.

Боты не могут использовать «премиальные» функции — например, эмодзи. Это связано с тем, что нет возможности назначить «коллекционное» имя. Также боты не могут помещать себя во вкладку вкладку «вложений», так как это доступно только пользователям Telegram Ad Platform. Реклама, кстати, тоже есть. В основном, ей пользуется бот like. Посмотреть на рекламу можно здесь в asmico_ads.

Нельзя получить плашку FAKE или SCAM. Я прошерстил все публичные аккаунты и их диалоги — ни у кого нет этих предупреждающих плашек. Похоже, что они выдаются в ручном режиме.

Здесь мы плавно переходим от интересов пользователей к интересам разработчиков.

Инструменты разработчика


Тестовое окружение в первую очередь предназначено для разработчика. Как подключиться к нему из кода?

Запуск ботов

Практически в каждой статье о разработке ботов подробно изложено, как поговорить с BotFather и получить токен. Если попробовать это сделать в тестовом окружении, получить токен и передать его боту, случится ошибка и сервер его отклонит. Как заставить фреймворк подключиться к тестовому окружению?

Сперва внимательно взглянем на эндпоинты BotAPI.

# prod
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe
# test
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/test/getMe

Для тестового окружения добавляется test между токеном и методом. Правила валидации токена не заданы, поэтому если фреймворк не мешает излишней проверкой, можно использовать «хак»: подставить /test прямо в токен.

# aiogram
from aiogram import Bot

bot = Bot("123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/test")

# python-telegram-bot
from telegram.ext import ApplicationBuilder

app = ApplicationBuilder().token("123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/test").build()

Фреймворки aiogram и python-telegram-bot отлично справляются с работой в тестовом окружении. Более никаких изменений в коде бота не требуется.

Локальный BotAPI-сервер

Эндпоинт api.telegram.org/bot — это надстройка над MTProto, которую можно развернуть локально. Зачем это нужно? Для обхода некоторых ограничений:

  • Загрузки файлов до 2 ГБ против 50 МБ при использовании публичного эндпоинта.
  • Использования «серых» адресов для WebHook на любом порту и без SSL.
  • Работы с файлами-вложениями по локальному пути.

Если вы хотите обойти ограничения, то telegram-bot-api придется собрать из исходников. Авторы позаботились о пользователях и оставили генератор команд для сборки под разные языки программирования и операционные системы.

Для запуска нужны параметры apid и api_hash, которые можно получить по инструкции из документации.

telegram-bot-api/build/telegram-bot-api --api-id=$API_ID --api-hash=$API_HASH --local
 -v 2 --http-ip-address=127.0.0.1

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

# aiogram
from aiogram import Bot<br>from aiogram.client.session.aiohttp import AiohttpSession

session = AiohttpSession(
    api=TelegramAPIServer.from_base('http://127.0.0.1:8081', is_local=True)
)
bot = Bot("TOKEN HERE", session=session)

# python-telegram-bot
from telegram.ext import ApplicationBuilder

app = ApplicationBuilder().base_url("https://127.0.0.1:8081/bot").local_mode(True).token("TOKEN HERE").build()

На этом колдовать с ботами заканчиваем — переходим к пользователям.

Автоматизация пользователей

Для запуска юзерботов (автоматизированных аккаунтов пользователей) и создания неофициальных клиентов Telegram нужно получить api_id и api_hash. Эти значения, как было указано ранее, можно получить на my.telegram.org.

Telegram отслеживает использование неофициальных приложений и может выдать бан за флуд, спам и накрутки. Также Telegram не любит клиентов, которые нарушают «безопасные» механики, например, сохраняют удаленные сообщения.

Если наказание за нарушение правил звучит слишком сурово, всегда можно начать разработку на «публичных» API_ID и API_HASH. В исходном коде приложений эти параметры есть, они отмечены как общедоступные. Их можно использовать для разработки и локальных тестов.

В качестве пользователя можно использовать фреймворк pyrogram, который существенно абстрагирует программиста от задач MTProto:

import asyncio
from pyrogram import Client

async def main():
    app = Client(
        api_id=APP_ID,
        api_hash=APP_HASH,
        test_mode=True,  # Вот этот параметр переключает между тестом и продом
        name="test",
        phone_number=PHONE,
        phone_code=PHONE[6] * 5,
        password="cfe6f8523f30-5c98-81f4-2bc3-4f936e7c"
    )
    await app.start()

С помощью pyrogram можно выполнять действия от имени пользователей — например, тестировать ботов. Я же использовал этот фреймворк, чтобы найти материалы для этой статьи. Ведь кто знает, что найдется на «публичных» аккаунтах.

Я обитаю не только в тестовом окружении, но и веду канал в «настоящем» Telegram, где периодически пишу на разные темы. Подписывайтесь!

Жизнь в тесте

Тестовые серверы Telegram: инструкция по эксплуатации - 6

При первом анализе я выявил, что в тестовом окружении на номера +999 зарегистрировано около 15 тыс аккаунтов, 13 тыс из которых — без облачного пароля.

В качестве простой, но визуально красивой задачи я выбрал «накрутку»: сбор пользователей с номером +999 в канале, который назвал Totally not a popular channel. Я выбрал именно этот путь, потому что в тестовом окружении уже существуют два канала на 21 и 29 тыс подписчиков, организованные аналогичным способом. Здесь важно уточнить, что я придерживался максимально мирного и недеструктивного поведения. 🙃

Тестовые серверы Telegram: инструкция по эксплуатации - 7

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

Логика проста: если аккаунт вступил в канал — он без пароля. Если аккаунт после этого вышел из канала — значит, там кто-то есть и ему не нравится моя активность. Конечно, этот метод давал осечки: у некоторых пользователей был ровно один диалог с сервисным аккаунтом. Был это параноик, который все за собой убрал, или обещанная командой Telegram «чистка» для публичных аккаунтов — непонятно.

Параллельно нагнетанию подписчиков я оставил тест на внимательных пользователей. Сперва опубликовал первое сообщение в канале, а затем — подключил к каналу обсуждение. Таким образом, у канала есть чат для общения, но чтобы туда зайти, нужно найти кнопку View Channel Discussion. Людей такая загадка не смущала и они разделились на два типа:

Первый тип людей: пишут на арабском, скидывают фотки. Переводчик видит в сообщениях призывы познакомиться. После неудачи — частично или полностью затирают свои сообщения. В группе осталось сообщение «ты отстой», отправленное в ответ на попытку знакомства.

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

Я немного прошерстил приметные аккаунты и подметил следующее:

  1. В тестовом окружении много арабских аккаунтов. У них встречаются диалоги с подозрительными ботами, которые занимаются каким-то операциями с криптовалютой. Пытаются знакомиться вообще со всеми.
  2. Есть два активных канала — на русском и иврите. Ими управляют люди, которые, кажется, все время проводят в тестовом окружении и активно реагируют на изменения.
  3. В тестовом окружении обитает группа сибирских школьников. Они активно знакомятся с другими русскоязычными аккаунтами.

Заключение


Тестовое окружение Telegram — это инструмент для разработчиков, который из-за своей доступности и многофункциональности привлекает различных «зевак» с разным техническим уровнем. Что думаете насчет всего этого вы? Поделитесь своим мнением и интересными историями в комментариях.

Другие интересные материалы

Автор: Владимир

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js