Как сделать свой клиент телеграмм

Обновлено: 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. Все методы описаны в

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

(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 .

Telegram API боты чаты

В меню настроек 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 имеет большой минус — бот часто зависает и его приходится постоянно перезапускать.

Telegram API боты чаты

Если вы делаете бота, который работает с деньгами или какой-то конфиденциальной информацией, то параметр skip_updates лучше устанавливать в значение Falsе тогда обработчик не будет пропускать старые события и будет обрабатывать их в любом случае. Если этого не делать, существует вероятность, что какая-нибудь важная транзакция может потеряться и возникнет потенциальная угроза безопасности (или коллизия).

Оформление: кнопки и текст

Telegram API боты чаты

Например, URL button — простая кнопка со ссылкой на какой-то веб-ресурс. Вариант кнопки Callback запрашивает обновление. Она может применяться, скажем, для уведомлений или предупреждений (с окном notification или окном alert ). Кнопка для перехода в режим инлайн может открывать меню для выбора чата.

Один из примеров такой клавиатуры — бот в кафе для дистанционного принятия заказов:

Telegram API боты чаты

Инструмент для оформления текста выбирается аргументом функции 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 ).

Telegram API боты чаты

Заключение

Более сложные боты обладают искусственным интеллектом и умеют использовать нейронные сети. Возможности таких чат-ботов ограничены только вашей фантазией, но об этом — в следующий раз. А пока посмотрите дополнительное видео по технике создания ботов на JavaScript для Telegram API :

Пишем простой граббер для Telegram чатов на Python

Для указанных задач будет использоваться Python не ниже версии 3.5, а также высокоуровневая библиотека для работы с Telegram API – Telethon. Установить библиотеку можно с помощью менеджера пакетов pip :

Регистрируем в Telegram новое приложение

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

Пишем простой граббер для Telegram чатов на Python

Вводим пришедший в Telegram численно-буквенный код и попадаем на страницу регистрации нового приложения. Заполняем форму, достаточно первых двух граф:

Пишем простой граббер для Telegram чатов на Python

В результате попадаем на страницу конфигурации приложения. Находим оба параметра, а также доступные 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 и другие. Хотя для автопостинга можно использовать онлайн сервисы — список найдете на нашем сайте.

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

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

Как добавить Телеграм виджет на сайт

Заключение

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

Читайте также: