Ядро плагина   [Telegram] Core 1.1.1

Эта заметка не про Bot API, а про Core API Telegram, с помощью которого можно создавать полноценные клиенты для месседжера, и конечно же любой другой софт, например для сбора данных из Телеграма. Основная проблема заключается в том, что общение с серверами Telegram осуществляется по специальному протоколу разработанным внутри компании — MTProto. Именно благодаря этому протоколу данный месседжер и славится своей безопасностью и шифрование данных.

Вас мучают вопросы: как использовать Telegram Api на PHP? Как вызывать функции? Очень много примеров использования telegram api для бота, а как использовать обычное api telegram? Зарегистрировал приложение, получил api_id и api_hash, как получить все сообщения из телеграм-канала? https://core.telegram.org/method/messages.getHistory Как вызвать этот метод? Как реализовать авторизацию с помощью API Telegram? Тогда эта статья для вас! Естественно, разбирать нюансы протокола MTProto в данной заметке я не буду. Для работы с ним буду пользоваться PHP-библиотекой MadelineProto, доступной всем желающим на GitHub. Однако, нельзя просто так взять и воспользоваться библиотекой. Есть как минимум три нюанса, которые нужно решить.

Подготовка к установке MadelineProto

Во-первых, нужен установленный Python, будет достаточно версии 2.7.

Во-вторых, библиотека не помечена как стабильная, поэтому для подключения её через composer к существующему проекту нужно немного отредактировать composer.json:

"minimum-stability": "dev",

Для того, чтобы composer не ругался на отсутствие стабильных версий зависимостей. Без указания этой директивы во время установки библиотеки будет получена примерно такая ошибка:

Your requirements could not be resolved to an installable set of packages.    Problem 1   - Installation request for danog/madelineproto ^2.0 -> satisfiable by danog/madelineproto[2.0].   - danog/madelineproto 2.0 requires danog/primemodule dev-master -> satisfiable by danog/primemodule[dev-master] but these conflict with your requirements or minimum-stability.      Installation failed, reverting ./composer.json to its original content.

Затем нужно указать git-репозиторий библиотеки:

"repositories": [      {          "type": "git",          "url": "https://github.com/danog/phpseclib"      }  ],

и только затем можно устанавливать саму либу:

composer require danog/madelineproto

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

github Failed to clone via https, ssh protocols, aborting.
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

То вам нужно обновить версию git.

Регистрация приложения для Telegram API

Теперь нужно зарегистрировать приложение в разделе API development tools и получить App api_id и App api_hash.

Как правильно использовать MadelineProto с Laravel

В-третьих, на сегодняшний день (2017-02-10) мне не удалось запустить MadelineProto из коробки, т.к. начинали сыпаться ошибки типа:

DataCenter: Connecting to DC 2 (main server, ipv4, tcp_full)...  Exception: stream_set_timeout() expects parameter 1 to be resource, null given in Socket.php:153  DataCenter: Connection failed, retrying connection on port 443...  Exception: stream_set_timeout() expects parameter 1 to be resource, null given in Socket.php:153  DataCenter: Connection failed, retrying connection on port 80...  Exception: stream_set_timeout() expects parameter 1 to be resource, null given in Socket.php:153  DataCenter: Connection failed, retrying connection on port 88...  Exception: stream_set_timeout() expects parameter 1 to be resource, null given in Socket.php:153  DataCenter: Connection failed, retrying connection on port 443 without the proxy...  Exception: stream_set_timeout() expects parameter 1 to be resource, null given in Socket.php:153  DataCenter: Connection failed, retrying connection on port 80 without the proxy...  Exception: stream_set_timeout() expects parameter 1 to be resource, null given in Socket.php:153  DataCenter: Connection failed, retrying connection on port 88 without the proxy...  Exception: stream_set_timeout() expects parameter 1 to be resource, null given in Socket.php:153  Exception: Undefined offset: 2 in MsgIdHandler.php:77  CallHandler: An error occurred while calling method help.getNearestDc: Undefined offset: 2 in MsgIdHandler on line 77. Recreating connection and retrying to call method...  Exception: Undefined offset: 2 in MTProto.php:641    In MTProto.php line 641:    Undefined offset: 2

На самом деле здесь нет ничего фатального, просто фреймворк Laravel по-умолчанию перехватывает все ошибки и при отсуствии должных обработчиков завершает скрипт даже при наличии не критичных ошибок. Возможно такое поведение присутствует и в других фреймворках. Можно изменить уровень ошибок, добавив в метод AppProvidersAppServiceProvider::boot() строку:

error_reporting(0);

Но тогда есть вероятность пропустить некритичные ошибки своего приложения.

Вторым способом устранения ошибок будет правка исходника /vendor/danog/madelineproto/src/danog/MadelineProto/Connection.php, а именно нужно закомментировать 3 строки в конструкторе в условии

case 'tcp_full':
//                $this->sock->setOption(SOL_SOCKET, SO_RCVTIMEO, $timeout);  //                $this->sock->setOption(SOL_SOCKET, SO_SNDTIMEO, $timeout);  //                $this->sock->setBlocking(true);

В коммите 56c0d431768c04009ae9aa3151715b5e6399ec4d эти строки находятся на 105-107 строках файла. Источник проблемы был найден с помощью отладчика xDebug. Проблема заключалась в том, что методы $this->sock->setOption() и  $this->sock->setBlocking() пытались работать с ещё не созданным объектом $this->sock->sock. Если у вас возникнут другие ошибки, то с помощью отладчика вы их легко обнаружите и исправите.

Также в библиотеку могут быть зашиты устаревшие или не актуальные IP-адреса серверов Телеграма. Их всегда можно посмотреть на странице API development tools и передать в ModelineProto через конструктор danogMadelineProtoAPI().

Список всех параметров которые можно изменить в этой библиотеке можно посмотреть в массиве $default_settings метода danogMadelineProtoMTProto::parse_settings().

В идеале нужно зарегистрировать для приложения новую чистую учётную запись, но для тестирования и отладки вполне сгодится любая уже имеющаяся учётка Телеграма.

Пример работы MadelineProto на Laravel

Как делать запросы к Telegram API на PHP?

Приведу простой пример кода на базе консольной команды для Laravel:

public function handle() {            // Если файл с сессией уже существует, использовать его          if(file_exists( env('TELEGRAM_SESSION_FILE') ) ) {              $madeline = new API( env('TELEGRAM_SESSION_FILE') );          } else {          // Иначе создать новую сессию              $madeline = new API([                  'app_info' => [                      'api_id' => env('TELEGRAM_API_ID'),                      'api_hash' => env('TELEGRAM_API_HASH'),                  ]              ]);                // Задать имя сессии              $madeline->session = env('TELEGRAM_SESSION_FILE');                // Принудительно сохранить сессию              $madeline->serialize();                // Начать авторизацию по номеру мобильного телефона              $madeline->phone_login( env('TELEGRAM_PHONE') );              // Запросить код с помощью консоли              $code = readline('Enter the code you received: ');              $madeline->complete_phone_login($code);          }            $messages = $madeline->messages->getHistory(['peer' => '@ANY_CHANNEL_ID', 'offset_id' => 0, 'offset_date' => 0, 'add_offset' => 0, 'limit' => 10, 'max_id' => 0, 'min_id' => 0, 'hash' => 0, ]);            foreach($messages['messages'] as $msg) {              dump($msg);          }        }

Для тех, кто не умеет в Laravel, кратко поясню. Вызовы env() — это запросы значений из файла конфигурации, можно заменить их на константы или захардкодить. Собственно:

TELEGRAM_SESSION_FILE — любое значение, которое можно использовать в качестве имени файла.

TELEGRAM_API_ID и TELEGRAM_API_HASH — Данные из API development tools.

TELEGRAM_PHONE — мобильный номер существующий учётки, например, +7XXXXXXXXXX.

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

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

API: Running APIFactory...  API: MadelineProto is ready!  API: Serializing MadelineProto...  Login: Sending code...  Login: Code sent successfully! Once you receive the code you should use the complete_phone_login function.  Enter the code you received: ...  Login: Logging in as a normal user...  MTProto: Trying to copy authorization from dc 2 to dc 1  MTProto: Trying to copy authorization from dc 2 to dc 3  MTProto: Trying to copy authorization from dc 2 to dc 4  ResponseHandler: Parsing updates received via the socket...

После чего можно полноценно использовать все возможности Telegram Core API, например,  $messages = $madeline->messages->getHistory().

Данный метод возвращает сообщения из канала в обратном хронологическом порядке, т.е. начиная с самых свежих. Подробнее о параметрах этого метода можно узнать на страницах официальной документации MadelineProto. Заметьте, параметры MadelineProto могут отличаться от параметров официальной документации самого Telegram.

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

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

Сервис API Telegram

Сервис api telegram org создан для разработчиков, которые хотят написать собственные приложения на основе мессенджера. Исходные кодировки каждого абонента имеют открытый доступ, поддерживают все принципы безопасности. Для начала работы с «Эйпи» следует выполнить регистрацию приложения и разработчика.

Что такое Telegram API Bot

Telegram API Bot.

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

Telegram api бот – это небольшая утилита для программирования собственного bot api. Поддерживает русскоязычный клиент.

Если «Апи» – это встроенный интерфейс для взаимодействия приложения и ОС, то Telegram API позволяет посылать команды «Телеграма» компьютеру на понятном языке.

Предназначение

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

Боты telegram на «Эйпи» могут выполнять следующие операции:

  1. Работать с документацией.
  2. Посылать и получать файлы от других роботов или клиентов.
  3. Скачивать видео, фильмы, музыку, книги.
  4. Отправлять, принимать message.
  5. Загружать фото, видео, аудиокниги.

Элементы управления

Робот «Телеграм» API имеет простые элементы управления, представляющие собой объекты JSON. Проще говоря, они выражаются в виде заданных по неким правилам строк. Применение такого алгоритма позволяет выполнять быстрый обмен данными. Он достигается путем использования набора «ключ:значение».

Управление может осуществляться по следующим методам:

  1. Получение информации и поиск обновлений.
  2. Работа в чате.
  3. Передача разнообразных элементов.
  4. Написание и отправка сообщений.
  5. Обновление базы онлайн флибусты.
  6. Online режим.
  7. Работа с платежной информацией, расчетными операциями (обменник, расчетные безналичные и наличные операции).

Telegram bot api на языке русском пока не создан. Используемый браузером стандартный перевод справляется с поставленной задачей.

Обмен сообщениями

Отправка сообщения ботом «Апи» не представляет никакой сложности. Для этого следует прописать всего пару команд.

Порядок выполняемых действий:

  1. Импортируем контакт по имени пользователя или номеру телефона.
  2. Отправляем сообщение.

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

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

Пользователи, работающие с «Джава скрипт», могут применять 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 api в основном может определяться огромным количеством различных ботов – сервисных ботов. Их может лично формировать каждый желающий человек, с программой среднего уровня. У бота программы телеграмм много уникальных способностей, которые осуществляют разные команды по умолчанию. Пользователи могут в любое время начать общение из поля вводы чата. Для этого набирается бот и запросный режим для необходимого поиска. После получения запроса, робот возвращает какие-либо результаты. Как только человек нажимает на бота, сразу отправляется в чат, кроме того можно после добавления участников в группу api, telegram.

Описание телеграмм

Аpi telegram org bot называют функционирующий интерфейс, который позволяет сделать программу собственного робота. Туда входят различные командные коды, а также документация telegram api, которые предназначаются для того, чтобы установить функции робота org. Если использовать интерфейс приложения, любой пользователь сможет формировать личные программы с кодами, которые при запуске в id telegram api будут функционировать как боты org.

opisanie-telegramm.png

Элементы управления

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

Приведем несколько примеров ниже:

  1. sendMessage — для получения сообщения.
  2. sendVideo – для отправления видео.
  3. sendAudio – для отправления аудиозаписи.

Все элементы управления делятся на категорию групп для:

  • Получения обновления и информационных запусков.
  • Общения в чате.
  • Отправки разнообразных элементов.
  • Функции с наклейками.
  • Обновления текстовых сообщений.
  • Платежного функционала.
  • Игр и развлекательных порталов.

Важно! Полная документация приложения пока на нашем отечественном языке отсутствует. Однако можно надеяться на обычный перевод в браузере Google, который прекрасно справляется со своей поставленной задачей.

elementy-upravleniya.png

Создание робота в телеграм

Можно организовывать командные тексты в соответствующей системе с использованием установщиком. Для поиска работы нужно ввести go telegram bot api. Для создания имеется сервисная система @Botfather. Если зайти туда, то можно увидеть много командного набора, благодаря которых можно создать новый робот. Для того чтобы построить нового робота в приложении, первоначально набирается команда с названием — newbot. Далее ввести имя для клиента, которое в обязательном порядке должно оканчиваться на «бот».

После чего присылается индетифкаторный токен, в результате чего создается новейший установщик. Авторизировать его можно только через токен. Далее запускается программный режим в портале. Клиент находит своего установщика и нажимает на кнопку в виде старта, что далее запускает определенную командную строку. Далее будут зарезервированы соответствующие командные строки под наименованием settings и /help. Для обхода блокировки api, его, необходимо подключить к SOCKS5 прокси, подставить рабочий прокси в адрес и, если нужны, то данные, а также свой запросный вопрос.

Кроме того, можно сделать зеркало api telegram org, простым способом сделав зеркало без фактического перехода клиента на него, без переадресации. Например, он переходит по ссылке, а сервисная программа будет пересылать запрос на другой сервис. Далее получить отклик от сервисного центра данных, что предпосылает клиенту, который сделал поначалу запрос.

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

Что же такое чат бот telegram api javascript? Онлайн сервис может поддерживаться различными языками для сервисных программных режимов, что позволяет сделать выбор любому человеку. Клиенты JavaScript, которые любят общаться в чате бота telegram api используют Node.js python telegram bot api.

Важно! Здесь необходимо знать не только язык, но и уметь обращаться с фреймворком, превращающий в стиль в интерфейс системы.

Один из известных для написания бота с использованием системы является PHP. Этот язык управления предназначается для того, чтобы создать серверные приложения. Язык простой, логичный и специализированный для web-портала. С поддержкой инструментов можно осуществлять всякие системы.

Можно создать следующие командные режимы:

  • Telegram bot api php sdk.
  • Using telegram api.
  • Node js telegram bot api.
  • Core telegram org bots api.
  • Connection to api telegram org timed out , при этом важно изучить официальную документацию, а не сам наборный пакет.

Отправка текстов в системе

Общаясь с другим человеком можно быть уверенным, что робот даст глубокую информацию о сборе отклика во внешнем сервисе в основном извещении. Чтобы отправить оповещение через браузер, с поддержкой curl и из Bash-скрипта. Чтобы сделать отправку сообщений telegram api через браузер, необходимо просто открыть URL:

Начнем с того, что у 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.

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

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

Развитие Телеграмм во многом определяется наличием большого числа ботов – небольших сервисных программ-роботов. Их может создать каждый пользователь, знакомый с программированием на среднем уровне. Telegram API Bot – это программный интерфейс, позволяющий программировать собственного бота.

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

Элементы управления

api-bot.jpg

В Бот Телеграмм API все элементы управления представляют собой объекты, которые представлены в JSON, то есть в виде строки, заданной по определенным правилам. Это позволяет производить обмен данными по сети максимально быстро и наименее затратно, так как передается не программный код, а набор пар «ключ:значение» в текстовом виде. В таблице приведены все типы API. Большая часть объектов предназначена для создания команд бота. Ключи дадут более расширенное представление о возможностях объекта.

Название Описание Ключи
User Пользователь в Телеграмм
Chat Чат
Message Сообщение
MessageEntity Отдельная сущность в текстовом сообщении (хештег, ссылка и пр.)
PhotoSize Изображение заданного размера или превью фото, файла или стикера
Audio Аудиозапись
Document Любой файл, не являющийся изображением, аудиозаписью или голосовой записью
Sticker Стикер
Video Видеозапись
Voice Голосовое сообщение
Contact Телефонный контакт
Location Точка на карте
Venue Объект на карте
UserProfilePhotos Фото профиля пользователя
File Готовый к загрузке файл
ReplyKeyboardMarkup Клавиатура с возможностью ответа
KeyboardButton Кнопка клавиатуры для ответа
ReplyKeyboardHide Заменяет клавиатуру бота на стандартную клавиатуру Telegram
InlineKeyboardMarkup Встроенная клавиатура, появляющаяся под сообщением inline_keyboard
InlineKeyboardButton Одна кнопка на встроенной клавиатуре
CallbackQuery Входящий запрос обратной связи для встроенной кнопки с заданным параметром callback_data
ForceReply Эмулирует действия пользователя: выбор сообщения и нажатия кнопки «Ответить»
ResponseParameters Сообщает, почему запрос не выполнился успешно

Результирующие строки, которые присылает мессенджер, представлены в виде тех же объектов API.

Обмен сообщениями происходит в виде запросов. В следующей таблице приведены примеры некоторых из них.

Метод Действие
getMe Позволяет получить информацию о пользователе
sendMessage Отправляет сообщение
sendPhoto Отправляет фото
sendAudio Отправляет аудио
sendDocument Отправляет документ
sendVideo Отправляет видео
sendContact Отправляет контакт
getUpdates Получает обновления из чата

Все методы (а их достаточно много) делятся на группы:

  1. Получение обновлений и информации.
  2. Работа в чате.
  3. Отправка различных элементов.
  4. Работа со стикерами.
  5. Обновление сообщений.
  6. Режим inline.
  7. Платежный функционал.
  8. Для игр.

Полной документации Telegram Bot API на русском пока не существует. Однако стандартный перевод в браузере Google Chrome прекрасно справляется с задачей.

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

Telegram API поддерживается множеством языков программирования. Это дает возможность выбора создателю.

Любители JavaScript могут использовать Node.js Telegram Bot API. Здесь необходимо знание не только языка, но и умение обращаться с этим фреймворком, превратившим клиентский язык в полноценный серверный интерфейс.

Одним из самых популярных для написания ботов с использованием Telegram Bot API является PHP. Этот язык изначально был предназначен для создания серверных web-приложений. Он отличается простотой, логичностью и специализированностью именно для web-среды.

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

Кроме объектов API имеет набор методов, которые позволяют отправлять сообщения, файл, фото стикеры, редактировать и многое другое. Все эти команды можно найти в описании API на официальном сайте.

Для создания в Telegram существует специальный сервис @Botfather. Зайдите в него и увидите набор команд, с помощью которых создается новый робот. Для начала наберите команду /newbot. Далее последовательно введите имя для пользователей и название. Последнее обязательно заканчивается на «bot». После того, как вам пришлют токен (идентификатор), новый бот создан. Авторизация осуществляется через токен. Чтобы запустить программу в Телеграмм, найдите свое детище и нажмите кнопку «Старт». Это запустит преопределённую команду /start. Также для каждого робота зарезервированы команды /settings и /help.

Все запросы имеют вид:

https://api.telegram.org/bot/КОМАНДА

Всего существует 4 способа подачи запроса:

  1. Запрос в URL
  2. application/x-www-form-urlencoded
  3. application/json (не подходит для загрузки файлов)
  4. multipart/form-data (для загрузки файлов)

Доступны как GET, так и POST запросы.

Самый простой способ попробовать команды API – адресная строка в браузере. Зайдите в свой бот в web-версии или с мобильного устройства. Затем в браузере наберите команду:

https://api.telegram.org/bot507226896:AAGT_fsEfg1milOkqbNp-VolQDJ0tGjaPvD7/getUpdates

В результате в окне появится JSON-строка

{"ok":true,"result":[{"update_id":231886689,"message":{"message_id":3,"from":{"id":391911270,"is_bot":false,"first_name":"Irina","last_name":"12345678","language_code":"ru"},"chat":{"id":391911270,"first_name":"Irina","last_name":"12345678","type":"private"},"date":1514900431,"text":"u044bu0443u0442u0430u043bu043eu0430u043cu0440"}}]}

Параметр chat»:{«id – это идентификатор чата. Затем наберите строку:

https://api.telegram.org/ bot507226896:AAGT_fsEfg1milOkqbNp-VolQDJ0tGjaPvD7/sendMessage?chat_id=391911270&text=Hello

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

{"ok":true,"result":{"message_id":4,"from":{"id":507226896,"is_bot":true,"first_name":"Anna","username":"Annatuola_bot"},"chat":{"id":391911270,"first_name":"Irina","last_name":"12345678","type":"private"},"date":1514900499,"text":"Hello"}}

А в чате Телеграмм вы увидите приветствие от созданного робота.

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

Используемые источники:

  • https://evilinside.ru/kak-na-php-rabotat-s-telegram-core-api-mtproto/
  • https://stelegram.ru/faq/servis-telegram-api
  • https://telegram-rus.ru/api
  • https://habr.com/ru/post/424245/
  • https://telegramzy.ru/api-bot/

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий