Telegram api — как работать и для чего это нужно

Я пиарюсь

image

Начнем с того, что у Telegram действительно полностью открытый клиентский код. К сожалению, мы не видим комиты каждый день прямо на GitHub, но у нас есть код под открытой лицензией. Архитектура Telegram подразумевает, что и Bot и API имеет практически такие же методы — https://core.telegram.org/methods.

На самом деле, Telegram представляет не просто чат-мессенджер, а социальную платформу, доступ к которой открыт для разного рода приложений. Они могут предоставлять дополнительные фишки пользователям, взамен используя готовую сеть пользователей и сервера для доставки сообщений. Звучит настолько привлекательно, что нам захотелось попробовать написать своего “клиента” для Телеграм.

Суть приложения

В основном мы занимаемся картами и навигацией, поэтому мы сразу смотрели что-нибудь связанные с геолокацией. Мне очень понравилось, что в Telegram, раньше всех остальных приложений, появился удобный способ делится местоположением в реальном времени (https://telegram.org/blog/live-locations) и я достаточно часто этим пользуюсь: помочь сориентироваться другу, показать дорогу и самое главное ответить на главный вопрос “Когда ты будешь?”. В принципе, этого хватает большинству людей, но как всегда есть сценарии, когда простых возможностей не хватает. Например, это может быть группа более 10 человек, с разными устройствами (некоторые устройства возможно не являются телефонами) и разными людьми. Этим людям было бы удобно обмениваться сообщениями в группе, а также видеть перемещения друг друга на карте.

Во главу угла мы поставили задачу создать дополнительную ценность для Telegram, а не пытаться использовать его не по назначению. Мы не хотели, чтобы люди у которых нет специального клиента Телеграм, видели в чате месиво сообщений или что-то невразумительное. У людей с “улучшенным” клиентом, появляются же дополнительные возможности, например:

  1. Более тонкое управление временем при отправке локации в реальном времени в чат.
  2. Просмотр местоположения контактов на карте.
  3. Подключение к чату маячковых устройств, через внешний API (Bot).

Как мы это делали

К счастью, весь код, который мы пишем — Open-Source, поэтому я сразу могу дать ссылку на его реализацию — Реализация Bot и Реализация Telegram Client на Kotlin.

Bot — основы
   // Gradle implementation "org.telegram:telegrambots:3.6"    TelegramBotsApi telegramBotsApi = new TelegramBotsApi();    telegramBotsApi.registerBot(new TelegramLongPollingBot() {...});

Основная особенность передачи location, что его надо часто обновлять, и боту необходимо редактировать уже отправленные сообщения. Если бы не было такой возможности, то Bot бы просто заспамил чат и это, конечно, был бы Epic Fail. Слава богу, Telegram предоставляет права боту редактировать сообщения на протяжении 24 часов (минимум, возможно и дольше).

Передать сообщение можно многими способами. Есть тип Plain Text, Venue, Location, Game, Contact, Invoice и т.д. Казалось, что для нашей задачи отлично подходит Location, но вскрылась неприятная особенность. Location можно передать только с одного устройства для одного аккаунта или бота одновременно! Представьте у вас 2 телефона и с двух телефонов вы отправили свой Location в один чат. Так вот, на сервере случится ошибка и первый Location Sharing просто остановится. Казалось бы, это явно неральный случай, но представьте, у вас много китайских маячков, которые умеют отправлять Location по заданному URL, но они не умеют отправлять прямо в Telegram. Вы пишите Bot, который забирает с сервера и пушит в телеграм. Вот тут и вылазит, то что Bot не сможет отправить больше одного сообщения маячка с типом Location. Получается, это отлично подходит для единоразовой отправки, но не подходит для Live Location.

Решение простое — отправлять текстовые сообщения, а клиент будет парсить текст и показывать локации на карте. К сожалению в стандартном клиенте Telegram будут видны только текстовые сообщения, но там можно вставить ссылку, чтобы открыть карту.

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

К сожалению, Bot пришлось переписывать аж 2.5 раза. Основная проблема — неправильный дизайн коммуникации.

  1. Почему-то вначале казалось хорошей идеей, если бот будет полноценным участником чата и отправлять сообщения. Но, это плохо и с точки зрения Privacy переписки и с точки зрения взаимодействия с ботом. Правильное решение, использовать Inline bots. Таким образом, гарантируется, что бот не видит ничего кроме своего Location и его можно использовать в любом чате. По-человечески говоря, некультурно тащить своего бота в какой-то общий чат, а нужно пообщаться с ботом один на один и настроить его, а дальше он сможет отправлять нужные сообщения в любой выбранный чат.
  2. В Telegram Message API есть исторически 2 типа взаимодействия: кнопки под текстом ( (inline buttons)[https://core.telegram.org/bots/2-0-intro#switch-to-inline-buttons] ) и ответы боту напрямую текстом. В общем, ответы с ботом безнадежно устарели. Кнопки немного сложнее с точки зрения реализации, но это полностью окупается удобством использования и именно их надо использовать для всего нетекстового ввода.
  3. В качестве примера бота можно посмотреть популярный @vote_bot или наш @osmand_bot.
Telegram Client

Найти примеры готовых telegram client, кроме основного, нам не удалось, но достаточно простая структура tdlib помогла нам создать базовый клиент буквально за пару дней.

Настройка Gradle:

task downloadTdLibzip {     doLast {         ant.get(src: 'https://core.telegram.org/tdlib/tdlib.zip', dest: 'tdlib.zip', skipexisting: 'true')         ant.unzip(src: 'tdlib.zip', dest: 'tdlib/')     } }  task copyNativeLibs(type: Copy) {     dependsOn downloadTdLibzip     from "tdlib/libtd/src/main/libs"     into "libs" }  task copyJavaSources(type: Copy) {     dependsOn downloadTdLibzip     from "tdlib/libtd/src/main/java/org/drinkless/td"     into "src/org/drinkless/td" } dependencies {     implementation fileTree(dir: 'libs', include: ['*.jar']) }

Практически все внутренности Телеграмма написаны на С++ и с точки зрения Android виден только класс API на 1.5 Мб прокси методов TdApi.java. Путем сопоставления документации ботов и названия методов, можно достаточно просто сориентироваться куда двигаться.

Инициализация клиента с global handler:

fun init(): Boolean {     return if (libraryLoaded) {         // create client         client = Client.create(UpdatesHandler(), null, null)         true     } else {         false     } }

Запрос фото пользователя:

private fun requestUserPhoto(user: TdApi.User) {     val remotePhoto = user.profilePhoto?.small?.remote     if (remotePhoto != null && remotePhoto.id.isNotEmpty()) {         downloadUserFilesMap[remotePhoto.id] = user         client!!.send(TdApi.GetRemoteFile(remotePhoto.id, null)) { obj ->             when (obj.constructor) {                 TdApi.Error.CONSTRUCTOR -> {                     val error = obj as TdApi.Error                     val code = error.code                     if (code != IGNORED_ERROR_CODE) {                         listener?.onTelegramError(code, error.message)                     }                 }                 TdApi.File.CONSTRUCTOR -> {                     val file = obj as TdApi.File                     client!!.send(TdApi.DownloadFile(file.id, 10), defaultHandler)                 }                 else -> listener?.onTelegramError(-1, "Receive wrong response from TDLib: $obj")             }         }     } }
Telegram Client — подводные камни
  1. Регистрация/Login и Logout. При регистрации необходимо учесть разные сценарии: когда код доступа присылается SMS или в другой телеграм клиент, двухфакторную авторизацию и т.п. Самая большая сложность — это тестирование. Любая авторизация более 3-х раз вела к блокировке аккаунта на 24 часа, поэтому тестировать Logout было особенно весело. Несмотря на то, что регистрация нужна всего лишь один раз, наверное это самая сложная часть интеграции.
  2. Определить как и в каком порядке вычитывать сообщения. Любой клиент имеет доступ ко всем сообщениям во всех чатах, но вычитывать их надо последовательно. В нашем случае 99% сообщений нужно отбрасывать. Сначала мы почему-то сделали чтение всех сообщений за последние 3 дня при логине, но в дальнейшем это только вызвало проблемы и при рестарте у нас пропадали сообщения. Поэтому сейчас мы читаем только новые сообщения, а для тех сообщений, что нам нужны сохраняем id во внутренней БД.

Что получилось

Наверное, зная все подводные камни можно было бы все сделать в разы быстрее, но получилось где-то 1-2 месяца на трех человек. Финальное приложение можно найти в Google Play.

image

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

Буду рад ответить на ваши вопросы.

Боты «Телеграма» быстро вошли в жизнь почти каждого человека. Они делают общение в приложении легким и интересным.

Существующие боты работают на разных операционных системах. Сегодня поговорим о телеграм api.

Содержание

Языки программирования

Система «Эйпи» может работать на большом количестве языков программирования.

Пользователи, работающие с «Джава скрипт», могут применять Node.js Telegram Bot «Апи». Программа требует определенных умений. Одного знания программирования недостаточно.

Популярный язык для использования телеграм «Апи» – PHP. Язык логичен и специализирован для работы в web-среде.

Для работы Client «Апи» часто применяется Python (обладает высоким уровнем производительности).

Классический вариант api token на telegram – С++. Данный язык сложен, имеет огромное количество нюансов. Он является базой для большинства языков программирования. Находящиеся в нем инструменты позволяют работать с зеркалом, ключами (key), hash. Используемые при работе токены имеют дополнительную защиту, что важно для большинства абонентов.

Особенности работы с Bot API

Работа с помощником «Эйпи» имеет ряд особенностей, к которым можно отнести:

  1. Использование домена верхнего уровня – org.
  2. Обход блокировки.
  3. Плотная связь с прокси-сервером.

Указанные выше особенности являются основным отличием от работы с другими помощниками.

Пример использования бота

Кроме использования объектов, «Апи» имеет и другой набор функций, позволяющий выполнять отправку файлов, сообщений, стикеров в канал «Телеграм» и в личную переписку.

Для того чтобы создать робота в «Телеграме», следует воспользоваться сервисом @Botfather.

Процесс имеет такую поочередность:

  1. Зайдите в вышеуказанное приложение и пропишите /newbot.
  2. Введите имя бота и пользователя. Первое должно заканчиваться приставкой «bot».
  3. После получения token можно приступить к авторизации.
  4. Для запуска созданного робота нажмите кнопку /start.

Рассмотрим пример функционирования бота. Простой способ проверить робота – использовать location браузер. Для этого необходимо зайти в web-версию помощника и набрать следующую команду в браузере:

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

Используемые в коде значения chat»:{«id являются идентификаторами чата.

Далее прописываем:

В браузере отобразится строка:

Теперь приветствие отображается в чате мессенджера.

Как видите, создание «Эйпи» бота «Телеграм» с нуля – легкий процесс. Для его выполнения необходим минимальный запас знаний и желание. Если после прочтения статьи у вас остались вопросы, то рекомендуем купить пособие или узнать интересующую информацию в интернет.

Детальная инструкция видна на видео:

Часто в интернете вы встречаете непонятные сочетания английских символов, о которых все говорят в положительном ключе. К примеру, как можно понять рассуждения о каком-то telegram bot api, да еще и понимать, что значит фраза: «Зачем его написали на c#, лучше бы на delphi?». Впрочем, данная статья решит ваши проблемы и поможет вам быть в теме: не углубляясь в программистские дебри, мы сейчас все объясним.

План статьи:

Что такое telegram api

Для начала мы поговорим о том, что вообще скрывается под этой аббревиатурой. Чтобы вам было понятнее, сначала мы углубимся в истоки истории программирования. Когда-то давным-давно код писался полностью с нуля. То есть, для того, чтобы программа просто показала пользователю какое-то слово, разработчик должен был вручную написать это на машинном языке, используя только 0 и 1.

Конечно, всегда так продолжаться не могло, поэтому однажды было решено автоматизировать весь этот процесс, создав библиотеки со встроенным набором функций. То есть, для вывода «Привет» разработчик должен был просто написать «cout << “Привет”», а подключенный им файл сам переводил это в последовательность нулей и единиц.</p>

Осознав, что это довольно удобно, разработчики ввели понятие «API» ― встроенного интерфейса, позволяющего посылать операционной системе, компьютеру или еще чему-то команды на понятном для него языке. API автоматизировали создание игр или написание офисных программ, делая, к примеру, наложение текстуры на объект более простым.

Примером API может служить всем известный 1С

Для чего нужен телеграмм API

Теперь, когда вы поняли саму суть этого, перейдем к более конкретному примеру. А именно ― к интерфейсу ботов для телеграмм.

Client API в Telegram

29 марта 2022 violet

Большинство современных мессенджеров предоставляют своим пользователям API, предназначенные для различных задач. На примере Telegram посмотрим, как работать с API, что они умеют и чем могут быть полезны.

Если вы не зарегистрированы в Telegram — самое время зарегистрироваться. Вы можете не пользоваться аккаунтом в повседневности, но для учёбы он необходим. Возможно, вам будет удобно работать через десктопную версию приложения, её можно скачать с официального сайта: https://telegram.org/.

API в Telegram

У мессенджера Telegram есть два API — Bot API и Client API.

  • Bot API предназначен для работы с ботами.
  • Client API позволяет управлять вашим аккаунтом: отправлять от вашего имени сообщения, вступать в группы или изменять информацию в своём профиле.

Начнём с Client API.

Управление аккаунтом через Client API

Для работы с Client API необходима аутентификация по токену, получить его можно на специальном сайте Telegram.

Получение токена для Client API

Зайдите на https://my.telegram.org и введите номер телефона, привязанный к вашему аккаунту:

Запустите Telegram: вам придёт код подтверждения для сайта, введите его в поле на сайте и нажмите кнопку Next.

В открывшемся окне нажмите на ссылку API development tools и введите данные для создания нового приложения. Заполните как минимум поля App titleShort name и укажите платформу: Web.

В следующем окне скопируйте и сохраните значения api_id и api_hash.

Готово! Эти идентификаторы вы перенесёте в код, они будут передаваться в Client API с каждым вашим запросом — и Client API опознает вас как владельца определённого аккаунта.

Программный клиент Telegram

Отправлять запросы к Client API можно через ваш Telegram-клиент на телефоне или на компьютере или через программный клиент.

Для работы с Client API существует несколько популярных Python-библиотек, которые эмулируют работу приложения. С чем-то подобным вы сталкивались в теме «Тестирование Django»: класс Client() в тестах эмулировал работу браузера, отправляя запросы и получая ответы от сервера.

Для создания программного клиента возьмём библиотеку pyrogram.

Создайте директорию /client_api, перейдите в неё, установите и активируйте виртуальное окружение, установите библиотеку pyrogram:

mkdir client_api  # Создаём директорию cd client_api  # Переходим в эту директорию python3 -m venv venv  # Создаём виртуальное окружение . venv/bin/activate  # Активируем виртуальное окружение                       # Для Windows команда source venv/Scripts/activate pip3 install pyrogram  # Устанавливаем библиотеку 

Создайте и откройте файл /client_api/main.py в текстовом редакторе, перенесите в него код:

from pyrogram import Client  api_id = <Ваш api_id> api_hash = "<Ваш api_hash>"  with Client("my_account", api_id, api_hash) as app:     # Первый параметр метода send_message — id (int) или имя (str) того пользователя,     # которому будет отправлено сообщение.     # Зарезервированное слово "me" означает ваш собственный аккаунт.     app.send_message("me", "Привет, это я!") 

Сохраните файл и запустите его:

python3 main.py 

При первом запуске программы в командной строке будет запрошен номер телефона, на который зарегистрирован ваш Telegram-аккаунт. Введите номер в консоль, после этого на телефон или в Telegram придёт проверочный код. Скопируйте этот код и вставьте в командную строку. Эта процедура выполняется только один раз, после этого приложение будет зарегистрировано.

Из вашего приложения будет отправлено сообщение."me" — это зарезервированное слово, заменяющее ID аккаунта, для которого выдан токен. Следовательно, сообщение будет отправлено из вашего аккаунта в ваш аккаунт; оно отобразится во вкладке «Избранное» в вашем мессенджере.

Если изменить "me" на ID аккаунта вашего друга в Telegram, то сообщение уйдёт ему.

Получить ID по имени пользователя можно у справочного Telegram-бота @userinfobot. Чтобы найти этого бота, введите его имя в окно поиска над списком контактов в вашем мобильном или настольном клиенте Telegram.

Начните диалог с ботом: нажмите кнопку Start.

Для начала бот отправит вам информацию о вашем аккаунте: ID, имя (то, что указано в полях First и Last name) и язык.

Перешлите ему любое сообщение от человека, ID которого вам нужен. Чтобы переслать чьё-то сообщение — кликните по нему правой кнопкой мыши (если Telegram установлен на компьютере) и выберите вариант «Переслать сообщение» (Forward Message). Затем укажите, что сообщение следует переслать боту @userinfobot.

Если Telegram запущен на мобильном устройстве — вызовите меню долгим нажатием на сообщение и проделайте всё то же самое.

В ответ бот отправит информацию о пользователе: ID, имя (First name) и фамилию (Last name).

Список всех доступных методов библиотеки pyrogram доступен в документации.

Не увлекайтесь рассылкой сообщений через бота: в Client API есть лимит по количеству запросов. Если вы будете слишком часто отправлять сообщения, Telegram может принять вас за злоумышленника-спамера и забанить, лишить доступа к сервису. Telegram не раскрывает точных ограничений.

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

Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Шукюров Заур, разработчик @KinomanBot и @GaidarForum_bot, написал руководство по созданию простого чат-бота.

24 июня 2015 года разработчики Telegram открыли платформу для создания ботов (программ, которые выполняют определенные действия по заданному алгоритму). За полтора года работы платформы набралось много интересных чат-ботов, решающих множество проблем и позволяющих с пользой провести время в мессенджере.

Шаг 1: регистрация бота у @BotFather

Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» — @BotFather, чтобы получить токен (ключ) для работы с Telegram API. Регистрация проходит в 5 простых этапов:

  1. Открываете чат с @BotFather.
  2. Вводите или выбираете из списка команду /newbot.
  3. Отправляете желаемое название для бота.
  4. Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». Например, NetologyRSSbot.
  5. По желанию можно сразу настроить полное или краткое описание, список команд и аватарку.

image

Результаты

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

Благодаря удобному API, боты Telegram могут стать хорошей платформой для автоматизации рутинных действий, настройки уведомлений, удобному и быстрому получению информации и созданию игр. Бесплатными площадками для продвижения могут послужить каталоги ботов Telegram Bot Store, TeleChappy или 50bots. А анализировать активность пользователей можно с помощью бесплатного инструмента для аналитики ботов от Яндекса — Botan.

От редакции

PHP — один из самых популярных языков программирования. Его легко изучать, с ним легко работать, у него мощное сообщество. 5 мая «Нетология» запускает курс «PHP/SQL: back-end разработка и базы данных», где ведущие программисты расскажут об управляющих конструкциях, циклах, функциях, о строках и массивах. Вы узнаете все про реляционные базы данных и язык запросов SQL, научитесь устанавливать и настраивать веб-сервер nginx и php, управлять базами данных различной сложности. Ждем вас!

Оцените статью

Средняя оценка 3.3 / 5. Всего проголосовало 7

Темы: программирование

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий