Время на прочтение
6 мин
Количество просмотров 1.6M
24 июня разработчики Telegram открыли платформу для создания ботов. Новость кого-то обошла стороной Хабр, однако многие уже начали разрабатывать викторины. При этом мало где указаны хоть какие-то примеры работающих ботов.
Прежде всего, бот для Telegram — это по-прежнему приложение, запущенное на вашей стороне и осуществляющее запросы к Telegram Bot API. Причем API довольное простое — бот обращается на определенный URL с параметрами, а Telegram отвечает JSON объектом.
Рассмотрим API на примере создания тривиального бота:
1. Регистрация
Прежде чем начинать разработку, бота необходимо зарегистрировать и получить его уникальный id, являющийся одновременно и токеном. Для этого в Telegram существует специальный бот — @BotFather.
Пишем ему /start и получаем список всех его команд.
Первая и главная — /newbot — отправляем ему и бот просит придумать имя нашему новому боту. Единственное ограничение на имя — оно должно оканчиваться на «bot». В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты, иначе придется поломать голову над именем.
Для начала работы этого уже достаточно. Особо педантичные могут уже здесь присвоить боту аватар, описание и приветственное сообщение.
Не забудьте проверить полученный токен с помощью ссылки api.telegram.org/bot<TOKEN>/getMe, говорят, не всегда работает с первого раза.
2. Программирование
Создавать бота буду на Python3, однако благодаря адекватности этого языка алгоритмы легко переносятся на любой другой.
Telegram позволяет не делать выгрузку сообщений вручную, а поставить webHook, и тогда они сами будут присылать каждое сообщение. Для Python, чтобы не заморачиваться с cgi и потоками, удобно использовать какой-нибудь реактор, поэтому я для реализации выбрал tornado.web. (для GAE удобно использовать связку Python2+Flask)
Каркас бота:
URL = "https://api.telegram.org/bot%s/" % BOT_TOKEN
MyURL = "https://example.com/hook"
api = requests.Session()
application = tornado.web.Application([
(r"/", Handler),
])
if __name__ == '__main__':
signal.signal(signal.SIGTERM, signal_term_handler)
try:
set_hook = api.get(URL + "setWebhook?url=%s" % MyURL)
if set_hook.status_code != 200:
logging.error("Can't set hook: %s. Quit." % set_hook.text)
exit(1)
application.listen(8888)
tornado.ioloop.IOLoop.current().start()
except KeyboardInterrupt:
signal_term_handler(signal.SIGTERM, None)
Здесь мы при запуске бота устанавливаем вебхук на наш адрес и отлавливаем сигнал выхода, чтобы вернуть поведение с ручной выгрузкой событий.
Приложение торнадо для обработки запросов принимает класс tornado.web.RequestHandler, в котором и будет логика бота.
class Handler(tornado.web.RequestHandler):
def post(self):
try:
logging.debug("Got request: %s" % self.request.body)
update = tornado.escape.json_decode(self.request.body)
message = update['message']
text = message.get('text')
if text:
logging.info("MESSAGE\t%s\t%s" % (message['chat']['id'], text))
if text[0] == '/':
command, *arguments = text.split(" ", 1)
response = CMD.get(command, not_found)(arguments, message)
logging.info("REPLY\t%s\t%s" % (message['chat']['id'], response))
send_reply(response)
except Exception as e:
logging.warning(str(e))
Здесь CMD — словарь доступных команд, а send_reply — функция отправки ответа, которая на вход принимает уже сформированный объект Message.
Собственно, её код довольно прост:
def send_reply(response):
if 'text' in response:
api.post(URL + "sendMessage", data=response)
Теперь, когда вся логика бота описана можно начать придумывать ему команды.
3. Команды
Перво-наперво, необходимо соблюсти соглашение Telegram и научить бота двум командам: /start и /help:
def help_message(arguments, message):
response = {'chat_id': message['chat']['id']}
result = ["Hey, %s!" % message["from"].get("first_name"),
"\rI can accept only these commands:"]
for command in CMD:
result.append(command)
response['text'] = "\n\t".join(result)
return response
Структура message[‘from’] — это объект типа User, она предоставляет боту информацию как id пользователя, так и его имя. Для ответов же полезнее использовать message[‘chat’][‘id’] — в случае личного общения там будет User, а в случае чата — id чата. В противном случае можно получить ситуацию, когда пользователь пишет в чат, а бот отвечает в личку.
Команда /start без параметров предназначена для вывода информации о боте, а с параметрами — для идентификации. Полезно её использовать для действий, требующих авторизации.
После этого можно добавить какую-нибудь свою команду, например, /base64:
def base64_decode(arguments, message):
response = {'chat_id': message['chat']['id']}
try:
response['text'] = b64decode(" ".join(arguments).encode("utf8"))
except:
response['text'] = "Can't decode it"
finally:
return response
Для пользователей мобильного Telegram, будет полезно сказать @BotFather, какие команды принимает наш бот:
I: /setcommands
BotFather : Choose a bot to change the list of commands.
I: @******_bot
BotFather: OK. Send me a list of commands for your bot. Please use this format:
command1 - Description
command2 - Another description
I:
whoisyourdaddy - Information about author
base64 - Base64 decode
BotFather: Success! Command list updated. /help
C таким описанием, если пользователь наберет /, Telegram услужливо покажет список всех доступных команд.
4. Свобода
Как можно было заметить, Telegram присылает сообщение целиком, а не разбитое, и ограничение на то, что команды начинаются со слеша — только для удобства мобильных пользователей. Благодаря этому можно научить бота немного говорить по-человечески.
UPD: Как верно подсказали, такое пройдет только при личном общении. В чатах боту доставляются только сообщения, начинающиеся с команды (/<command>) (https://core.telegram.org/bots#privacy-mode)
- All messages that start with a slash ‘/’ (see Commands above)
- Messages that mention the bot by username
- Replies to the bot’s own messages
- Service messages (people added or removed from the group, etc.)
Чтобы бот получал все сообщения в группах пишем @BotFather команду /setprivacy и выключаем приватность.
Для начала в Handler добавляем обработчик:
if text[0] == '/':
...
else:
response = CMD["<speech>"](message)
logging.info("REPLY\t%s\t%s" % (message['chat']['id'], response))
send_reply(response)
А потом в список команд добавляем псевдо-речь:
RESPONSES = {
"Hello": ["Hi there!", "Hi!", "Welcome!", "Hello, {name}!"],
"Hi there": ["Hello!", "Hello, {name}!", "Hi!", "Welcome!"],
"Hi!": ["Hi there!", "Hello, {name}!", "Welcome!", "Hello!"],
"Welcome": ["Hi there!", "Hi!", "Hello!", "Hello, {name}!",],
}
def human_response(message):
leven = fuzzywuzzy.process.extract(message.get("text", ""), RESPONSES.keys(), limit=1)[0]
response = {'chat_id': message['chat']['id']}
if leven[1] < 75:
response['text'] = "I can not understand you"
else:
response['text'] = random.choice(RESPONSES.get(leven[0])).format_map(
{'name': message["from"].get("first_name", "")}
)
return response
Здесь эмпирическая константа 75 относительно неплохо отражает вероятность того, что пользователь всё-таки хотел сказать. А format_map — удобна для одинакового описания строк как требующих подстановки, так и без нее. Теперь бот будет отвечать на приветствия и иногда даже обращаться по имени.
5. Не текст.
Боты, как и любой нормальный пользователь Telegram, могут не только писать сообщения, но и делиться картинками, музыкой, стикерами.
Для примера расширим словарь RESPONSES:
RESPONSES["What time is it?"] = ["<at_sticker>", "{date} UTC"]
И будем отлавливать текст <at_sticker>:
if response['text'] == "<at_sticker>":
response['sticker'] = "BQADAgADeAcAAlOx9wOjY2jpAAHq9DUC"
del response['text']
Видно, что теперь структура Message уже не содержит текст, поэтому необходимо модифицировать send_reply:
def send_reply(response):
if 'sticker' in response:
api.post(URL + "sendSticker", data=response)
elif 'text' in response:
api.post(URL + "sendMessage", data=response)
И все, теперь бот будет время от времени присылать стикер вместо времени:
6. Возможности
Благодаря удобству API и быстрому старту боты Telegram могут стать хорошей платформой для автоматизации своих действий, настройки уведомлений, создания викторин и task-based соревнований (CTF, DozoR и прочие).
Вспоминая статью про умный дом, могу сказать, что теперь извращений меньше, а работа прозрачнее.
7. Ограничения
К сожалению, на данный момент существует ограничение на использование webHook — он работает только по https и только с валидным сертификатом, что, например для меня пока критично за счет отсутствия поддержки сертифицирующими центрами динамических днс.
К счастью, Telegram также умеет работать и по ручному обновлению, поэтому не меняя кода можно создать еще одну службу Puller, которая будет выкачивать их и слать на локальный адрес:
while True:
r = requests.get(URL + "?offset=%s" % (last + 1))
if r.status_code == 200:
for message in r.json()["result"]:
last = int(message["update_id"])
requests.post("http://localhost:8888/",
data=json.dumps(message),
headers={'Content-type': 'application/json',
'Accept': 'text/plain'}
)
else:
logging.warning("FAIL " + r.text)
time.sleep(3)
P.S. По пункту 7 нашел удобное решение — размещение бота не у себя, а на heroku, благо все имена вида *.herokuapp.com защищены их собственным сертификатом.
UPD: Telegram улучшили Бот Апи, из-за чего, теперь не обязательно иметь отдельную функцию для отправки сообщений при установленном вебхуке, а в ответ на POST запрос можно отвечать тем же сформированным JSON с ответным сообщением, где одно из полей устанавливается как ч ‘method’: ‘sendMessage’ (или любой другой метод, используемый ботом).
Вы можете самостоятельно создать бота в Telegram без программирования. Повторите действия по инструкции и бесплатно запустите своего первого чат-бота уже через 15 минут.
Создадим бота, который будет приветствовать, задавать вопрос с вариантами ответов и реагировать на нажатие на кнопок.
Шаг 1. Создайте аккаунт разработчика
1. Зарегистрируйтесь на botmother.com с помощью электронной почты (на нее придет письмо с подтверждением) или войдите через Google.
2. Нажмите кнопку «Создать нового бота» (справа внизу).
3. Выберите «Пустой бот».
Перед вами откроется конструктор— это место, где можно разрабатывать бота и добавлять функции.
Слева находится меню с разделами конструктора. Справа — вкладка с компонентами и экранами. По центру — рабочая зона для разработки. В левом нижнем углу — виджет обратной связи. Если возникнут трудности, пишите в поддержку.
Логика бота создается с помощью экранов— это сообщения бота (шаги, этапы), внутри которых могут быть различные функции. Автоматически создается «Стартовый экран» — первое сообщение от бота.
На каждый экран можно добавлять компоненты— это функции и действия бота (например, отправление текста, картинок, кнопок и т.д.).
Все компоненты расположены на вкладке справа.
Шаг 2. Создайте приветствие
1. На вкладке «Компоненты» нажмите на компонент «Сообщение» и перетяните его на экран.
2. Напишите любой текст. Например, «Привет! Это мой первый бот».
3. Нажмите зеленую кнопку «Сохранить» (справа внизу).
Шаг 3. Подключите бота к мессенджеру
В Telegram чат-боты создаются с помощью специального бота @BotFather. Через него можно управлять данными бота, добавить описание, аватар и т.д.
Создадим бота и придумаем ему название:
2. Напишите ему /newbot.
3. Придумайте и напишите название бота. Оно будет отображаться в контактах и чатах. Например, «Hello, bot».
4. Придумайте и напишите юзернейм. Он используется для упоминания бота и в ссылках. Юзернейм должен быть на латинице и обязательно заканчиваться на «bot». Например, «botmother_hello_bot».
Теперь нужно подключить бота в Telegram к вашему аккаунту разработчика:
2. Скопируйте токен бота.
3. Вернитесь в конструктор, найдите и откройте в меню слева раздел «Настройки».
4. Переключателем включите платформу Telegram.
5. Нажмите кнопку «Изменить».
6. Вставьте ранее скопированный токен бота.
7. Сохраните изменения.
Теперь бот подключен к конструктору, а значит, он может отвечать всем пользователям. Протестируем?
1. Найдите в поиске Telegram своего бота по юзернейму.
2. Нажмите «Начать» (или «Start»). Бот должен отправить приветственное сообщение.
Отлично! Ваш бот умеет отправлять сообщение.
Шаг 4. Добавьте дополнительные функции
Усложним бота. Пусть он задает вопрос с вариантами ответов и присылает разные сообщения в зависимости от выбора пользователя.
Например:
Текст: Как дела?
Первая кнопка: Хорошо
Вторая кнопка: Плохо
Для этого добавим еще два экрана, кнопки и изображение:
1. Откройте конструктор.
2. Добавьте два новых экрана. Для этого нажмите кнопку «Добавить экран» дважды.
3. Сохраните изменения.
Можно изменить названия добавленных экранов двойным кликом:
1. Два раза кликните на названия экранов.
2. Отредактируй тексты. Например, «Экран Хорошо» и «Экран Плохо».
Добавим кнопки, на которые пользователи смогут нажимать:
1. Переместите компонент «Кнопки» на «Стартовый экран».
2. Напишите текст. Например, «Как дела?».
3. Добавьте две кнопки.
4. Напишите тексты на кнопках. Например, «Экран Хорошо» и «Экран Плохо».
Каждая кнопка должна вести на определенный экран, который указывается в настройках кнопки:
1. Нажмите на первую кнопку.
2. В поле «Переход на экран» выберите экран «Экран Хорошо».
3. Нажмите на вторую кнопку.
4. Выберите другой экран — «Экран Плохо».
5. Сохраните изменения.
Итак, на «Стартовом экране» пользователь нажимает на кнопки и попадает на разные экраны. Нужно заполнить их контентом:
1. Переместите компонент «Изображение» на экран «Экран Хорошо».
2. Загрузите любую картинку или вставьте ссылку на изображение.
3. Сохраните изменения.
Теперь заполним следующий экран:
1. Переместите компонент «Сообщение» на экран «Экран Плохо».
2. Напишите текст. Например, «Не унывай, все будет хорошо!». Можно добавить эмодзи.
3. Сохраните изменения.
Все готово!
Шаг 5. Протестируйте бота
У нас получился такой сценарий: бот приветствует пользователя и задает вопрос с вариантами ответов; пользователь нажимает кнопку, и бот присылает определенное сообщение. Давайте протестируем!
1. Откройте своего бота.
2. Напишите команду /start.
3. Понажимайте на кнопки.
Поздравляем!
Вы создали своего бота и можете поделиться им с друзьями. Как видите, создавать ботов легко и просто. В конструкторе богатый функционал, позволяющий создавать самых разных ботов: для автоматизации, маркетинга, продаж, развлечений и много других.
Можете поэкспериментировать с ботом: изменить тексты, добавить новые экраны и компоненты или изменить сценарий. Дополнительную информацию можно найти в базе знаний, а вопросы пишите через виджет обратной связи.
This guide will walk you through everything you need to know to build your first Telegram Bot.
If you already know your way around some of the basic steps, you can jump directly to the part you’re missing. Equivalent examples are available in C#, Python, Go and TypeScript .
- Introduction
- Basic Tutorial
- Environment
- First Run
- Echo Bot
- Advanced Tutorial
- Commands
- Navigation
- Database
- Hosting
- Further Reading
Introduction
At its core, you can think of the Telegram Bot API as software that provides JSON-encoded responses to your queries.
A bot, on the other hand, is essentially a routine, software or script that queries the API by means of an HTTPS request and waits for a response. There are several types of requests you can make, as well as many different objects that you can use and receive as responses.
Since your browser is capable of sending HTTPS requests, you can use it to quickly try out the API. After obtaining your token, try pasting this string into your browser:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getMe
In theory, you could interact with the API with basic requests like this, either via your browser or other tailor-made tools like cURL. While this can work for simple requests like the example above, it’s not practical for larger applications and doesn’t scale well.
For that reason, this guide will show you how to use libraries and frameworks, along with some basic programming skills, to build a more robust and scalable project.
If you know how to code, you’ll fly right through each step in no time – and if you’re just starting out, this guide will show you everything you need to learn.
We will use Java throughout this guide as it’s one of the most popular programming languages, however, you can follow along with any language as all the steps are fundamentally the same.
Since Java is fully cross-platform, each code example will work with any operating system.
If you pick another language, equivalent examples are available in C#, Python, Go and TypeScript .
Getting Ready
First, we will briefly cover how to create your first project, obtain your API token and download all necessary dependencies and libraries.
For the purposes of this guide, a copy of the bot you will be creating is also live at @TutorialBot – feel free to check it out along the way to see how your own implementation should look after each step.
Obtain Your Bot Token
In this context, a token is a string that authenticates your bot (not your account) on the bot API. Each bot has a unique token which can also be revoked at any time via @BotFather.
Obtaining a token is as simple as contacting @BotFather, issuing the /newbot
command and following the steps until you’re given a new token. You can find a step-by-step guide here.
Your token will look something like this:
4839574812:AAFD39kkdpWt3ywyRZergyOLMaJhac60qc
Make sure to save your token in a secure place, treat it like a password and don’t share it with anyone.
Download an IDE
To program in Java you’ll need an IDE – a special text editor that will let you write, compile and run your code.
In this tutorial, we’ll use IntelliJ – there are several free, open source alternatives like Eclipse or NetBeans which work in the exact same way.
You will also need a JDK, a software kit that allows your Java code to run.
Most IDEs don’t include a JDK, so you should download a version compatible with your operating system separately. You can find a free, open source version here.
If you use another language, the steps are identical. You will just have to download a different IDE and software development kit.
Pick a Framework or Library
You can think of a framework as software that handles all the low-level logic for you, including the API calls, and lets you focus on your bot-specific logic.
In this tutorial, we’ll use TelegramBots, but you can follow along with any equivalent implementation, since all the underlying methods are either similar or exactly the same.
You can find many frameworks, along with code examples, in our dedicated list.
Create Your Project
In IntelliJ, go to File > New > Project
.
Fill in the fields accordingly:
- Name — The name of your project. For example, BotTutorial.
- Location — Where to store your project. You can use the default value.
- Language — Java
- Build System — The framework that will handle your dependencies. Pick Maven.
- JDK — Pick whichever version you downloaded. We’ll be using version 17.
- Add Sample Code — Leave this selected, it will generate some needed files for you.
- Advanced Settings > GroupId — We suggest tutorial.
- Advanced Settings > ArtifactId — You can use the default value.
After hitting Create, if you did everything correctly, your Project view in the top left should show a project structure along these lines:
BotTutorial
├─ .idea
├─ src
│ └─ main
│ └─ java
│ └─ tutorial
│ └─ Main
└─ pom.xml
Other IDEs will follow a similar pattern. Your dependency management system will have a different name (or no name at all if it’s built-in) depending on the language you chose.
If this looks scary, don’t worry. We will only be using the Main
file and the pom.xml
file.
In fact, to check that everything is working so far, double click on Main and click on the small green arrow on the left of public class Main, then select the first option.
If you followed the steps correctly, Hello world! should appear in the console below.
Add Framework Dependency
We will now instruct the IDE to download and configure everything needed to work with the API.
This is very easy and happens automatically behind the scenes.
First, locate your pom.xml
file on the left side of the screen.
Open it by double-clicking and simply add:
<dependencies>
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>6.0.1</version>
</dependency>
</dependencies>
right after the </properties>
tag.
When you’re done, your pom.xml
should look something like this.
Start Coding
We are ready to start coding. If you’re a beginner, consider that being familiar with your language of choice will greatly help. With this tutorial, you’ll be able to teach your bot basic behaviors, though more advanced features will require some coding experience.
Creating a Bot Class
If you’re familiar with object-oriented programming, you’ll know what a class is.
If you’ve never heard of it before, consider a class as a file where you write some logic.
To create the class that will contain the bot logic, right click on tutorial from the project tree on the left and select New > Java Class. Name it Bot and hit enter.
Now we have to connect this class to the bot framework. In other words, we must make sure it extends TelegramLongPollingBot
. To do that, just add extends TelegramLongPollingBot right after Bot.
A red line will appear – it simply means we’re missing some important methods.
To fix this, hover over the red line, click on implement methods, then hit OK.
Depending on the IDE, this option may be called implement missing methods or something similar.
You should end up with this – if something went wrong, feel free to copy it from here and paste it in your class:
package tutorial;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;
public class Bot extends TelegramLongPollingBot {
@Override
public String getBotUsername() {
return null;
}
@Override
public String getBotToken() {
return null;
}
@Override
public void onUpdateReceived(Update update) {}
}
If you get a red line under TelegramLongPollingBot, it means you didn’t set up your pom.xml correctly. If this is the case, restart from here.
Available Methods
Let’s look into these 3 methods one by one.
- getBotUsername — This method must be edited to always return your bot’s username. You should replace the null return value with it.
- getBotToken — This method will be used by the framework to retrieve your bot token. You should replace the null return value with the token.
- onUpdateReceived — This is the most important method. It will be called automatically whenever a new Update is available. Let’s add a
System.out.println(update);
call in there to quickly show what we are getting.
After you’ve replaced all the strings, you should end up with this:
@Override
public String getBotUsername() {
return "TutorialBot";
}
@Override
public String getBotToken() {
return "4839574812:AAFD39kkdpWt3ywyRZergyOLMaJhac60qc";
}
@Override
public void onUpdateReceived(Update update) {
System.out.println(update);
}
At this point, the bot is configured and ready to go – time to register it on the API and start processing updates.
In the future, you should consider storing your token in a dedicated settings file or in environment variables. Keeping it in the code is fine for the scope of this tutorial, however, it’s not very versatile and is generally considered bad practice.
Registering the Bot
To register the bot on the API, simply add a couple of lines in the main method that will launch the application. If you named your class Bot
, this is what your main method should look like:
public static void main(String[] args) throws TelegramApiException {
TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class);
botsApi.registerBot(new Bot());
}
You can place this method in any class. Since we have an auto-generated
main
method in the Main class, we’ll be using that one for this tutorial.
First Run
It’s time to run your bot for the first time.
Hit the green arrow to the left of public static void main
and select the first option.
And then there was nothing. Yes, a bit anticlimactic.
This is because your bot has nothing to print – there are no new updates because nobody messaged it yet.
If you try messaging the bot on Telegram, you’ll then see new updates pop up in the console. At this point, you have your very own Telegram Bot – quite the achievement. Now, on to making it a bit more intelligent.
If nothing pops up, make sure you messaged the right bot and that the token you pasted in the code is correct.
Receiving Messages
Every time someone sends a private message to your bot, your onUpdateReceived
method will be called automatically and you’ll be able to handle the update
parameter, which contains the message, along with a great deal of other info which you can see detailed here.
Let’s focus on two values for now:
- The user — Who sent the message. Access it via
update.getMessage().getFrom()
. - The message — What was sent. Access it via
update.getMessage()
.
Knowing this, we can make it a bit more clear in the console output.
@Override
public void onUpdateReceived(Update update) {
var msg = update.getMessage();
var user = msg.getFrom();
System.out.println(user.getFirstName() + " wrote " + msg.getText());
}
This is just a basic example – you can now play around with all the methods to see everything you can pull out of these objects. You can try getUsername
, getLanguageCode
, and dozens more.
Knowing how to receive, process and print incoming messages, now it’s time to learn how to answer them.
Remember to stop and re-launch your bot after each change to the code.
Sending Messages
To send a private text message, you generally need three things:
- The user must have contacted your bot first. (Unless the user sent a join request to a group where your bot is an admin, but that’s a more advanced scenario).
- You must have previously saved the User ID (
user.getId()
) - A
String
object containing the message text, 1-4096 characters.
With that out of the way, let’s create a new method to send the first message:
public void sendText(Long who, String what){
SendMessage sm = SendMessage.builder()
.chatId(who.toString()) //Who are we sending a message to
.text(what).build(); //Message content
try {
execute(sm); //Actually sending the message
} catch (TelegramApiException e) {
throw new RuntimeException(e); //Any error will be printed here
}
}
And proceed to run this in the main
method, right after registering the bot.
For this example, we’ll assume your User ID is 1234
.
public static void main(String[] args) throws TelegramApiException {
TelegramBotsApi botsApi = new TelegramBotsApi(DefaultBotSession.class);
Bot bot = new Bot(); //We moved this line out of the register method, to access it later
botsApi.registerBot(bot);
bot.sendText(1234L, "Hello World!"); //The L just turns the Integer into a Long
}
If you did everything correctly, your bot should text you Hello World! every time you launch your code. Sending messages to groups or channels – assuming you have the relevant permissions – is as simple as replacing 1234
with the ID of the respective chat.
Try experimenting with other types of messages, like SendPhoto, SendSticker, SendDice…
A full list is available starting here.
Echo Bot
Let’s practice everything we tried so far by coding an Echo Bot.
Its functionality will be rather simple: every text message it receives will be sent right back to the user.
Copying Text
The most intuitive way of coding this is saving the User ID and calling sendText
right after each update.
In other words:
@Override
public void onUpdateReceived(Update update) {
var msg = update.getMessage();
var user = msg.getFrom();
var id = user.getId();
sendText(id, msg.getText());
}
This works for text but can be extended to stickers, media and files.
Copying Everything
There are more specific functions that can be used to copy messages and send them back.
Let’s build a method to do just that:
public void copyMessage(Long who, Integer msgId){
CopyMessage cm = CopyMessage.builder()
.fromChatId(who.toString()) //We copy from the user
.chatId(who.toString()) //And send it back to him
.messageId(msgId) //Specifying what message
.build();
try {
execute(cm);
} catch (TelegramApiException e) {
throw new RuntimeException(e);
}
}
After replacing the method call inonUpdateReceived
, running the code will result in a fully functional Echo Bot.
This tutorial assumes that updates always contain messages for the sake of simplicity. This may not always be true – be sure to implement all the proper checks in your code to handle every type of update with the appropriate methods.
Executing Commands
To learn what a command is and how it works, we recommend reading this dedicated summary.
In this guide, we’ll focus on the technical side of things.
Creating Your Command
Begin by opening @BotFather.
Type /mybots
> Your_Bot_Name > Edit Bot > Edit Commands.
Now send a new command, followed by a brief description.
For the purpose of this tutorial, we’ll implement two simple commands:
scream - Speak, I'll scream right back
whisper - Shhhhhhh
Command Logic
We want the Echo Bot to reply in uppercase when it’s in scream mode and normally otherwise.
First, let’s create a variable to store the current mode.
public class Bot extends TelegramLongPollingBot {
private boolean screaming = false;
[...]
}
Then, let’s change some logic to account for this mode.
public void onUpdateReceived(Update update) {
[...] //Same variables as the previous versions
if(screaming) //If we are screaming
scream(id, update.getMessage()); //Call a custom method
else
copyMessage(id, msg.getMessageId()); //Else proceed normally
}
private void scream(Long id, Message msg) {
if(msg.hasText())
sendText(id, msg.getText().toUpperCase());
else
copyMessage(id, msg.getMessageId()); //We can't really scream a sticker
}
Finally, let’s add a couple more lines to the onUpdateReceived
method to process each command before replying.
if(msg.isCommand()){
if(msg.getText().equals("/scream")) //If the command was /scream, we switch gears
screaming = true;
else if (msg.getText().equals("/whisper")) //Otherwise, we return to normal
screaming = false;
return; //We don't want to echo commands, so we exit
}
As you can see, it checks if the message is a command. If it is, the bot enters scream mode.
In the update method, we check which mode we are in and either copy the message or convert it to upper case before sending it back.
And that’s it. Now the bot can execute commands and change its behavior accordingly.
Naturally, this simplified logic will change the bot’s behavior for everyone – not just the person who sent the command. This can be fun for this tutorial but won’t work in a production environment – consider using a Map, dictionary or equivalent data structure to assign settings for individual users.
Remember to always implement a few basic global commands.
You can practice by implementing a simple feedback to the/start
command, which we intentionally left out.
Buttons and Keyboards
To streamline and simplify user interaction with your bot, you can replace many text-based exchanges with handy buttons. These buttons can perform a wide variety of actions and can be customized for each user.
Button Types
There are two main types of buttons:
- Reply Buttons — used to provide a list of predefined text reply options.
- Inline Buttons — used to offer quick navigation, shortcuts, URLs, games and so much more.
Using these buttons is as easy as attaching a ReplyKeyboardMarkup
or an InlineKeyboardMarkup
to your SendMessage
object.
This guide will focus on inline buttons since they only require a few extra lines of code.
Creating Buttons
First of all, let’s create some buttons.
var next = InlineKeyboardButton.builder()
.text("Next").callbackData("next")
.build();
var back = InlineKeyboardButton.builder()
.text("Back").callbackData("back")
.build();
var url = InlineKeyboardButton.builder()
.text("Tutorial")
.url("https://core.telegram.org/bots/api")
.build();
Let’s go back through the fields we specified:
- Text — This is what the user will see, the text that appears on the button
- Callback Data — This will be sent back to the code instance as part of a new
Update
, so we can quickly identify what button was clicked. - Url — A button that specifies a URL doesn’t specify callbackdata since its behavior is predefined – it will open the given link when tapped.
Creating Keyboards
The buttons we created can be assembled into two keyboards, which will then be used to navigate back and forth between two sample menus.
First, add two fields to store the necessary keyboards.
private boolean screaming = false;
private InlineKeyboardMarkup keyboardM1;
private InlineKeyboardMarkup keyboardM2;
Then, build and assign them.
keyboardM1 = InlineKeyboardMarkup.builder()
.keyboardRow(List.of(next)).build();
//Buttons are wrapped in lists since each keyboard is a set of button rows
keyboardM2 = InlineKeyboardMarkup.builder()
.keyboardRow(List.of(back))
.keyboardRow(List.of(url))
.build();
You can place this code wherever you prefer, the important thing is making sure that keyboard variables are accessible from the method call that will send the new menu. If you’re confused by this concept and don’t know where to put them, just paste them above the command processing flow.
Sending Keyboards
Sending a keyboard only requires specifying a reply markup for the message.
public void sendMenu(Long who, String txt, InlineKeyboardMarkup kb){
SendMessage sm = SendMessage.builder().chatId(who.toString())
.parseMode("HTML").text(txt)
.replyMarkup(kb).build();
try {
execute(sm);
} catch (TelegramApiException e) {
throw new RuntimeException(e);
}
}
You may have noticed that we also added a new parameter,
HTML
.
This is called a formatting option and will allow us to use HTML tags and add formatting to the text later on.
Menu Trigger
We could send a new menu for each new user, but for simplicity let’s add a new command that will spawn a menu. We can achieve this by adding a new else clause to the previous command flow.
var txt = msg.getText();
if(msg.isCommand()) {
if (txt.equals("/scream"))
screaming = true;
else if (txt.equals("/whisper"))
screaming = false;
else if (txt.equals("/menu"))
sendMenu(id, "<b>Menu 1</b>", keyboard1);
return;
}
Try sending /menu
to your bot now. If you did everything correctly, you should see a brand new menu pop up.
In a production environment, commands should be handled with an appropriate design pattern that isolates them into different executor classes – modular and separated from the main logic.
Navigation
When building complex bots, navigation is essential. Your users must be able to move seamlessly from one menu to the next.
In this example, we want the Next
button to lead the user to the second menu.
The Back
button will send us back.
To do that, we will start processing incoming CallbackQueries
, which are the results we get after the user taps on a button.
A CallbackQuery
is essentially composed of three main parameters:
- queryId — Needed to close the query. You must always close new queries after processing them – if you don’t, a loading symbol will keep showing on the user’s side on top of each button.
- data — This identifies which button was pressed.
- from — The user who pressed the button.
Processing in this context just means executing the action uniquely identified by the button, then closing the query.
A very basic button handler could look something like:
private void buttonTap(Long id, String queryId, String data, int msgId) {
EditMessageText newTxt = EditMessageText.builder()
.chatId(id.toString())
.messageId(msgId).text("").build();
EditMessageReplyMarkup newKb = EditMessageReplyMarkup.builder()
.chatId(id.toString()).messageId(msgId).build();
if(data.equals("next")) {
newTxt.setText("MENU 2");
newKb.setReplyMarkup(keyboardM2);
} else if(data.equals("back")) {
newTxt.setText("MENU 1");
newKb.setReplyMarkup(keyboardM1);
}
AnswerCallbackQuery close = AnswerCallbackQuery.builder()
.callbackQueryId(queryId).build();
execute(close);
execute(newTxt);
execute(newKb);
}
With this handler, whenever a button is tapped, your bot will automatically navigate between inline menus.
Expanding on this concept allows for endless combinations of navigable submenus, settings and dynamic pages.
Database
Telegram does not host an update database for you – once you process and consume an update, it will no longer be available. This means that features like user lists, message lists, current user inline menu, settings, etc. have to be implemented and maintained by bot developers.
If your bot needs one of these features and you want to get started on data persistence, we recommend that you look into serialization practices and libraries for your language of choice, as well as available databases.
Implementing a database is out of scope for this guide, however, several guides are available online for simple embedded open source software solutions like SQLite, HyperSQL, Derby and many more.
Your language of choice will also influence which databases are available and supported – the list above assumes you followed this Java tutorial.
Hosting
So far, your bot has been running on your local machine – your PC. While this may be good for developing, testing and debugging, it is not ideal for a production environment.
You’ll want your bot to be available and responsive at all times, but your computer might not always be online.
This can be done in four steps:
-
Package your code
Making your bot easy to move and runnable outside of an IDE is essential to host it elsewhere.
If you followed this tutorial, this standard guide will work for you. If you didn’t, look into export or packaging guides for your IDE and language of choice – procedures may vary but the end result is the same. -
Purchase a VPS or equivalent service
A server is essentially a machine that is always online and running, without you having to worry about anything. To host your bot, you can opt for a VPS which serves this purpose and can be rented from several different providers.
Another option would be to purchase a network-capable microcontroller, which come in all different specs and sizes depending on your needs.
You should ensure that all user data remains heavily encrypted at all times in your database to guarantee the privacy of your users. The same concept applies to your local instance, however, this becomes especially important once you transfer your database to a remote server.
- Upload your executable/package
Once you have a working ssh connection between your machine and your new server, you should upload your executable and all associated files.
We will assume the runnable jar TutorialBot.jar
and its database dbase.db
are currently in the /TBot
folder.
$ scp -r /TBot/ username@server_ip:/bots/TBotRemote/
- Run your application
Depending on which language you chose, you might have to configure your server environment differently. If you chose Java, you just need to install a compatible JDK.
$ apt install openjdk-17-jre
$ java -version
If you did everything correctly, you should see a Java version as the output, along with a few other values. This means you’re ready to run your application.
Now, to run the executable:
$ cd /bots/TBotRemote/
$ java -jar TutorialBot.jar
Your bot is now online and users can interact with it at any time.
To streamline and modularize this process, you could employ a specialized docker container or equivalent service.
If you followed along in one of the equivalent examples (C#, Python, Go and TypeScript) you can find a detailed set of instructions to export and run your code here.
Further Reading
If you got this far, you might be interested in these additional guides and docs:
- General Bot Platform Overview
- Detailed List of Bot Features
- Full API Reference
If you encounter any issues while following this guide, you can contact us on Telegram at @BotSupport.
Если вы устали вручную рассылать подписчикам новые коллекции, не можете больше отвечать на стандартные вопросы и вообще хотели бы перепоручить это кому-то другому – создайте своего бота в Телеграме.
В статье подробно расскажем, как это сделать за пару часов. Погнали.
Содержание
- Зачем нужен бот в Телеграме
- Как сделать бота в Телеграме
- Как настроить нового бота с помощью Manybot
- Как выглядит готовый к использованию бот
Зачем нужен бот в Телеграме
Потратьте немного времени и сделайте бесплатного бота в Телеграме, чтобы освободить себя от рутинной работы. Этот маленький помощник будет выполнять простую работу по общению с пользователями: разговаривать с ними, отправлять новые коллекции и отвечать на стандартные вопросы 24/7. Он не устает и не оставляет без внимания сообщения подписчиков, всегда отвечает им и создает уютную атмосферу, пока владелец занят более важными задачами.
И это только маленькая часть того, что он может. Его в любой момент можно донастроить и добавить новые функции, изменить любую часть бота и перенастроить ответы. Робота можно постоянно поддерживать в актуальном состоянии.
Бот в Телеграме помогает подписчикам:
- искать информацию;
- читать и скачивать текстовые файлы;
- искать и смотреть видео;
- искать и слушать аудио;
- комментировать статьи внутри мессенджера;
- учиться – например, учить новые слова на иностранном языке.
Кроме того, бот умеет:
- развлекать;
- проводить конкурсы и опросы подписчиков;
- показывать новости вашей группы, бизнеса, мира, чего угодно;
- отвечать на вопросы;
- рассылать сообщения подписчикам;
- напоминать о встречах, помогать договариваться и организовывать их;
- участвовать в групповых чатах;
- выдавать информацию о товарах.
Это только популярная часть функций, которые подключают к ботам разные магазины и чаты в Телеграме. Что именно добавите вы – зависит от направления и требований вашего бизнеса.
В Телеграме и других соцсетях можно публиковать посты через сервис отложенного постинга SMMplanner. Вы можете планировать публикации одновременно в ВК, Одноклассники, другие соцсети и Телеграм. Это очень удобно – оцените сами. Тестировать весь функционал можно бесплатно в течение 2 недель после регистрации по ссылке – SMMplanner.
Подробно о том, как настроить автопостинг и зачем он нужен, – в статье «Автопостинг в Телеграме: боты, сервисы, возможности».
Одно из главных преимуществ любого бота в Телеграме – его не нужно устанавливать на устройство. Он работает прямо в мессенджере и там остается всегда.
Есть много способов создать бота в Телеграме: на телефоне или ПК, платных и бесплатных, с помощью программирования или конструкторов. А можно – вообще без знания кодов, на телефоне за пару часов.
Мы расскажем вам о бесплатном и самом простом способе создать бота в Телеграме самостоятельно. Подготовьте телефон, листайте вниз и приятного чтения.
Как сделать бота в Телеграме с помощью телефона
Заходим в Телеграм, в строке «Поиск» находим BotFather – это конструктор чат-ботов в Телеграме, нажимаем «Старт».
Единственный минус этого бота в том, что он будет общаться с вами на английском языке. Ничего страшного в этом нет, мы поможем вам разобраться, как с его помощью сделать бота в Телеграме для сообщений и не только. Команды у него интуитивные, так что проблем возникнуть не должно.
Бот пришлет сообщение, что поможет создать и управлять вашими ботами. А чтобы создать нового, нужно нажать на /newbot.
Главный бот предложит вам придумать имя для вашего бота, которое будут видеть все и смогут по этому имени находить его. Название для своего робота вы можете подобрать в зависимости от того, чем вы занимаетесь и какого бота хотите создать. Вообще, название может быть любым. Обязательное правило – чтобы оно было уникальным. Также желательно, чтобы название было понятным.
Если придуманное имя уже существует, BotFather предложит придумать другое, уникальное.
В нашем случае тренировочный бот выступает в качестве магазина одежды. Поэтому мы дали ему название – Showroom «Чёткие шмотки».
После того, как новый бот получил свое имя, а BotFather его принял, он предложит придумать никнейм – это будет ссылка на нового робота в Телеграмме. В нашем случае мы просто перевели название на английский и отправили главному боту.
Робот родился, но он еще ничего не умеет. Ему еще предстоит научиться говорить и ходить.
У каждого бота есть токен – уникальная строка из символов, которая нужна, чтобы установить подлинность робота в системе. Его следует скопировать и не терять.
Все остальное на английском и нам пока не нужно.
Далее листаем чат с BotFather вверх и находим там ссылку /mybots или вводим ее вручную. Выбираем нашего готового бота и нажимаем на него.
В этом разделе старший бот предлагает различные варианты действий с новичком, сейчас нас интересует настройка облика и команд бота.
Для первой настройки нужно нажать Edit Bot. В этом разделе можно редактировать:
- имя;
- описание;
- информацию;
- картинку бота.
На картинке мы видим, что у бота есть только имя. Описания, команд и картинки пока еще нет. Поэтому нам сейчас и предстоит наполнить нашего юного бота.
Как сделать приветствие в боте в Телеграме? Для создания/редактирования описания бота нужно нажать Edit Description, чтобы BotFather понял, что нам нужно изменить описание бота. После выбора этой функции главный бот пришлет сообщение с предложением ввести описание, которое увидят люди, когда откроют чат с новым ботом в блоке под названием «Что может делать этот бот?»
Создайте описание своего бота исходя из того, чем он будет заниматься. Вы в любой момент сможете сменить род деятельности вашего бота и заново наполнить его обязанностями, если что-то пойдет не так.
Мы придумали описание нашему боту. Когда мы заходим в чат, сразу видим его. Теперь бот умеет говорить, для чего он родился. Идем дальше.
После того, как мы придумали описание, выбираем Edit About, чтобы ввести информацию о боте.
BotFather пришлет сообщение с предложением создать описание программы, которое увидят пользователи, когда зайдут в профиль нового бота. Как сделать текст в боте Телеграма – вписать его и сохранить.
Информация о боте готова, текс можно увидеть в чате с BotFather на картинке. Переходим к созданию аватарки.
Выбираем кнопку Edit Botpic, затем нажимаем скрепку, чтобы выбрать фото из галереи и отправляем его главному боту. Также можно сделать фото и использовать его.
Постарайтесь выбрать интересный кадр, чтобы он иллюстрировал суть работы этого бота. Некоторые пользователи ставят картинки роботов, но это совершенно не информативно и смешивает бота с массой других безликих программ.
Аватарка готова. Теперь мы можем увидеть, что бот уже не такой, как был до этого. Робот стал лучше выглядеть, у него есть фото и текст с описанием. Всю эту информацию увидят пользователи – не только, когда они зайдут в профиль, но и когда они поделятся ссылкой на бота с другими людьми.
Пора научить новичка командам. Выбираем пункт меню Edit Commands и получаем от бота такое сообщение: «ОК. Пришлите мне список команд для вашего бота, используя этот формат: command1 – описание; command2 – другое описание. Либо отправьте /empty, чтобы список оставался пустым».
Вы можете создать все команды через BotFather или воспользоваться Manybot. С его помощью вы можете создать красивое меню, разослать сообщения пользователям своего бота, создать команды. И общается он на русском.
Мы создали одну команду и назвали ее «О нас» – для проверки работоспособности. А дальше для настройки действий, меню и команд перешли в Manybot. Так проще. Вы можете поступить как вам удобно.
В Телеграме можно сделать даже свои стикеры. Для бизнеса или для личного использования, порадовать клиентов или посмешить друзей – все на ваше усмотрение. О том, как их делать, мы говорили в статье «Как сделать свои стикеры в Телеграме».
Как настроить нового бота с помощью Manybot
В 2022 году есть еще один конструктор для чат-ботов в Телеграме. Находим Manybot, жмем «Старт» и после приветственного сообщения нажимаем «Добавить нового бота».
Manybot предложит вам перейти в чат с BotFather и скопировать токен своего бота.
Переходим, копируем, нажимаем «Я скопировал токен».
Описание деятельности
После того, как Manybot принял токен нового бота, он предложит коротко описать, чем будет заниматься вновь прибывший бот, но этот момент можно пропустить, нажав команду /skip, как это сделали мы. Тем более, что мы уже описывали это через БотаОтца.
Далее от Manybot придет сообщение, что новый бот создан и настроен. Затем он предложит отправить сообщение вашим подписчикам с ссылкой на вашего бота.
Отправка первого сообщения подписчикам
Конечно, вы можете нажать «Отправить новое сообщение подписчикам», создав какой-нибудь пост. Но какой в этом смысл, если бот еще новичок и ничего пока не умеет? Правильнее и логичнее будет сделать рассылку позже, когда бот будет готов выполнять команды и принимать гостей. Поэтому мы переходим к настройке команд.
Настройка команд
Нажимаем на имя нового бота и переходим в его чат. Теперь разберемся, как сделать меню в боте в Телеграме.
В чате выбираем пункт «Создать команду». Бот ответит вам, что вы можете создавать разные команды, на которые он будет отвечать заранее заданным образом.
Команда создается так же, как и в BotFather – вводим commands и номер. У нас команда уже пятая, так как мы тренировались и настраивали бота и его команды.
В зависимости от того, как вы настроете своего бота, он может отвечать своим подписчикам одним или несколькими сообщениями и любыми файлами.
После запроса commands нужно нажать «Добавить вопрос» и выбрать вариант вопроса.
Есть 3 типа вопросов:
- обычные;
- развернутые;
- с вариантами ответов.
Вы можете выбрать любой удобный. Бот все подробно и на русском языке поясняет.
Мы выбираем «Обычный вопрос», и наш бот будет отвечать любому подписчику, который пришлет ему текст, символ или даже картинку.
А что будет отвечать наш бот?
Даем произвольное название нашему обычному вопросу – «Головные уборы», загружаем картинку из галереи и нажимаем «Сохранить». То, что будет написано, покажется пользователям, которые будут запрашивать этот пункт.
Если понадобится отредактировать, нужно в меню бота выбрать пункт «Пользовательские команды» и выбрать ту команду, которую хотите изменить. В любой момент вы можете изменить название, режим и варианты ответов, настроить меню команды.
После сохранения команда готова, но у пользователей она не появится, когда они зайдут в меню. Для этого нужно настроить ее видимость.
Настройка видимости команды
Выбираем «Настроить гл. меню», а затем «Добавить пункт меню».
Вводим название пункта меню «Головные уборы», отправляем боту это сообщение, и готовый пункт с этим названием появляется в меню.
Остальные пункты меню были созданы ранее тем же способом. Чтобы поменять их местами, в этом же меню выбираем нужную для перемещения команду и с помощью кнопок, которые будут доступны, перемещаем.
Как выглядит готовый к использованию бот
Вот так выглядит наш готовый бот с аккаунта подписчика:
Выбираем команду «О нас», чтобы посмотреть, поймет ли читатель, куда попал. И получаем ответ от бота «О нашей компании».
Можно ему ответить любым текстом и получаем в ответ: «Пример текста. Наша компания занимается…» Это то, что мы указали в настройках. Вы можете здесь написать все что угодно о своей компании. Старайтесь рассказывать коротко, но понятно. Или просто вставьте ссылку на свой сайт, чтобы люди могли туда зайти и почитать подробнее. Перегружать чат многостраничными сообщениями об «активно развивающейся компании» не стоит, человек вряд ли пришел за этим. А если ему очень интересно, он почитает на сайте.
В зависимости от настроек команд и их описания, бот может долго присылать пользователям разные варианты картинок, ответов, ссылок – все, что вы в него заложите.
Чем больше вы настроите кнопок и зальете информации, тем больше пользователь сможет узнать от вашего бота. Вполне можно вместе с картинкой показывать подписчику карточку товара или ссылку на него, чтобы он мог сразу переходить к заказу.
Головные уборы рассмотрели, а что там в пункте «Одежда»? Он настроен аналогично предыдущему, присылает картинки и общается с пользователем. Можно настроить сложную ветвь вариантов ответов, ведущих к разным пунктам и папкам. В ней подписчик будет плавно переходить к покупке, подписке или регистрации.
Любое сообщение, например, с новой коллекцией товаров, может приходить подписчикам, если его разослать от имени бота. Мы говорили об этом в самом начале, нужно только кликнуть по кнопке и отправить его.
Если нужно подробно изучить чат-боты и рассылки в ВК, приходите на 14-дневный практический курс «Рассылки, чат-боты и автоворонки ВКонтакте» от SMM.school. Там научитесь автоматизировать работу с помощью Senler, запускать рассылки, прогревать и продавать во ВКонтакте. Это самое актуальное руководство по автоматическим инструментам для продвижения бизнеса в ВК на данный момент.
Мы разобрались, как создать и настроить бота в Телеграме, как сделать меню и настроить чат. Ваш бот получится еще более продуманным, ведь вы создадите его для конкретных целей, а не ради эксперимента. Создавайте бота и рассылайте сообщения подписчикам, а мы скоро расскажем в нашем блоге, как подключить его к вашему каналу и научить говорить в нем с подписчиками.
Изначально Telegram был обычным мессенджером для базовой отправки сообщений. Чуть позже он начал обрастать новыми функциями. Многим Телега начала заменять другие социальные сети и даже самые разные сервисы интернета.
На сегодняшний день, Телеграм — это огромный интернет-комбайн, где можно:
- Вести переписки, как в открытых чатах, так и в приватных (статья о секретном чате)
- Читать новости или потреблять другой контент с помощью каналов
- Загружать и скачивать файлы, тем более недавно появился менеджер загрузок
- Совершать купле-продажу разных типов товаров (даже писали об этом вот тут)
- Слушать музыку
Практически во всех вышеперечисленных случаях помогают именно боты. Например, для прослушивания музыки помогает бот, который переносит музыку из плейлистов ВКонтакте и загружает в свой канал. А при продаже товаров запускается бот, с помощью которого можно листать список товаров, класть их в корзину и оттуда оформлять покупку.
Без помощи ботов это было бы сделать очень затруднительно. Если проще, то боты в Telegram автоматизируют какое-либо действие.
Впрочем, ранее мы уже писали о популярных ботах в Телеграме вот здесь.
Создание бота в Telegram: пошаговая инструкция
Итак, пойдем по порядку. Для создания своего бота нам понадобится юзернейм @BotFather, вот этот:
Нажимаем «Запустить», и в ответном сообщении сразу присылается меню. Оно на английском, но ничего сложного нет.
Выбираем /newbot, далее в сообщении пишем название своего нового бота.
Далее указываем username бота, по которому его можно будет найти, обязательно чтобы юзернейм заканчивался на «bot».
Наше рабочее название будет «GTOnidzuka_bot», далее мы его переименуем. Если юзернейм занят, то выбираем другой. Также BotFather присылает уникальный ключ, подобие пароля от бота, его никому нельзя показывать.
После того выбора имени нашего бота можно найти в поиске Телеграм или зайти на него по ссылке.
Теперь нам доступно редактирование бота. С помощью команд можно изменить аватарку, общее название, описания и т.д. Также в боковую кнопку «Меню» можно зашить ссылку на сайт или социальную сеть.
Основные команды в BotFather:
- /setname — изменить имя бота
- /setdescription — изменить описание бота
- /setuserpic — изменить аватарку бота
- /setcommands — задать команды для бота
- /deletebot — удалить бота
Наш бот создан и отображается в поиске, но пока еще ничего не умеет.
С помощью уникального токена и юзернейма бота можно подключить к различным сервисам и платформам.
Для нашей компании мы попробуем подключить бота через Manybot, он практически единственный позволяет пользоваться ботом для бизнеса бесплатно.
Для начала переходим на официальный сайт и пролистываем вниз страницы, где есть кнопка со ссылкой в Телеграм.
Итак, попадаем в Телегу к Manybot и там имеется русский интерфейс, что очень радует.
Тут нам и пригодится наш ранее скопированный ключ. Вставляем его в строку и отправляем. Далее нужно написать пару слов о том, что будет делать наш бот. У нас будет простой инфобот. Так и запишем.
Для теста мы создали новый канал. Но если есть уже хороший раскрученный канал, то можно внедрить и его.
Чтобы у бота в нем была власть, он должен быть администратором этого канала. Заходим в канал, добавляем нашего бота и даем ему все разрешения на управление каналом.
Для подключения канала к боту, нужно отправить тестовое сообщение. И да, нам пришло уведомление в канале. Простейшие функции уже работают.
Теперь мы можем настроить автопостинг, отложенный постинг и создавать другие команды.
Окей, давайте создадим парочку команд:
Первая команда будет отправлять ссылку на наши услуги. Для этого заходим в «Отца ботов», печатаем /setcommands и выбираем нашего бота. Также можно воспользоваться кнопками меню, кому как удобнее.
В строке пишем название команды, оно может быть любым, главное на латинице и через тире пишем описание команды, у нас это «Услуги и цены», далее нажимаем «Сохранить».
Команда создана, но она пуста. Теперь ей нужно задать действие. Для этого переходим в наш бот, далее в «Пользовательские команды», среди них выбираем наш «bang» и жмем «Редактировать ответы команды».
Сейчас нужно напечатать сообщение к команде — это как раз и есть ответное действие на ее вызов. Ранее мы решили, что при вызове команды, ответом будет ссылка на наш сайт. Поэтому просто вставляем ссылку.
Теперь при вызове команды /bang, в ответе будет ссылка на наш сайт.
Заметили, что также есть кнопка «Добавить вопрос»? Это некая форма обратной связи, если его добавить, то при вызове команды пользователю будет задан этот вопрос.
Добавим нетривиальное сообщение. После отправки нашего вопроса, предложим два варианта ответа для выбора пользователя.
Так выглядит итоговый результат. После того как пользователь тапнет на одну из кнопок, нам придет уведомление об ответе.
А вот и новые ответы на форму:
Если пользователь тапнет на «Хочу заказать услугу», то пользователя можно найти и написать ему.
Как вариант, можно добавить вопрос, на который пользователь сам ответит и будет иметь возможность прислать свой номер телефона для связи.
Далее мы создали еще несколько команд по похожему принципу. Сделали мы это для того, чтобы добавить полноценное меню с кнопками. Ведь пользователям будет очень неудобно вручную каждый раз набирать команду.
На этот раз добавили команды для всех подразделов нашего блога. Перед этим добавив команду /blog, она будет корневой.
Для удобства и лучшего восприятия все команды заканчиваются на blog, так как если мы решим добавить команды с услугами, будет проще в них ориентироваться.
Итак, у нас есть много команд, которые мы будем обрамлять в удобные кнопки меню. Но сперва «зашиваем» в команды ссылки на наши подразделы блога как это описано выше.
Для добавления кнопок жмем на «Пользовательские команды», а далее кликаем на «Настроить главное меню».
Затем нажимаем на «Добавить пункт меню». Из ранее добавленных команд выбираем доступную, задаем ей имя, которое будет отображаться и кликаем «Сохранить».
Таким образом мы добавили кнопки для всех основных команд. Также добавили кнопки социальных сетей и контактов.
Вот так теперь выглядит наш бот.
При переходе в социальные сети появляются их кнопки:
А при переходе в блог сперва появляется опрос:
Конечно, не совсем логично, новичкам сперва бы блог почитать, но от постоянных читателей нам важен фидбек.
И далее появляются его подразделы.
В целом, если публиковать статьи в том же Telegraph и добавлять их в бота, то материалы можно читать, даже не выходя из Telegram.
Если зайти с другого аккаунта, бот отображается вот так:
Наш бот подключен к тестовому каналу, через него (бота), можно отправлять сообщения пользователям. К примеру, оповещение о новой записи в блоге, например.
Для этого в главном меню бота нажимаем на «Отправить новое сообщение пользователям», печатаем наше сообщение и жмем «Отправить пост подписчикам».
Прежде чем отправить пост, можно посмотреть, как он будет выглядеть, или задать время для публикации.
Спустя пару секунд придет уведомление о новой статье в блоге.
Также мы прикрутили автопостинг с помощью RSS-ленты. Кстати, в одной из наших статей писали, что это и как ее подключить, рекомендуем прочесть здесь.
Помимо RSS, можно подключить и Youtube.
Так просто?
Вуаля — теперь наш совсем простой бот умеет показывать нужную информацию пользователю, хоть и за счет ссылок, а также принимать обратную связь. Конечно же, функционал этим не ограничивается и с помощью ботов можно создать нечто большее, но это уже совсем другая история.
А если вы еще не подписаны на наш канал, то советую исправить это недоразумение. Делимся только полезными новостями из мира SEO и интернет-маркетинга.