Как сделать свой клиент телеграмм
Обновлено: 07.07.2024
Сразу хочу отметить - заметка в большей степени не про telegram, а про правильную, по мнению автора, разработку native внешних компонент.
Сама технологии создания внешних компонент с native API существует уже много лет, но несмотря на это, найти достойный пример open source реализации внешней компоненты крайне сложно. Вполне вероятно, что все компоненты с открытыми исходными кодами можно пересчитать по пальцам одной руки. Буду рад увидеть ссылки в комментариях, чтобы понять, что не прав.
Сегодня тема взаимодействия с telegram уже не так популярна, как ранее. С одной стороны на это повлияли действия РКН, с другой - библиотека инфостарта уже изрядно наполнена примерами взаимодействия с Bot API. Но что делать, если функционала bot API недостаточно? Допустим, мы хотим сами писать пользователю, или хотим использовать секретные чаты с end-to-end шифрованием, или, о боже, хотим написать полноценный telegram клиент на 1С? Выход - TDLib.
Telegram database library - это официальная библиотека для создания Telegram клиентов, предоставляющая доступ ко всему функционалу MTProto. Один из вариантов работы с библиотекой - JSON. Все методы описаны в
Специальные предложения
(2) Тогда пусть будет в комментах. Из репозитория можно подчерпнуть следующую полезную информацию.
- Не надо использовать шаблон с ИТС, т.к. он был написан еще до C++11.
- Ориентируемся на кросплатформенность с начала разработки, т.к. надо 1С на Linux далеко не экзотика. Поэтому точно не стоит использовать wchar_t для хранения строк. Только 2х байтовые char16_t.
- Для преобразования строк из UTF-8 в UTF-16 лучше брать проверенное временем решение. Например ICU (как у меня), либо iconv. Но только не велосипеды из шаблона с ИТС.
- Используйте CMake. Далеко не все разработчики предпочитают Visual Studio даже под Windows. Да и единообразие сборочного процесса на различных система не повредит.
- Решая проблему русских названий методов не надо сохранять исходники в Win-1251. Да, в студии сработает. Но правильный и универсальный вариант это UTF8+BOM.
- Обязательно настройки CI. Не только потому, что CI это "круто", но и потому, что так вы точно не забудете, что еще необходимо установить на чистую систему для сборки. Сборка в C++, особенно больших проектов - боль.
- Не забываем про кэш при сборке на CI. В моем "проекте" tdlib с нуля собирается минут 30 + еще 10 минут другие зависимые библиотеки. При наличии кэша время сборки, даже с учетом подготовки виртуалки меньше минуты. Пример реализации кэша можно увидеть как для Windows: тут сделан пакет tdlib для vcpkg, так и для Linux - там сборка идет через Docker контейнер, а актуальный образ сборщика в docker hub.
P.S. В Appveyor теперь есть поддержка Linux. Лучший CI для подобных проектов на сегодняшний день.
starik-2005; unduty; ksu66; tormozit; zakiap; KAV2; Трактор; pbazeliuk; AlkB; shurik_shurik; JohnyDeath; dmpas; Synoecium; azubar; + 14 – Ответить
Для любого бизнеса важно установить канал общения с клиентами. Но сделать это не так просто. Психология людей такова, что они не хотят захламлять память своего смартфона новым фирменным приложением из того места, которое они посетили. Совсем другое дело — чат-бот. Ненавязчивый и дружелюбный. А кроме того — со всеми необходимыми фишками: рекламными акциями, скидками и быстрым заказом. И уведомления в одном единственном удобном мессенджере. Почему бы его не реализовать в своем бизнесе? Тем более, что это не так сложно, как вы думаете.
Сегодня мы поговорим о ботах и их API ( telegram api ) на базе популярного мессенджера Telegram.
Содержание
Telegram Bot API и Telegram API
Все началось с того, что Николай Дуров совместно с командой программистов создал криптографический протокол. Его движок задействовал комбинацию симметричного шифрования AES , протокол Диффи-Хеллмана для обмена ключами шифрования между клиентами и ряд хеш-функций. На основе этого протокола был построен MTProto — механизм, позволяющий пользователям сегодня использовать Telegram-мессенджеры.
На данный момент есть два основных инструмента API, с помощью которых можно задействовать сервисы Telegram — Telegram Bot API и Telegram API . Первый служит для разработки чат-ботов, второй позволяет делать полностью кастомные Telegram-клиенты. Разработчикам также доступна открытая библиотека TDLib (Telegram Database Library), с помощью которой можно создавать свою версию мессенджера с уникальными опциями (как например, Telegram X, построенный именно на TDLib). Telegram Bot API является надстройкой над Telegram API , поэтому пользоваться Bot API можно без знаний о механизме используемого протокола MTProto .
BotFather: быстрый Start
Чтобы приступить к созданию собственного бота, необходимо получить токен для авторизации и подключения через API. Делается это при помощи служебного бота. Введите в поиске Telegram его имя — BotFather. Далее следует выбрать команду /newbot и дать имя боту.
Затем BotFather спросит вас имя, которое обязательно должно заканчиваться на bot , например, shop_serge_bot . Далее для бота будет сгенерирован уникальный токен, который будет выглядеть примерно так — 2093336709:AAGiH64Ec1R8r222sM9IywvlIGFkb7wFqyo .
Всего можно генерировать не более 20 ботов на одного пользователя. Управление ботами также происходит через меню команд служебного бота BotFather. Например, если вам потребуется настроить какой-то из ваших ботов, вы должны перейти по командам / mybots и затем нажать на кнопку Edit Bot . Здесь вы сможете настроить имя — Edit Name и указать описание — Edit Description .
В меню настроек BotSettings включается режим встроенных запросов (по умолчанию эта опция отключена). Когда встроенные запросы активированы, пользователи могут вызвать вашего бота, просто введя имя пользователя в поле для ввода текста в любом чате, группе или канале.
Если Telegram использовать в коммерческих целях, чат-бот можно вооружить средствами для приема платежей. Стоит обратить внимание, что сам Telegram не занимается проведением транзакций, он лишь дает возможность подключить услуги длинного списка провайдеров.
В их числе такие платежные системы, как Stripe, YooMoney, Сбербанк, PayMaster, PSB, Tranzzo, Payme, CLICK, LiqPay, Portmone, Paymega, ECOMMPAY и др. Разумеется, чтобы использовать эти платежные системы, нужно быть юридическим лицом.
aiogram — асинхронная библиотека
pip install -U aiogram.
Создаем эхо-бот
Создаем конфигурационный файл config.py и указываем в нем значение, сгенерированное ботом BotFather. Приступаем к написанию кода самого чат-бота.
Для начала импортируем конфигурацию и систему логирования. Затем подключаем все необходимые модули из aiogram . Указываем уровень логирования, а затем инициализируем бота, создав две переменные — Bot и Dispatcher .
Как уже говорилось ранее, обработка событий в Telegram может происходить двумя способами — long polling , когда мы со своей стороны постоянно запрашиваем сервер, а второй вариант — более мощное и быстрое решение вебхук . Реализация long polling на Linux имеет большой минус — бот часто зависает и его приходится постоянно перезапускать.
Если вы делаете бота, который работает с деньгами или какой-то конфиденциальной информацией, то параметр skip_updates лучше устанавливать в значение Falsе — тогда обработчик не будет пропускать старые события и будет обрабатывать их в любом случае. Если этого не делать, существует вероятность, что какая-нибудь важная транзакция может потеряться и возникнет потенциальная угроза безопасности (или коллизия).
Оформление: кнопки и текст
Например, URL button — простая кнопка со ссылкой на какой-то веб-ресурс. Вариант кнопки Callback запрашивает обновление. Она может применяться, скажем, для уведомлений или предупреждений (с окном notification или окном alert ). Кнопка для перехода в режим инлайн может открывать меню для выбора чата.
Один из примеров такой клавиатуры — бот в кафе для дистанционного принятия заказов:
Инструмент для оформления текста выбирается аргументом функции parse_mode .
Используя модуль markdown из aiogram.utils по ходу текста можно менять форматирование. Тип форматирования определяется функцией с дописанной к ней букве h , которая означает поддержку HTML.
Учим бот-модерации
Даем возможность бана в группе
Помимо основного кода нам понадобится сделать файл filters.py , который поместим рядом с главным файлом нашего бота:
В коде бота мы его импортируем:
Также необходимо в конфигурационном файле config.py указать id чата ( GROUP_ID ).
Все пользователи Telegram имеют свой id . Он постоянный, и поэтому по нему можно идентифицировать чаты. Если вдруг вы не знаете id , вы можете воспользоваться ботом @username_to_id_bot , который покажет это значение.
В токене бота первая часть — это его id . Например, токен 110301514:AмHdqTcvCG1vGWDxfyeDfSAs0K5PALDsaw принадлежит боту с id 110301514 . В Bot API перед id супергрупп и каналов добавляется -100 (например, id 1322414430 превращается в -1001322414430 ).
Заключение
Более сложные боты обладают искусственным интеллектом и умеют использовать нейронные сети. Возможности таких чат-ботов ограничены только вашей фантазией, но об этом — в следующий раз. А пока посмотрите дополнительное видео по технике создания ботов на JavaScript для Telegram API :
Для указанных задач будет использоваться Python не ниже версии 3.5, а также высокоуровневая библиотека для работы с Telegram API – Telethon. Установить библиотеку можно с помощью менеджера пакетов pip :
Регистрируем в Telegram новое приложение
Для подключения к Telegram API необходимы api_id и api_hash . Эти параметры выдаются при регистрации приложения в инструментах разработчика (при отсутствии доступа используйте VPN). Для авторизации указываем номер телефона, к которому привязан аккаунт Telegram.
Вводим пришедший в Telegram численно-буквенный код и попадаем на страницу регистрации нового приложения. Заполняем форму, достаточно первых двух граф:
В результате попадаем на страницу конфигурации приложения. Находим оба параметра, а также доступные MTProto-сервера и открытые (публичные) ключи.
Избегая проблем с безопасностью, сохраняем учетные данные в отдельном файле config.ini следующей структуры:
Поле username далее будет использоваться лишь для автоматического сохранения сессии под именем username.session . Одному клиенту соответствует одна сессия, учтите это в случае запуска нескольких клиентов.
Создаем клиент Telegram
Начнем с импорта библиотек.
Теперь считаем учетные данные из config.ini :
Создадим объект клиента Telegram API:
При необходимости прописываем прокси. При использовании протокола MTProxy прокси задается в виде кортежа (сервер, порт, ключ) .
При первом запуске платформа запросит номер телефона, и вслед – код подтверждения. Так же, как если бы вы входили в учетную запись в приложении или браузере.
Для сбора, обработки и сохранения информации мы создадим две функции:
Обе функции будут вызываться в теле функции main , в которой пользователь передаст ссылку на интересующий источник:
Касательно написания вызова функций стоит оговориться, что Telethon является асинхронной библиотекой. Поэтому в коде используются операторы async и await. В связи с этим функция main полностью будет выглядеть так:
Заметим, что из-за асинхронности Telethon может некорректно работать в средах, использующих те же подходы (Anaconda, Spyder, Jupyter).
Рекомендуемым способом управления клиентом является менеджер контекстов with . Его мы запустим в конце скрипта после описания вложенных в main функций.
Собираем данные об участниках
Telegram не выводит все запрашиваемые данные за один раз, а выдает их в пакетном режиме, по 100 записей за каждый запрос.
Устанавливаем ограничение в 100, начинаем со смещения 0, создаем список всех участников канала all_participants . Внутри бесконечного цикла передаем запрос GetParticipantsRequest .
Проверяем, есть ли у объекта participants свойство users . Если нет, выходим из цикла. В обратном случае добавляем новых членов в список all_participants , а длину полученного списка добавляем к смещению offset_user . Следующий запрос забирает пользователей, начиная с этого смещения. Цикл продолжается до тех пор, пока не соберет всех фолловеров канала.
Самый простой способ сохранить собранные данные в структурированном виде – воспользоваться форматом JSON. Базы данных, такие как MySQL, MongoDB и т. д., стоит рассматривать лишь для очень популярных каналов и большого количества сохраняемой информации. Либо если вы планируете такое расширение в будущем.
В JSON-файле можно хранить и всю информацию о каждом пользователе, но обычно достаточно лишь нескольких параметров. Покажем на примере, как ограничиться набором определенных данных:
Итак, для каждого пользователя создается свой словарь данных и добавляется в общий список all_user_details , который записывается в JSON-файл.
Таким образом, с помощью Python и Telethon мы написали скрипт, собирающий и сохраняющий данные и реплики участников сообществ Telegram.
Посетителей сайта нужно удерживать и возвращать на сайт снова и снова. Также их можно дополнительно монетизировать. Раньше для этой задачи использовали емейл-рассылки, но есть не менее эффективный инструмент — Телеграм-канал. Привлечь посетителей сайта в Телеграм канал можно через виджет.
В статье расскажем, как создать виджет для Телеграм и добавить его на сайт.
- Более 2000 рекламных агентств и фрилансеров уже работают с сервисом.
- Подключиться можно самому за 1 день.
- Зарабатывайте с первого потраченного рубля, без начальных ограничений, без входного барьера.
- Выплаты на WebMoney, на карту физическому лицу, реинвестирование в рекламу.
- У вас остаются прямые доступы в рекламные кабинеты, рай для бухгалтерии по документообороту и оплатам.
Какие бывают виджеты для Телеграм
Виджеты для Телеграм делятся на 3 группы:
- виджет для приглашения в группу или на канал;
- виджет для диалога через Телеграм (аналог онлайн-консультантов и чат-ботов);
- виджет в виде кнопки для перепоста материала или страницы в Телеграм.
Как создать Телеграм виджет и добавить на сайт
Есть 2 основных способа создать и добавить виджет на сайт:
Через HTML-код
Писать код с нуля нет необходимости — можно воспользоваться готовыми сервисами. Они позволяют настроить внешний вид виджета и дают готовый код, который нужно вставить на страницу сайта.
Сервисы, в которых можно создать Телеграм виджет:
- TGWidget (виджет для привлечения на канал);
- T.website (виджет канала с кнопкой подписки);
- Telegram.im (кнопка для начала диалога через ТГ);
- Elfsight (виджет Телеграм диалога);
- Hoversignal (виджет Телеграм диалога);
- Teletype (виджет Телеграм диалога);
- Widg.io (виджет чата, есть интеграция с Wix и WordPress);
- myWidget (чат-бот);
- SendPulse (виджет подписки на бота Telegram);
- DiscussBot (comments.app — виджет комментариев на сайте через Телеграм);
Создаем виджет подписки на канал на примере сервиса T.website:
Понадобится всего пара действий. Заходим на сайт T.website и вставляем в поле ссылку на канал либо его логин @channelname. Сервис выдаст код на виджет канала с линейкой постов и кнопкой подписки. Через изменения в коде можно изменить внешний вид виджета под фирменный стиль, но для этого нужно разбираться в HTML и CSS.
Создаем виджет поста (с кнопкой подписки) через конструктор Телеграма:
Здесь есть инструкции, как получить код.
Важно: пост должен быть в публичном канале или группе.
Полученную ссылку открываем в браузере и нажимаем на кнопку EMBED.
Получаем код виджета. Копируем и вставляем на страницу сайта.
Как вставить готовый HTML-код на сайт
Зависит от того, на чем сделан сайт. Если на чистом HTML, то в коде страницы нужно найти место, где будет размещен виджет и вставить туда код виджета. Если сайт на движке или на конструкторе, то обычно там предусмотрены виджеты, которые называются HTML-код. Нужно добавить виджет на страницу и в его настройках уже прописать полученный код.
С помощью плагинов
Если сайт на движке, например, на Вордпрессе — можно подключить и настроить плагин. Хотя и на движок можно добавить виджет через код. Но так как плагины существуют, опишем и этот способ.
*В большинство тем для Вордпресс уже встроены виджеты с кнопками соцсетей и мессенджеров. Они выглядят, как иконки с ссылками на соцсети, мессенджеры, YouTube-канал. Но если стоит задача визуально выделить именно Телеграм канал, то нужен отдельный виджет.
Плагины с виджетом Телеграм для Вордпресса:
- Channel Widget for telegram (показывает пост из Телеграм, можно перейти через него на канал);
- Replain (плагин для общения с посетителями сайта через Телеграм);
- QuadLayers Telegram Button (кнопка для начала диалога через ТГ)
- Telegram Chat (еще один виджет чата);
- WP Telegram Comments (виджет комментариев для сайта, чтобы оставлять комментарии посетители должны авторизоваться через ТГ);
*Кстати, для Вордпресса также созданы плагины автопостинга с сайта в Телеграм канал: WP Telegram, Telegram Bot & Channel и другие. Хотя для автопостинга можно использовать онлайн сервисы — список найдете на нашем сайте.
Виджеты работают по аналогии — сначала нужно скачать и активировать плагин, затем в настройках указать ссылку на канал и кастомизировать его внешний вид.
Лайфхак: если стоит задача просто перенаправлять трафик с сайта в Телеграм канал, можно создать на странице сайта кнопку в цветах Телеграм с надписью-приглашением подписаться на канал, чтобы получать рассылки с новым материалом. Кнопку желательно сделать с иконкой Телеграма. Дальше просто привязываем к этой кнопке ссылку на Телеграм канал и получаем новых подписчиков.
Заключение
В зависимости от типа виджета выбирайте удобный для себя способ его создания и добавления на сайт. Если есть возможность добавить виджет через код — лучше выбрать этот вариант вместо тех же плагинов. Большое количество плагинов могут перегружать сайт. Тем более, получить код для Телеграм виджета и поставить его на сайт проще простого.
Читайте также: