Android studio telegram bot

Telegram: как создать бот

04.12.2021, Дмитрий Баринов

Чат-боты особенно популярны в настоящее время, так как являются онлайн помощниками. Их еще называют онлайн интеллектом, который заменяет живого консультант.

Возможности чат-бота:

  1. Отвечать на вопросы клиентов.
  2. Помогать в выборе товара.
  3. Осуществлять бронь мест.
  4. Делать рекламные рассылки и прочее.

Это поистине великое изобретение человечества. Функции ботов поражают воображение. Общение с ними настолько реалистичное: можно подумать, что общаешься с человеком, а не с программой. Боты повсюду: на сайтах, в соцсетях, мессенджерах. Установка чат-ботов заметно повышает продажи, так как сокращается путь клиента к покупке и у фирмы появляется возможность тратить меньше времени и денег. Один бот может заменить небольшой колл-центр и обеспечить круглосуточную поддержку — отвечать клиентам даже среди ночи и записывать контакты тех, кому нужна «живая» консультация.

Особенно развито создание ботов в Телеграме. Вести там чат-бот не только удобно и стало модно. Процесс его создания довольно быстрый, не более 5 минут. И к тому же он абсолютно бесплатный. Ниже приложена полная инструкция по созданию бота в Телеграмме собственноручно.

Первым делом нужно авторизоваться на компьютере или телефоне в своей учетной записи Телеграмм. Мобильное приложение доступно в Play Market. Чтобы установить программу на компьютер, скачайте программу с официального сайта (Телеграм точка орг).

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

Последовательность создания нового чат бота Telegram

  1. Наберите в поиске Телеграм @BotFather, далее Запустить/Начать/Start. Эта команда является призывом к созданию нового бота. После этого следует команда /newbot.
  2. Придумайте имя бота. Отнеситесь к процессу серьезно, так как все контакты будут его видеть.
  3. Помимо имени существует еще и ник. Его наименование всегда заканчивается на bot. Для ника обязательна уникальность. Программа его не пропустит, если ник уже кем-то занят. Оптимально использование ника, который обозначает наименование компании, фамилию владельца либо фамилию и имя. Допустимо использование только букв латинского алфавита, цифр и некоторых символов. Разрешенная длина до 32 символов. Если ник занят, придет сообщение о невозможности его использования и предложение создать другой.
  4. После успешного создания бота пользователю придет сообщение с токеном, чтобы вы могли интегрироваться на любых сервисах и платформах. Токен состоит из букв и цифр, является как бы ключом к вашему боту. Вы его просто копируете и вставляете на свою платформу.

Настройка бота под себя в Телеграм

  1. Выбрать необходимый бот, если у вас их несколько.
  2. Нажать кнопку Edit. После этого появится контекстное меню, через него возможно редактировать.
  3. В боте можно поменять собственную аватарку, загрузив изображение с телефона или компьютера. Чтобы загрузить аватар, нажимаете кнопку Edit botpic. Подойдет квадратное фото без текста. Для компаний выбирайте логотип. Дело сделано – аватарка поменяна.
  4. Чтобы вернуться назад к настройкам, нажмите Back to Bot.
  5. Также возможно добавить описание, чем занимается ваш бот (до 500 символов). Этот текст отображается в центре диалога экрана при первом посещении бота под надписью «Что может делать этот бот?».
  6. Есть еще пара полезных функций в настройках, при желании даже новичок легко в них разберется.

Все, готово. Вот так легко сделать чат бота Telegram своими руками.

Источник

Запускаем Telegram-бота на Android устройстве (Remote Bot for Telegram)

Четыре месяца назад у меня появилась идея написать Telegram-бота, который будет запускаться не на внешнем сервере, как большинство ботов, а на мобильном телефоне.

Идея родилась не на пустом месте: я часто пропускал входящие звонки и СМС, когда телефон был в куртке или в кармане, поэтому мне нужен был дополнительный способ уведомлений. А так как я активно использую Telegram на компьютере, то подумал, что было бы не плохо, если бы входящие СМС и пропущенные звонки приходили в Telegram. Немного покопавшись, я решил написать бота.

Читайте также:  Обучалка английского для андроид

Разработка прототипа

Я стал изучать тему создания Telegram ботов по официальной документации и по примерам. В основном все примеры были написаны на Python. Поэтому не долго думая, стал искать способы запуска Python сервера на Android. Но оценив время на изучение Python и не найдя ничего подходящего для запуска сервера, занялся поиском альтернатив и наткнулся на несколько библиотек на Java для написания Telegram ботов. В итоге остановился на проекте от Pengrad: java-telegram-bot-api.

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

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

Приведу в пример функцию, позволяющую получать последние сообщения и отправлять их на обработку:

Позже, в целях безопасности, я добавил возможность привязки бота к разрешенным Telegram-аккаунтам и возможность запрета выполнения определенных команд для заданных пользователей.

Добавив несколько команд для бота, такие как: отправка, чтение СМС, просмотр пропущенных звонков, информация о батарее, определение местоположения и др., я опубликовал приложение в Google Play, создал темы на нескольких форумах, стал ждать комментарии и отзывы.

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

Это немного помогло, но появилась другая проблема, AlarmManager некорректно работал на некоторых китайских устройствах. И поэтому бот иногда не просыпался после нескольких часов, проведенных в состоянии сна. Изучая официальную документацию, я читал о том, что Long Polling это не единственная возможность получения сообщений, сообщения еще можно было получать используя Webhook.

Получение сообщений через Webhook

Я зарегистрировался на Digital Ocean, создал VPS на Ubuntu, затем реализовал простейший http сервер на Java, использующий Spark Framework. На сервер можно делать запросы 2 типов: push (отправка пуш-уведомления через webhook) и ping.

Пуш-нотификации отправлялись с помощью Google Firebase.

Генерация SSL сертификата

Протестировав отправку пуш-уведомлений, я стал разбираться с тем, как настроить и запустить сервер с HTTPS, так как это одно из требований при получении сообщений из Telegram через webhook.

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

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

После запуска скрипта, на выходе получаем два файла: keystore.jks — используется на сервере, public_cert.pem — используется при установке webhook в Android приложении.

Для того, чтобы запустить HTTPS на Spark Framework достаточно добавить 2 строки, одну указывающую порт (разрешенные порты для webhook: 443, 80, 88, 8443), другую, указывающую сгенерированный сертификат и пароль к нему:

Чтобы установить webhook для бота, необходимо добавить в андроид-приложение следующие строки:

При регистрации webhook, в качестве URL указывается адрес webhook, затем передается пуш-токен, необходимый для отправки пуш-уведомлений и секретный ключ, генерируемый на устройстве, который я добавил для дополнительной проверки входящих уведомлений.

Функция чтения публичного сертификата из RAW ресурса:

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

Автоматическое создание бота

После обновления механизма получения сообщений, осталась еще одна проблема, которая не позволяла пользоваться приложением некоторому проценту пользователей из-за сложности создания бота через BotFather. Поэтому я решил автоматизировать этот процесс.

Читайте также:  Powerpoint android нет звука

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

Добавление новых возможностей

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

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

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

Заключение

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

Большое спасибо за внимание. Буду рад услышать от Вас полезные замечания и предложения.

Источник

Telegram-бот на Java для самых маленьких — от старта до бесплатного размещения на heroku

Для кого написано

Если вы ни разу не писали Telegram-ботов на Java и только начинаете разбираться — эта статья для вас. В ней подробно и с пояснениями описано создание реального бота, автоматизирующего одну конкретную функцию. Можно использовать статью как мануал для создания скелета своего бота, а потом подключить его к своей бизнес-логике.

Предыстория

Когда моя дочь начала изучать арифметику, я между делом накидал алгоритм генерации простых примеров на сложение и вычитание вида «5 + 7 =», чтобы не придумывать и не гуглить для неё задания.

И тут на глаза попалась новость, что Telegram выпустил новую версию Bot API 5.0. Ботов я раньше не писал, и потому решил попробовать поднять бота как интерфейс для своей поделки. Все примеры, которые мне удалось найти, показались либо совсем простыми (нужные мне функции не были представлены), либо очень сложными для новичка. Также мне не хватало объяснений, почему выбран тот или иной путь. В общем, написано было сразу для умных, а не для меня. Потому я решил описать свой опыт создания простого бота — надеюсь, кому-нибудь это поможет быстрее въехать в тему.

Что в статье есть, чего нет

В статье есть про:

  • создание бекенда не-инлайн бота на Java 11 с использованием Telegram Bot Api 5.0;
  • обработка команд вида /dosomething ;
  • обработка текстовых сообщений, не являющихся командами (т.е. не начинающихся с «/»);
  • отправку пользователю текстовых сообщений и файлов;
  • деплой и запуск бота на heroku.

В статье нет про:

  • использование функций ботов, не перечисленных выше (например, создание клавиатур — я их сначала добавил, но в итоге они мне просто не пригодились);
  • создание списка заданий;
  • работу с Word-документом;
  • обеспечивающие функции — логирование, тесты и т.п.;
  • общение с BotFather (создание бота, получение его токена и формирование списка команд подробно и понятно описано во многих источниках, вот первый попавшийся мануал).

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

Бизнес-функции бота

  • выдавать пользователю справочную текстовую информацию в ответ на команды /start , /help и /settings ;
  • обрабатывать и запоминать пользовательские настройки, направленные текстовым сообщением заданного формата. Настроек три — минимальное + максимальное число, используемые в заданиях, и количество страниц выгружаемого файла;
  • оповещать пользователя о несоблюдении им формата сообщения;
  • формировать Word-файл с заданиями на сложение, вычитание или вперемешку в ответ на команды /plus , /minus и /plusminus с использованием дефолтных или установленных пользователем настроек.
Читайте также:  Android studio color selector

Можно потыкать — MentalCalculationBot (должен работать). Выглядит так:

Порядок разработки

  • разобраться с зависимостями;
  • создать класс бота и реализовать обработку текстовых сообщений пользователя, не являющихся командами;
  • создать классы команд;
  • прописать запуск приложения;
  • задеплоить на heroku.

Ниже подробно расписан каждый пункт.

Зависимости

Для управления зависимостями использовался Apache Maven. Нужные зависимости — собственно Telegram Bots и Lombok, использовавшийся для упрощения кода (заменяет стандартные java-методы аннотациями).

Вот что вышло в

Класс бота и обработка текстовых сообщений

Мой класс Bot унаследован от TelegramLongPollingCommandBot , который, в свою очередь, наследуется от более распространённого в примерах TelegramLongPollingBot . Он хорош тем, что в нём уже реализованы приём и обработка команд — то есть сообщений, начинающихся с «/». Можно создавать отдельные классы команд (подробнее о них ниже), инициализировать их в конструкторе бота и уже в них писать логику их обработки.

В классе Bot таким образом остаётся только логика обработки текстовых сообщений, не являющихся командами. В моём случае это пользовательские настройки или мусорные сообщения, не соответствующие формату. Для лаконичности логику их обработки тоже стоит вынести в отдельный вспомогательный класс, вызывая его метод из переопределенного метода processNonCommandUpdate(Update update) класса Bot .

В качестве параметров для инициализации бота используются его имя и токен, полученные от BotFather. В ходе разработки удобно создать тестового бота и прописать его параметры прямо в коде, чтобы проще было запускать бекенд локально и отлаживать прямо в Telegram, однако перед релизом стоит пересоздать бота и вынести эти настройки из кода — например, в переменные окружения (об этом ниже).

Получился вот такой

Классы команд

Все классы команд наследуются от BotCommand .

Команды в моём боте делятся на 2 группы:

  • Сервисные — возвращают справочную информацию;
  • Основные — формируют файл с заданиями.

Структура классов команд для этих групп идентична — в абстрактном суперклассе реализуются общие методы, в наследуемые от него классах отдельных команд вынесена их кастомная логика. Разница лишь в том, что Основные команды обращаются к внешним классам, где реализована бизнес-логика, в то время как Сервисные просто формируют текстовый ответ.

Начнём с более простых Сервисных команд. В абстрактный суперкласс вынесен метод отправки пользователю ответа, а в классах команд формируется текст ответа.

Абстрактный суперкласс Сервисных команд

Приложение

В методе main инициализируется TelegramBotsApi , в котором и регистрируется Bot.

TelegramBotsApi в качестве параметра принимает Class . Если нет никаких заморочек с прокси, можно использовать DefaultBotSession.class .

Чтобы получать имя и токен бота как переменные окружения, необходимо использовать System.getenv() .

Получаем вот такой

Деплой на heroku

Для начала нужно создать в корне проекта файл Procfile и написать в него одну строку:
worker: java -Xmx300m -Xss512k -XX:CICompilerCount=2 -Dfile.encoding=UTF-8 -cp ./target/classes:./target/dependency/*
, где worker — это тип процесса.

Если в проекте используется версия Java, отличная от 8, также необходимо создать в корне проекта файл system.properties и прописать в нём одну строку:
java.runtime.version=

Далее порядок такой:

  1. Регистрируемся на heroku и идём в консоль;
  2. mvn clean install ;
  3. heroku login — после выполнения потребуется нажать любую клавишу и залогиниться в открывшемся окне браузера;
  4. heroku create — создаём приложение на heroku;
  5. git push heroku master — пушим в репозиторий heroku;
  6. heroku config:set BOT_NAME= — добавляем имя бота в переменные окружения;
  7. heroku config:set BOT_TOKEN= — добавляем токен бота в переменные окружения;
  8. heroku config:get BOT_NAME (аналогично BOT_TOKEN) — убеждаемся, что переменные окружения установлены верно;
  9. heroku ps:scale worker=1 — устанавливаем количество контейнеров (dynos) для типа процесса worker (ранее мы выбрали этот тип в Procfile), при этом происходит рестарт приложения;
  10. В интерфейсе управления приложением в личном кабинете на heroku переходим к логам (прячутся под кнопкой «More» в правом верхнем углу) и убеждаемся, что приложение запущено;
  11. Тестируем бота через Telegram.

Если вы храните код на GitHub, то в интерфейсе управления приложением в личном кабинете на heroku на вкладке «Deploy» вы можете в дальнейшем переключить деплой на GitHub-репозиторий (по запросу или автоматически), чтобы не пушить параллельно в два репозитория.

Источник

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