на каком языке написан telegram desktop
Язык Telegram
Высокая безопасность мессенджера Telegram – это его визитная карточка. Для обеспечения анонимности людей используется авторская технология шифрования, которая уже стала признана в профессиональной среде разработчиков и программистов.
Однако о языке программирования Telegram говорят намного меньше, и это незаслуженно. Разберемся, на каком языке написан Телеграм и что делает его таким безопасным.
Технические характеристики Telegram
Павел Дуров утверждает, что настоящее творчество для разработчика начинается тогда, когда он применяет разные способы программирования в своей работе, чтобы достигнуть поставленную цель.
Этот принцип полностью реализован при создании Телеграма, поэтому при техническом анализе мессенджера можно сразу заметить, что ставка была сделана на код, а не на внешний вид.
Язык программирования
Официально считается, что написан Telegram на языке С++. Это логично, ведь он совместим с простым С, который используется для написания мобильных приложений на базе Android и iOS.
Однако ряд программистов высказывает предположения, что для создания мессенджера было произведено смешение Java, C++ и фреймворков Java. Насколько это убеждение верно, неизвестно, потому что команда разработчиков не комментировала данный вопрос.
Интерфейс
Интерфейс мессенджера выглядит просто и лаконично. На главном экране отображаются последние диалоги с другими пользователями, новости из Телеграм-каналов, уведомления от ботов и т. п.
В левом боковом меню доступны быстрые настройки, там же включается редактирование расширенных функций. Можно выбрать одну из четырех тем оформления, включить автоматический ночной режим, который будет активироваться при наступлении темного времени суток по умолчанию, или же поставить любую картинку в качестве фонового изображения.
В компьютерной версии Телеграма интерфейс выглядит иначе с той разницей, что в левой части экрана по умолчанию отображаются активные контакты либо последние переписки с другими пользователями. По желанию в правую часть дисплея можно сместить окно эмодзи, чтобы смайлики были под рукой.
Технология шифрования
Для передачи сообщений используется протокол шифрования MTProto. Для авторизации и аутентификации – алгоритмы RSA-2048, DH-2048. При коммуникации одного человека с другим сообщения шифруются при помощи симметричного AES (Advanced Encryption Standard) и случайно генерируемого ключа, который есть только у сервера и адресата.
Ключ навсегда удаляется примерно через 10 минут после получения сообщения и не хранится на сервере. С переходом на протокол MTProto 2.0 применяется криптографический хеш-алгоритм SHA-256.
Режим секретных чатов использует более надежный тип end-to-end шифрования, при котором ключ для чтения сообщений вообще не пересылается на сервер и доступен только для отправителя и получателя. Для реализации этой функции используется алгоритм AES-256 в режиме IGE.
Исходный код «Телеграм»
Telegram open source – это открытый клиентский код API, который доступен для скачивания бесплатно. Несмотря на то что серверная часть кода остается закрытой, все функции мессенджера остаются рабочими.
Предназначение
Благодаря открытому программному интерфейсу приложения любой заинтересо-ванный человек может получить доступ к библиотеке данных TDLib и создать на его основе собственный веб-клиент. При этом не надо подстраиваться к тому, на каком языке программирования написан Телеграм, поскольку предлагается сразу несколько версий с поддержкой Javascript, C++ и C#.
Передача сообщений, шифрование и локальная база данных будут работать идентично оригинальному Телеграмму. Возможность редактирования кода дана для того, чтобы популяризировать политику компании и развивать свободу слова, защиту прав человека и анонимность общения. Также это дает стимул для разработки новых технологий в сфере коммуникаций и масс-медиа.
Как использовать
Предварительно для создания Telegram клиента исходный код необходимо скачать с официального сайта telegram.org или в другом источнике. Также нужно ознакомиться с прилагающейся инструкцией о шифровании данных. Затем можно приступать к работе (естественно, без специальных знаний и навыков в программировании ничего сделать не удастся).
Справка! Скачать код для последнего обновления приложения невозможно, потому что его никогда не публикуют. К скачиванию доступны только старые версии официальных клиентов для всех платформ.
Кастомные веб-клиенты могут писаться при использовании любого языка программирования и фреймворков, поэтому вы не ограничены в выборе.
Официальные и неофициальные клиенты
Среди официальных клиентов доступны следующие:
Единственный официальный веб-клиент группы разработчиков под эгидой Павла Дурова – это Telegram X.
Неофициальных кастомных клиентов в разы больше, например:
Их можно использовать для частных целей: например, для обхода блокировки официального Телеграма, администрирования каналов, поддержки видеозвонков, расширенных функций дизайна.
Таким образом, Телеграм имеет мощный движок, составленный на основе нескольких языков программирования и сложных протоколов шифрования. Каждый желающий может воспользоваться этими разработками бесплатно, чтобы улучшить продукт и предложить свои нововведения.
Детальная информация видна на видео:
Общаемся на своей волне в Telegram, или Как сделать кастомный язык для мессенджера
Мессенджер Telegram получил признание многих пользователей. Он стремительно набирает популярность, благодаря гибкости и удобству в использовании, а также хорошей защите личной информации юзеров. В этой статье мы наглядно покажем, как можно избавиться в ваших Telegram-чатах от скучных «был в сети 4 минуты назад», «отправляет изображение», «печатает» и заменить их на «мяукал 5 минут назад», «посылает видео- и фотолучи», «гавкает важную информацию».
Многие из нас любят называть людей из своего окружения странными прозвищами. К примеру, мы именуем друзей чупакабрами или ботами, своих вторых половинок — котиками, солнышками и тому подобными ванильными фразочками. Если кратко, у каждого есть какой-то сленг, который ему кажется забавным и максимально подходящим во всех жизненных ситуациях. Так, автор решил для примера называть людей пчелами.
Некоторые правила при создании языка
В каждом деле есть свои правила, создание собственного языка — не исключение. Но не печальтесь, они довольно лояльные.
Объединение народов
Одни и те же фразы должны отвечать за одни и те же функции не только в одном приложении, но и на всех платформах. Будь то IOS, Android, Windows, Mac OS, Linux и так далее.
Поиск очевидности
Никто сегодня не пользуется только одним мессенджером или социальной сетью. Людям будет намного проще, если понятия на вашем языке будут приближены к знакомым и устоявшимся названиям. Всякий раз, когда вы ищете слово, сосредоточьтесь на тех, которые люди привыкли видеть в соответствующем контексте.
Красота в словах
Старайтесь использовать лаконичные и недвусмысленные выражения. Избегайте аббревиатур, собственного видения какого-то слова. Попробуйте использовать гендерно-нейтральный язык или обыграть феминитивы более интересно и изящно, чем просто «был(а)», «вступил(а)».
Идеальная форма
Опытные люди говорят, что соблюдение этого правила наиболее сложное. Иногда нужно посмотреть на окружающие фразы и поменять их, чтобы проблемная фраза не выбивалась и не бросалась в глаза пользователю. К примеру, предложение, лексически не сочетаемое с последующим, а также разная стилистика и непропорциональные размеры.
Оформление
Текст — это дизайн, и мы должны убедиться, что он работает. Так что подходите к тексту так, как редактор журнала:
Соблюдение этих правил требует некоторых усилий. Однако готовый, лаконичный и удобный для всех язык вызовет у вас гордость собой по окончании работы. 🙂
Приступим к делу
После того как вы морально настроились и согласились следовать вышеописанным правилам, мы готовы продолжить наш рассказ. В этом примере мы будем создавать язык пчелок.
1. Для начала заполняем форму, расположенную на этой странице: https://translations.telegram.org/lang/new.
Автор заполнил все поля транслитом, так как язык будет основываться только на русском.
Маленькое примечание: под Base Language имеется в виду язык, который будет использоваться Telegram’ом для не переведенных вами фраз и определения формообразования множественного числа.
2. После заполнения формы вам выдадут шеринговую ссылку, перейдя по которой любой сможет воспользоваться в своем Telegram’е языком пчелок.
3. Далее, нам предложат выбрать, для какой системы мы хотим начать. Разницы особой нет, так что в статье будет рассмотрен только вариант для IOS. 🙂
4. Главный и самый сложный этап: сделать 4663 переводов (и это только для IOS, bruh). НО! Старания нужны везде, даже для забавы! 🙂
Итак, все переводы разделены на одиннадцать категорий:
Маленький ликбез: с помощью Telegram Passport можно зарегистрироваться на сайтах и сервисах, где требуется идентификация личности. Ваша информация, персональные данные и документы защищены оконечным шифрованием (end-to-end). Никто, включая Telegram, не сможет получить к ним доступ без вашего согласия. 🙂 Подробнее можно почитать на https://telegram.org.ru/6171-telegram-passport.html.
5. Собственно, самое главное и интересное для вас расположено во вкладках Private Chats, Group & Channel, Profile.
Здесь примеры, как некоторые фразы были переведены на язык пчелок.
Что вы найдете в разделе Private Chats:
Что вы найдете в разделе Profile:
Что вы найдете в разделе Group & Channel:
Повздорил с властями и создал «самый приватный мессенджер». Как Дуров придумал Telegram
История Telegram сопряжена с чередой скандалов на уровне правительств ведущих государств, обвинениями со стороны политиков разного калибра в адрес разработчиков мессенджера в пособничестве террористам, а также миллиардными инвестициями, ушедшими непонятно куда. Но это не помешало Павлу Дурову заполучить внушительные 500 млн пользователей сервиса. Рассказываем, как Telegram превратился в одно из самых важных приложений на устройствах людей по всему миру и какую цену за это пришлось заплатить его создателям.
Захотел отправить приватное сообщение, когда пришли силовики
Легенда гласит: своим появлением Telegram обязан пристальному интересу российских силовиков лично к Павлу Дурову. В 2011 году в России состоялись выборы в Госдуму. В то время главной русскоязычной соцсетью уже была «ВКонтакте». Оппозиционеры вели переговоры в том числе и там — по версии властей, заодно призывая пользователей соцсети к несанкционированным митингам.
От Дурова якобы требовали заблокировать определенные тематические группы, а он отказал. После этого Павел также проигнорировал повестку из прокуратуры, и через некоторые время в апартаменты предпринимателя захотел вломиться местный ОМОН вместе со следователем.
Именно в этот момент предприниматель, если верить растиражированной в СМИ версии, задумался: как хорошо было бы отправить информацию о происходящем брату-программисту Николаю (он заведовал всей технической частью «ВКонтакте», а позже и Telegram), причем сделать это так, чтобы сообщение никто не перехватил. В то время возможностей шифрования во «ВКонтакте», как и в подавляющем большинстве остальных соцсетей и мессенджеров, еще не существовало.
В конце концов конфликт между представителями госорганов и Дуровым в тот раз удалось замять. А идею создания приложения, переписки в котором останутся приватными, в долгий ящик не забросили.
Когда запустился мессенджер и кто его разрабатывал
Когда началась работа над Telegram и, что важнее, кем именно — споры об этом ведутся до сих пор. В целом Telegram и сегодня остается достаточно скрытной компанией, предпочитающей держать важную информацию при себе.
Официальная версия становления мессенджера от самого Дурова, ставшая известной благодаря «слитой» стенограмме его 16-часового допроса комиссией по ценным бумагам и биржам США в Дубае (ОАЭ), гласит: «Telegram создан группой инженеров и менеджеров, которые все еще работают в Telegram. Команда начала работать над проектом в начале 2012 года и публично запустила его в августе 2013-го». Об этом говорится и в разделе FAQ на сайте мессенджера.
В интервью GQ бывший директор особых направлений Telegram Антон Розенберг добавил несколько любопытных фактов (официально не подтвержденных). За несколько месяцев до начала активной разработки Telegram у Дурова случился разлад с двумя другими основателями «ВКонтакте». Они, по версии Розенберга, задумали продать свои акции, а Павлу это не понравилось — он даже удалил их страницы из соцсети. Таким образом, у Дурова осталось только 12% акций «ВКонтакте» — до контрольного пакета далековато.
А новый приватный мессенджер, разработанный по протоколу шифрования MTProto братом Павла Николаем, мог стать спасительной ниточкой, к которой другие официальные лица «ВКонтакте» имели бы лишь опосредованное отношение. Далее Розенберг подтверждает, что непосредственная разработка мессенджера стартовала в 2012 году, и добавляет: «Дуров велел разработчикам из „ВКонтакте“ сделать новый мессенджер быстрее и удобнее, чем WhatsApp». То есть он заявляет, что разработкой Telegram занимались именно люди из «ВКонтакте».
В будущем это якобы стало краеугольным камнем множества претензий к Павлу со стороны уже новых совладельцев «ВКонтакте». Они не понимали, с какой стати созданное в стенах офиса компании в Санкт-Петербурге ПО должно принадлежать исключительно Дуровым. История усложняется наличием нескольких юридических лиц, зарегистрированных в разных государствах, и путаницей в наименованиях мессенджера (Telegraph, Telegram). Хотя сам Дуров все отрицал.
Точная причина отъезда Дурова не называется. Сам он заявлял о «несовместимости ведения интернет-бизнеса в России». Но некоторые связывают эмиграцию предпринимателя с интересом силовиков после того, как Павел в прямом смысле наехал на сотрудника ДПС на своем Mercedes в Санкт-Петербурге. Впрочем, и это дело закрыли, переквалифицировав в административное.
«WhatsApp — отстой», или мировая экспансия Telegram
Но грустить по родине у Дурова было особо некогда. Практически все время он вместе с братом и небольшой командой уделял развитию своего детища — Telegram. В 2013-м появился клиент мессенджера для платформы iOS, немного позже — для Android. К концу года Павел отчитался о первом миллионе пользователей.
Дальше — больше. В 2014 году запустили спецверсию программы для планшетов, позже разработали систему с псевдонимами (которые с @ вначале), в 2015-м ввели стикеры. Важно, что все это работало кросс-платформенно. То есть, переходя с одного устройства на другое, пользователь не терял истории переписок (в отличие от конкурентов). В 2016-м, всего через два с половиной года после запуска, база активных пользователей Telegram насчитывала уже 100 млн человек — небывало быстрый рост.
Но так было не всегда. К моменту запуска в 2013—2014 годах основной конкурент Telegram — мессенджер WhatsApp — уже стал достаточно популярным. У Viber в активе были десятки миллионов пользователей. Впрочем, к WhatsApp у Дурова сразу же сложилось неприязненное отношение. Например, на конференции TechCrunch Disrupt в 2015 году предприниматель произнес ставшую знаменитой фразу «WhatsApp sucks» («WhatsApp — отстой»). В сети даже ходила такая картинка со сравнением возможностей мессенджеров:
При этом Дурову с командой было жизненно необходимо найти фишку для продвижения Telegram. И ее нашли — причем от первоначальной идеи, появившейся вскоре после приезда силовиков в апартаменты предпринимателя в 2011-м, она мало чем отличалась. Основой маркетинговой кампании Telegram решили сделать защищенность пользовательских данных.
Насколько в реальности защищена переписка в «облачных», а не «секретных» чатах (последние находятся на устройствах пользователей, а не в сети, то есть не синхронизируются), эксперты спорят до сих пор. Но факт остается фактом: стратегия Дурова сработала — сегодня мессенджер многими воспринимается как одно из самых надежных решений для приватного обмена сообщениями. А в 2015 году Дуров даже публично заявил: «Наше право на приватность переписки важнее страха перед терроризмом».
Попытки блокировок Telegram «из соображений государственной безопасности»
Но с подобным подходом согласились правительства не всех государств. Например, в Иране мессенджер официально заблокирован по решению суда, притом что только в 2018 году им на территории страны пользовались как минимум 40 млн человек. Официальные власти Ирана объясняют блокировку «соображениями государственной безопасности и борьбы с терроризмом». Впрочем, назвать такую блокировку особо успешной получается с натяжкой: мессенджер как работал, так и продолжает работать — хоть и с ограничениями, которые местные пользователи успешно обходят.
Похожая история случилась и в России. Там в 2018 году мессенджер пытались заблокировать силами Роскомнадзора, когда Дуров отказался выдать ключи шифрования по запросу правительства после теракта в петербургском метрополитене. Позже Дуров заявил о невозможности исполнения так называемого «закона Яровой».
Правда, с блокировкой не задалось. Параллельно с ней Роскомнадзор «поломал» половину других интернет-ресурсов. Например, наблюдались сбои в работе системы регистрации билетов на авиарейсы, системы продажи электронных полисов, сайта МГУ и других университетов, научных архивов. И это не говоря про сервисы от Google, Yahoo, Twitter, Facebook, Sony и компаний поменьше. Сам же мессенджер продолжал работать: юзеры удачно обходили запреты десятками доступных способов.
Ситуация с мнимой блокировкой продолжалась несколько лет и иногда доходила до абсурда. Например, государственные службы и предприятия России продолжали активно создавать в Telegram официальные группы и каналы, а пресс-секретарь президента Владимира Путина Дмитрий Песков даже заявлял, что в Кремле также пользуются мессенджером. Официально блокировку Telegram в России сняли лишь в 2020 году по до сих пор непонятной причине. При этом Дуров продолжает утверждать, что за все время существования проекта властям он передал «ровно 0 КБ информации».
Вместо резюме
Из уже упоминавшейся стенограммы допроса Дурова комиссией по ценным бумагам и биржам США стало известно: в основном составе Telegram работает совсем немного человек. По пояснениям Павла, в 2017 году в Telegram Group числилось от 25 до 30 человек, и «сейчас эти цифры не сильно изменились». Официально команда располагается в Дубае, хотя и привлекает «сотни независимых подрядчиков».
Также в январе создатели мессенджера сообщили: количество его ежемесячных активных пользователей составляет порядка 500 млн человек, приложение скачали миллиард раз. Если верить ресурсу statista.com, то по количеству юзеров Telegram занял 4-е место в мире. Для сравнения: у ненавистного Дуровым WhatsApp — около 2 млрд пользователей.
Telegram боты. Или с чего начать?
Всем привет, сегодня я хотел бы рассказать вам о ботах. Их существует огромное количество, есть боты для телеграмма, Вайбера, Ватсаппа и множество других, но я остановлю своё внимание именно на ботах для телеграмма. Их существует огромное количество и все они выполняют разную задачу, есть боты которые показывают погоду для вашего города, есть те, которые предлагаю пройти различные тесты(профориентационные, пдд, по школьным предметам), а есть и такие, которые могут читать тексты на нескольких языках, если кто-то давно хотел любимую книгу не просто прочитать, но и прослушать, то это ваш шанс 😉
Применение боту можно придумать абсолютно любое, нужны всего лишь 2 вещи: фантазия и наличие навыков программирования. С первым у каждого индивидуально, а вот научиться программировать на уровне чтобы создать первого своего бота не так трудно, сейчас в интернете существует множество курсов посвящённых созданию ботов.
Что важно сделать перед тем как приступить к написанию своего бота?
Нужно четко определиться, что будет уметь делать Ваш бот, вот прям возьмите листочек и распишите по пунктам, например, присылать мне каждое утро погоду в моем городе, задать возможность изменения города, запросить погоду на 3 дня, неделю, месяц. Чем детальнее вы опишите его функционал, тем проще вам будет дальше. Вторым очень важным пунктом является язык программирования. Бота можно написать на чем угодно PHP, Python, Node is, Go. Если ваш бот не имеет какого-то сверх сложного функционала, то сложность его написания на всех выше перечисленных языках будет примерно одинаковой, дальше дело вкуса. Также для телеграмм ботов написано множество библиотек, я пользуюсь TelegramBotApi. Вы можете попробовать что-то другое. Ниже я приведу пару примеров простого эхо бота на разных языках программирования.
Всё, о чём должен знать разработчик Телеграм-ботов
Вы вряд ли найдете в интернете что-то про разработку ботов, кроме документаций к библиотекам, историй «как я создал такого-то бота» и туториалов вроде «как создать бота, который будет говорить hello world». При этом многие неочевидные моменты просто нигде не описаны.
Как вообще устроены боты? Как они взаимодействуют с пользователями? Что с их помощью можно реализовать, а что нельзя?
Подробный гайд о том, как работать с ботами — под катом.
Начало работы
Telegram API vs Telegram Bot API
Рассказываю по порядку.
Телеграм использует собственный протокол шифрования MTProto. MTProto API (он же Telegram API) — это API, через который ваше приложение Телеграм связывается с сервером. Telegram API полностью открыт, так что любой разработчик может написать свой клиент мессенджера.
Для написания ботов был создан Telegram Bot API — надстройка над Telegram API. Перевод с официального сайта:
Чтобы использовать Bot API, вам не нужно ничего знать о том, как работает протокол шифрования MTProto — наш вспомогательный сервер будет сам обрабатывать все шифрование и связь с Telegram API. Вы соединяетесь с сервером через простой HTTPS-интерфейс, который предоставляет простую версию Telegram API.
Среди упрощений Bot API: работа через вебхуки, упрощенная разметка сообщений и прочее.
Почему-то мало кто знает о том, что боты могут работать напрямую через Telegram API. Более того, таким образом можно даже обойти некоторые ограничения, которые даёт Bot API.
Вся информация ниже будет по умолчанию относиться и к Bot API, и к Telegram API. О различиях я буду упоминать. От некоторых ограничений Bot API можно избавиться с помощью локального сервера, об этом в конце статьи.
На чём пишут Телеграм-ботов
Бот должен уметь отправлять запросы Телеграм-серверу и получать от него апдейты (updates, обновления).
Как получать апдейты в Bot API
Получать апдейты можно одним из двух способов:
Поллинг — просто регулярно отправлять запрос к серверу Телеграма для получения обновлений,
Вебхук — сделать так, чтобы Телеграм сам отправлял запросы по нужному URL.
Конечно, удобнее использовать библиотеки, чем делать http-запросы «руками».
Если вы попробуете загуглить, как написать Телеграм-бота на Python, вам предложат воспользоваться библиотеками python-telegram-bot и telebot. Но не стоит.
Ну, если вы только хотите познакомиться с разработкой ботов и написать своего hello-world-бота, то можете, конечно использовать и их. Но эти библиотеки могут далеко не всё. Среди разработчиков ботов лучшей библиотекой для ботов на Python считается aiogram. Она асинхронная, использует декораторы и содержит удобные инструменты для разработки. Ещё был хороший Rocketgram, но он давно не обновлялся.
Также ботов часто пишут на JavaScript, для этого обычно используется Telegraf. Библиотеки есть и для многих других языков, но используют их реже.
Если же вы хотите использовать Telegram API, то можете воспользоваться Python’овскими Telethon и Pyrogram.
Если вы хотите получить какое-то представление о том, как вообще выглядит код бота, вот вам пример использования на aiogram с его странички на GitHub:
Этот бот будет отвечать на команды /start и и /restart.
Создание бота
Один пользователь может создать до 20 ботов.
Юзернеймы
При создании бота нужно выбрать юзернейм. После этого поменять его будет очень сложно.
Как поменять юзернейм бота
Если у вас есть бот, и вы хотите дать ему более короткий юзернейм (который может быть занят неработающим ботом), то вы, теоретически, можете это сделать через @BotSupport.
Для этого бот должен (внезапно) быть рабочим, а также поддерживать английский язык.
Принято использовать такой формат обращения в поддержку:
Если вы везунчик 9999 lvl — вам ответят.
Юзернейм бота выглядит как обычный юзернейм, но он должен заканчиваться на «bot».
Вы могли видеть ботов с именами @pic, @vid, @sticker, @gamee — это официальные боты Телеграма. Им можно нарушать все правила 🙂
Очень многие юзернеймы уже заняты. Свободных коротких юзернеймов осталось очень мало. И что самое грустное: почти все эти боты мертвы. Просто не отвечают на сообщения. Наверное, это просто разные любопытные люди хотят сделать бота, создают его, а потом забивают. У меня самого есть несколько лежащих ботов. Так что, думаю, лимит в 20 ботов на одного владельца вполне оправдан 🙂
Оформление бота
Открыв бота, пользователи могут увидеть его профиль.
Описание (Description) — это текст, который пользователи будут видеть в начале диалога с ботом под заголовком «Что может делать этот бот?»
Информация (About) — это текст, который будет виден в профиле бота.
Аватарка. Аватарки ботов, в отличие от аватарок пользователей и чатов, не могут быть анимированными. Только картинки.
Команды — тут имеются ввиду подсказки команд в боте. Подробнее о командах ниже.
Inline Placeholder — об инлайн-режиме см. ниже.
Стандартный совет: Потратьте свое время и заполните описание и информацию бота, чтобы пользователям было понятнее и проще его использовать. Можете оставить там свои контакты. И поставьте аватарку, чтобы бота было проще отличать от других чатов в списке.
Сообщения и чаты
Запуск бота пользователем
Таким образом, первое сообщение от пользователя — это всегда /start (либо /start с параметрами, об этом ниже в разделе «Диплинки»).
. если пользователь использует официальный клиент
На стороне сервера это не проверяется, поэтому теоретически пользователь может отправить боту любое сообщение через Telegram API.
Сообщения
Понятно, что главная функция бота — отправлять и получать сообщения.
И то, и другое можно делать со всеми видами сообщений (фото и видео, файлы, опросы, голосовые сообщения и т. д.).
В Телеграме можно делиться файлами до 2 ГБ, но в Bot API более жесткие лимиты: боты могут скачивать файлы до 20 МБ и отправлять файлы до 50 МБ.
Работа с файлами в Bot API
Если бот уже загрузил файл на сервер Телеграма, то он может использовать file_id, чтобы отправлять этот файл.
Загружать файл на сервер можно в том числе и по URL файла.
Куда может писать бот
Бот может писать в личку только тем пользователям, которые его запустили. Пользователь может заблокировать бота, и тогда бот снова не сможет ему писать.
Боты не могут писать другим ботам.
Бота можно добавить в группу (если в BotFather включена соответствующая настройка). По умолчанию он видит не все сообщения (об этом ниже, в разделе «Видимость сообщений в группах»).
В группе боту можно дать права администратора, чтобы он мог выполнять действия админов.
В одной группе может быть до 20 ботов. В публичные группы (группы с юзернеймом) ботов могут добавлять только админы.
Также бота можно добавить в канал, причем только как администратора. Самый частый способ использования ботов в каналах — добавление кнопок под постами («лайки», ссылки и прочее).
Как боты добавляют кнопки
У админа канала может быть специальное право: «Редактирование чужих публикаций». С помощью него боты редактируют посты, добавляя к ним кнопки.
Подробнее о кнопках тоже ниже.
Супергруппы
На самом деле многие группы в Телеграме являются супергруппами.
Почему так? Раньше было четкое разделение на группы и супергруппы. По задумке, супергруппы — это группы для сообществ. Супергруппы могут иметь больше участников, публичные ссылки и другие плюшки.
Со временем, видимо, решили, что это неудобная концепция. Теперь обычная группа становится супергруппой, когда у группы меняются какие-нибудь настройки (подробнее тут). Вот такой костыль.
В этой статье под группами я подразумеваю и супергруппы, и обычные группы.
Супергруппу нельзя обратно превратить в группу. С точки зрения API супергруппа устроена так же, как и канал. Важное отличие супергрупп от обычных групп состоит в нумерации сообщений: о нём чуть ниже.
id пользователей и чатов
У каждого пользователя, бота, группы, канала в Телеграме есть собственный id. Различать чаты в коде бота следует именно по id, потому что он никогда не меняется.
id сообщений
Каждое сообщение в Телеграме имеет свой id. Это относится и к системным сообщениям (пользователь зашел в группу, изменилось название группы и т. д.)
Через Telegram API боты могут получать по запросу сообщения в любом чате по их id.
id сообщений в супергруппах и каналах уникальны для чата: первое сообщение в чате имеет номер 1, второе имеет номер 2 и так далее.
id сообщений в личных сообщениях и обычных группах работают по другому. Там, можно сказать, нумерация сквозная: id сообщения уникально для каждого отправившего его пользователя. Так, первое сообщение от пользователя во всех личках и группах имеет номер 1, второе сообщение от того же пользователя имеет номер 2 и так далее.
Видимость сообщений в группах
Обычно бот должен реагировать именно на команды. Телеграм не уведомляет бота об остальных сообщениях, и это гарантирует приватность переписки.
Но если боту нужно видеть все сообщения в группе (например, если это чат-бот или антиспам-бот), для него можно отключить Privacy mode.
Privacy mode — настройка в BotFather, которая по умолчанию включена. В таком режиме бот в группах видит только такие сообщения:
Сообщения с упоминанием бота,
Ответы на сообщение бота, ответы на ответы и так далее,
Команды — о них в следующем пункте.
А если Privacy mode выключен, то бот видит все сообщения в группе.
Если бот — админ в группе, то он в любом случае видит все сообщения.
Бот, работающий через Bot API, в любом случае не будет видеть сообщения от других ботов.
Бот видит не все сообщения Я включил Privacy mode, а он не работает
Нужно удалить бота из группы и добавить заново.
Недавно был найден баг: боты не могли видеть некоторые сообщения от юзеров, если сообщения выглядят как команды с юзернеймом пользователя на конце.
Это могло нарушить работу антиспам- и других ботов.
Сейчас баг уже исправлен.
Команды
Часто используемый способ «общения» пользователей с ботом — команды. Команды начинаются на «/» и состоят из латинских букв (можно использовать цифры и нижние подчеркивания).
Команды подсвечиваются как ссылки: нажатие отправляет команду в чат.
В BotFather можно указать подсказки команд для бота. Он будут отображаться при вводе «/» и команд. Если есть подсказки, рядом с кнопкой «Отправить» появляется кнопка для открытия меню команд.
Разметка сообщений
Как вы, наверное, знаете, сообщения в Телеграме могут содержать не только обычный текст, но и жирный, курсив и др. В Bot API разметку сообщений можно делать в HTML и Markdown.
Разметка в Telegram API
В Telegram API для разметки надо вместе с сообщением передавать entities (MessageEntityBold, MessageEntityItalic и так далее). Хорошие библиотеки сами превращают HTML/Markdown в текст и entities.
Способы выделения текста:
Жирный текст
Моноширинный текст («в строке» и «блоком»)
Упоминание пользователя — текст, похожий на ссылку, клик по которому открывает профиль пользователя. Если упомянуть в группе её участника, он получит уведомление.
Чтобы вставить в сообщение упоминание пользователя, в Bot API нужно встроить ссылку на tg://user?id=123456789.
Кнопки
Инлайн-кнопки
Бот может оставлять кнопки под своими сообщениями.
Кнопки под сообщениями (они же inline keyboards / inline buttons) в основном бывают трёх видов:
URL button — кнопка с ссылкой.
Callback button. При нажатии на такую кнопку боту придёт апдейт. С созданием кнопки можно указать параметр, который будет указан в этом апдейте (до 64 байтов). Обычно после нажатий на такие кнопки боты изменяют исходное сообщение или показывают notification или alert.
Switch to inline button. Кнопка для переключения в инлайн-режим (об инлайн-режиме см. ниже). Кнопка может открывать инлайн в том же чате или открывать меню для выбора чата. Можно указать в кнопке запрос, который появится рядом с никнеймом бота при нажатии на кнопку.
Дополнительные виды кнопок
Login URL button — специальная кнопка для авторизации пользователей на сайте. Использовалась, например, в официальном боте @discussbot (до добавления нативных комментариев в Телеграм).
Callback game button — кнопка для открытия HTML-игры. См. пункт «HTML-игры».
Pay button — кнопка для платежей. См. пункт «Платежи через ботов».
Клавиатурные кнопки
Есть другой тип кнопок: keyboard buttons. Они отображаются вместо клавиатуры как подсказки. При нажатии на такую кнопку пользователь просто отправит этот текст.
При этом в личных чатах с помощью кнопки можно:
Запросить номер телефона пользователя,
Запросить геолокацию пользователя,
Открыть у пользователя меню создания опроса.
Есть опция resize_keyboard, которая отвечает за то, изменять ли высоту этой «клавиатуры из кнопок». По умолчанию она, почему-то, выключена, и тогда высота клавиатуры стандартная большая. Получаются кнопки как на этой картинке:
Чтобы показать клавиатурные кнопки, бот должен отправить сообщение. Можно отправить клавиатуру, которая свернётся (но не пропадёт) после нажатия на кнопку.
По умолчанию, если показать кнопки в группе, они будут видны всем пользователям. Вместо этого можно отобразить кнопки одновременно для этих пользователей:
Для пользователей, юзернеймы которых были в тексте сообщения,
Если это ответ на другое сообщение: для пользователя, который его отправил.
Ещё о кнопках
Оба типа кнопок могут составлять несколько рядов, в каждом из которых по несколько кнопок. Ограничения: в ряду может быть до 8 кнопок, а всего с сообщением до 100 кнопок.
При отправке сообщения можно выбрать одно (но не больше) из следующих действий:
Добавить к сообщению инлайн-кнопки,
Показать клавиатурные кнопки,
Убрать все клавиатурные кнопки,
Force reply: автоматически заставить пользователя ответить на сообщение. Так произойдёт то же самое, что и при нажатии пользователем кнопки «Ответить». Это нужно для того, чтобы бот мог общаться с пользователями в группах, не нарушая Privacy mode.
Таким образом, нельзя показать оба типа кнопок одновременно.
Взаимодействие с ботом
Ссылки на бота
Юзернеймы ботов работают так же, как и любые другие юзернеймы в Телеграме: бота @examplebot можно открыть по ссылке t.me/examplebot.
Также существует прямая ссылка: tg://resolve?domain=examplebot
Подробнее о ссылках tg://
Такие ссылки могут не только заменять ссылки t.me, но и задавать свои действия. Например, tg://settings открывает настройки.
Список известных таких ссылок есть канале @DeepLink.
Ссылка на добавление в группу
По ссылке t.me/examplebot?startgroup=true у пользователя откроется меню: выбор группы для добавления бота.
Прямая ссылка: tg://resolve?domain=examplebot&startgroup=true
Диплинки
По ссылке t.me/examplebot?start= пользователь может запустить бота с каким-то стартовым параметром ( ).
При переходе по ссылке бот открывается как обычно.
Отображается кнопка «Запустить», даже если пользователь уже запускал бота.
Пользователь нажимает на кнопку и видит сообщение /start (всё как обычно).
Боту вместо этого приходит сообщение /start
Так бот может отреагировать на запуск не как на обычный «/start», а другим способом.
Часто диплинки используются для реферальных программ (в качестве параметра можно передавать id пользователя, который поделился ссылкой). Есть и другие применения.
Прямая ссылка: tg://resolve?domain=examplebot&start=
Инлайн-режим
Инлайн-режим (inline mode) — это специальный режим работы бота, с помощью которого пользователь может использовать бота во всех чатах.
Выглядит это так: пользователь вводит юзернейм бота в поле для ввода сообщения. После юзернейма можно ещё записать запрос (текст до 256 символов).
Появляется менюшка с результатами. Выбирая результат, пользователь отправляет сообщение.
Инлайн-режим можно включить в BotFather, там же можно выбрать плейсхолдер вместо стандартного «Search. «
В группе можно запретить использовать инлайн всем или некоторым участникам. В официальных приложениях Телеграм это ограничение объединено с ограничением на отправку стикеров и GIF.
Результаты инлайн-режима
Результаты можно отображать двумя способами:
Сеткой. Удобно для выдачи картинок.
Вертикальным списком. Удобно для выдачи текста.
Можно совмещать два типа, но корректно отображается это только на Telegram Desktop.
Приватность и геопозиция в инлайне
Когда пользователь вызывает инлайн-режим, бот не может получить никакую информацию о контексте, кроме информации о пользователе. Таким образом, бот не может узнать ни чат, в котором вызвали инлайн, ни сообщение, на которое пользователь отвечает.
Но зато если включить в BotFather настройку «Inline Location Data», то бот сможет видеть геопозицию пользователей, когда они используют инлайн (на мобильных устройствах). Перед этим у пользователей показывается предупреждение.
Inline feedback
Inline feedback — это апдейты о выбранных инлайн-результатах. Включаются через BotFather.
Предполагается использование inline feedback для сбора статистики, но не всегда он используется так. Inline feedback позволяет «подгружать» не все результаты сразу, а только выбранный. Например, если бот используется для поиска музыки, то он может загружать не все песни сразу, а только одну.
Важный момент: если вы получили апдейт об отправке инлайн-сообщения, то вы можете его редактировать, только если к нему прикреплены инлайн-кнопки. (Если кнопок нет, то в апдейте не указывается id инлайн-сообщения, по которому происходит редактирование).
Создание наборов стикеров
Боты (и только боты!) могут создавать наборы стикеров. При этом каждый набор стикеров должен принадлежать какому-то пользователю. Посмотреть свои наборы стикеров пользователь может с помощью бота @Stickers.
Платежи через ботов
Телеграм предоставляет ботам возможность принимать платежи от пользователей. Это делается через провайдеров ЮMoney, Сбербанк, Stripe и ещё 7.
Эта возможность используются редко, потому что для использования провайдеров нужно юридическое лицо.
UPD 26.04.2021. В новом обновлении появилось больше возможностей платежей для разработчиков. Теперь боты могут отправлять платежи не только в лс, но и в группы и в каналы. Это позволяет сделать из канала «витрину», на которой можно сразу купить товар. Вы можете посмотреть, как это выглядит, в официальном демо-канале.
HTML-игры в ботах
Боты могут позволять пользователям играть в HTML5-игры в чатах. Бот может отправлять сообщения-игры или создавать их через инлайн-режим. Как это работает, можно посмотреть на примере официального @gamebot.
Telegram Login Widget
Вы можете добавить на свой сайт авторизацию через Телеграм. Процесс авторизации будет проходить так:
Пользователь должен будет ввести свой номер телефона.
Бот Telegram попросит подтвердить вход.
Пользователь авторизуется и нажимает на «Принять» на сайте.
Telegram Login Widget не связан с Login URL button (см. раздел про кнопки выше), а является его альтернативой.
Разработка ботов
Какие апдейты можно получать
Бот не может получить старые сообщения из чата. Бот не может получить список всех своих пользователей. Все, что может получать бот — это информацию об обновлениях. В этом заключается главная сложность разработки ботов.
Вы можете получать информацию о новых сообщениях в боте и других событиях, но только один раз. Вам придётся самим хранить список чатов, старых сообщений (если это зачем-то нужно) и так далее. Если вы случайно сотрёте/потеряете эту информацию, вы её больше никак не получите.
В Telegram API бот может чуточку больше: он может получать сообщения по id, получать список участников группы и прочее.
Получение апдейтов: Bot API vs Telegram API
Если вы получили апдейт в Bot API, то второй раз вы его уже не получите.
В Telegram API это не так: пользователь может пользоваться мессенджером через несколько клиентов, каждый из которых должен получать апдейты.
Если запустить для одного бота несколько программ на Telegram API, то каждая из них будет получать все апдейты.
Ограничения Bot API не позволяют сделать то же самое.
Лимиты
Конечно, на запросы к серверу существуют лимиты. В Bots FAQ на сайте Telegram названы следующие:
Не больше одного сообщения в секунду в один чат,
Не больше 30 сообщений в секунду вообще,
Не больше 20 сообщений в минуту в одну группу.
Эти лимиты не строгие, а примерные. Лимиты могут быть увеличены для больших ботов через поддержку.
Другие известные ограничения в Telegram собраны на limits.tginfo.me — см. раздел про ботов.
Рассылка по пользователям
Ниже в Bots FAQ сказано, что Bot API не позволяет рассылать сообщения всем юзерам одновременно и что в будущем, может быть, они что-то для этого сделают. И написано это уже несколько лет.
Они советуют растянуть рассылку на длительное время (8-12 часов) и замечают, что API не позволит отправлять сообщения более чем
30 пользователям в секунду.
Смена владельца бота
Осенью 2020 года появилась возможность передавать ботов другому человеку. Это можно сделать в настройках бота в BotFather. Для этого на вашем аккаунте должна быть включена двухфакторная авторизация — не менее, чем за 7 дней до передачи. Передать бота можно только пользователю, который что-либо ему писал.
Локальный сервер Bot API
Также осенью 2020 года исходники Bot API выложили на GitHub. Теперь вы можете поднять собственный сервер Bot API. На GitHub перечислены следующие преимущества:
Скачивание файлов с сервера без ограничения (ограничение на отправку файлов пользователями в Телеграме — 2 ГБ),
Загрузка файлов на сервер до 2000 МБ,
Загрузка файлов на сервер с помощью локального пути и URI файла,
Использование HTTP URL для вебхука,
Использование любого локального IP-адреса для вебхука,
Использование любого порта для вебхука,
Возможность увеличить максимальное число соединений до 100000,
Получение локального пути файла вместо загрузки файла с сервера.
Юзерботы
В начале статьи я рассказывал о том, что такое Telegram API и Telegram Bot API.
Telegram API используется не только для ботов — тогда в чём проблема управлять аккаунтами пользователей, как ботами? Люди это делают. Кто-то автоматически ставит текущее время себе на аватарку, кто-то скриптом реагирует на свои сообщения как на команды, кто-то сохраняет сообщения из публичных групп и каналов. Всё это называют юзерботами.
Юзерботов следует использовать аккуратно: за большую подозрительную активность аккаунт могут ограничить или забанить.
Заключение
Я постарался собрать в одном месте и структурировать информацию о всех возможностях Телеграм-ботов. Большое спасибо vanutp, NToneE и Grinrill за помощь с фактами. Если мы что-то забыли — пишите, исправлю.
Я специально не разделял большую статью на несколько постов, чтобы можно было быстро найти нужную информацию. К тому же, в начале статьи есть её содержание. Так что можете сохранить её к себе и использовать как справочник 🙂
Вообще интерфейс бота (то есть интерфейс чата) имеет много ограничений. Но плохо ли это? Действительно удобнее использовать инструмент, когда это часть привычной среды. Я часто прямо в переписке нахожу нужную картинку или информацию с помощью инлайн-ботов. Как заядлый пользователь Телеграма, я люблю использовать ботов. И создаю ботов. И вы создавайте.