HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>11 окт 2022</li>
2 <ul><li>11 окт 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Продолжаем писать чат-бота для Telegram - добавляем кнопки и интерактив.</p>
4 </ul><p>Продолжаем писать чат-бота для Telegram - добавляем кнопки и интерактив.</p>
5 <p>Иллюстрация: Катя Павловская для Skillbox Media</p>
5 <p>Иллюстрация: Катя Павловская для Skillbox Media</p>
6 <p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
6 <p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
7 <p>В первой части урока по чат-ботам для Telegram мы создали на Python эхо-бота с помощью библиотеки Aiogram. Сам эхо-бот работает просто, а его функция очевидна из названия: в ответ на сообщение пользователя он присылает тот же текст. Если вы ещё не читали<a>первую часть</a>, начните с неё.</p>
7 <p>В первой части урока по чат-ботам для Telegram мы создали на Python эхо-бота с помощью библиотеки Aiogram. Сам эхо-бот работает просто, а его функция очевидна из названия: в ответ на сообщение пользователя он присылает тот же текст. Если вы ещё не читали<a>первую часть</a>, начните с неё.</p>
8 <p>Во второй части урока поработаем над меню: добавим для пользователей клавиатуру с быстрыми ответами и инлайн-кнопки для перехода на сайт Skillbox. Начнём с создания меню, но сначала разберёмся с видами возможных клавиатур.</p>
8 <p>Во второй части урока поработаем над меню: добавим для пользователей клавиатуру с быстрыми ответами и инлайн-кнопки для перехода на сайт Skillbox. Начнём с создания меню, но сначала разберёмся с видами возможных клавиатур.</p>
9 <p>Библиотека Aiogram позволяет создать на Python клавиатуры двух видов, отличающиеся друг от друга расположением кнопок:</p>
9 <p>Библиотека Aiogram позволяет создать на Python клавиатуры двух видов, отличающиеся друг от друга расположением кнопок:</p>
10 <ul><li><strong>Reply-кнопки</strong>для шаблонных ответов, которые закрепляются вместо основной клавиатуры на экране. Часто используются в чат-ботах как меню. Создаются с помощью метода ReplyKeyboardMarkup.</li>
10 <ul><li><strong>Reply-кнопки</strong>для шаблонных ответов, которые закрепляются вместо основной клавиатуры на экране. Часто используются в чат-ботах как меню. Создаются с помощью метода ReplyKeyboardMarkup.</li>
11 <li><strong>Инлайн-кнопки</strong>, связанные с сообщениями в чате. При этом пользователь видит и основную клавиатуру. Создаются с помощью метода InlineKeyboardMarkup.</li>
11 <li><strong>Инлайн-кнопки</strong>, связанные с сообщениями в чате. При этом пользователь видит и основную клавиатуру. Создаются с помощью метода InlineKeyboardMarkup.</li>
12 </ul><p>Наш эхо-бот для Telegram сейчас позволяет только отправлять текстовые сообщения и получать их обратно. Давайте проапгрейдим его и добавим кнопки с готовыми сообщениями, которые не надо вводить самому. Это будут reply-кнопки.</p>
12 </ul><p>Наш эхо-бот для Telegram сейчас позволяет только отправлять текстовые сообщения и получать их обратно. Давайте проапгрейдим его и добавим кнопки с готовыми сообщениями, которые не надо вводить самому. Это будут reply-кнопки.</p>
13 <p>Нам понадобится класс ReplyKeyboardMarkup - для начала импортируем его и дополнительные необходимые классы:</p>
13 <p>Нам понадобится класс ReplyKeyboardMarkup - для начала импортируем его и дополнительные необходимые классы:</p>
14 from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton<p>ReplyKeybordRemove и ReplyKeyboardMarkup позволяют создавать и удалять клавиатуру, а класс KeyboardButton используется для добавления кнопок.</p>
14 from aiogram.types import ReplyKeyboardRemove, ReplyKeyboardMarkup, KeyboardButton<p>ReplyKeybordRemove и ReplyKeyboardMarkup позволяют создавать и удалять клавиатуру, а класс KeyboardButton используется для добавления кнопок.</p>
15 <p>Теперь создадим кнопки с готовыми фразами. Напишем код и разберёмся в нём:</p>
15 <p>Теперь создадим кнопки с готовыми фразами. Напишем код и разберёмся в нём:</p>
16 @dp.message_handler(commands=['start']) async def send_welcome(message: types.Message): kb = [ [ types.KeyboardButton(text="Сможешь повторить это?"), types.KeyboardButton(text="А это?") ], ] keyboard = types.ReplyKeyboardMarkup(keyboard=kb) await message.reply("Привет!\nЯ Эхобот от Skillbox!\nОтправь мне любое сообщение, а я тебе обязательно отвечу.", reply_markup=keyboard)<p>Сначала создадим в нашем первом декораторе список kb, который будет хранить кнопки. Кнопка в Aiogram создаётся с помощью types.KeyboardButton(text=" "), где в параметре text мы передаём отображаемое название кнопки.</p>
16 @dp.message_handler(commands=['start']) async def send_welcome(message: types.Message): kb = [ [ types.KeyboardButton(text="Сможешь повторить это?"), types.KeyboardButton(text="А это?") ], ] keyboard = types.ReplyKeyboardMarkup(keyboard=kb) await message.reply("Привет!\nЯ Эхобот от Skillbox!\nОтправь мне любое сообщение, а я тебе обязательно отвечу.", reply_markup=keyboard)<p>Сначала создадим в нашем первом декораторе список kb, который будет хранить кнопки. Кнопка в Aiogram создаётся с помощью types.KeyboardButton(text=" "), где в параметре text мы передаём отображаемое название кнопки.</p>
17 <p>После этого необходимо создать клавиатуру и рассказать ей про наши кнопки. Делается это с помощью метода types.ReplyKeyboardMarkup(keyboard=list), где вместо list записывается название списка с кнопками - в нашем случае это список kb.</p>
17 <p>После этого необходимо создать клавиатуру и рассказать ей про наши кнопки. Делается это с помощью метода types.ReplyKeyboardMarkup(keyboard=list), где вместо list записывается название списка с кнопками - в нашем случае это список kb.</p>
18 <p>Теперь остаётся показать клавиатуру в Telegram-чате. Для этого добавляем в ответ строку reply_markup=keyboard, которая отображает клавиатуру после команды /start. Теперь при запуске бота мы видим, что в чате появились обе кнопки из списка kb:</p>
18 <p>Теперь остаётся показать клавиатуру в Telegram-чате. Для этого добавляем в ответ строку reply_markup=keyboard, которая отображает клавиатуру после команды /start. Теперь при запуске бота мы видим, что в чате появились обе кнопки из списка kb:</p>
19 <em>Скриншот: Aiogram / Skillbox Media</em><p>Если нажать на любую кнопку, текст кнопки отправится в чат, а Telegram-бот пришлёт в ответ эту же фразу:</p>
19 <em>Скриншот: Aiogram / Skillbox Media</em><p>Если нажать на любую кнопку, текст кнопки отправится в чат, а Telegram-бот пришлёт в ответ эту же фразу:</p>
20 <em>Скриншот: Aiogram / Skillbox Media</em><p>Можно создавать сколько угодно шаблонов, а также связывать кнопку с новыми действиями. Попробуем это на примере инлайн-клавиатур.</p>
20 <em>Скриншот: Aiogram / Skillbox Media</em><p>Можно создавать сколько угодно шаблонов, а также связывать кнопку с новыми действиями. Попробуем это на примере инлайн-клавиатур.</p>
21 <p>Инлайн-кнопки отличаются от обычных тем, что связаны не с областью клавиатуры в мессенджере, а с каким-то сообщением в Telegram-чате. Самый простой пример инлайн-кнопки - это меню в канале @BotFather, с помощью которого мы создавали токен для доступа к API Telegram. Например, вот так в нём выглядит инлайн-меню с уже созданными ботами:</p>
21 <p>Инлайн-кнопки отличаются от обычных тем, что связаны не с областью клавиатуры в мессенджере, а с каким-то сообщением в Telegram-чате. Самый простой пример инлайн-кнопки - это меню в канале @BotFather, с помощью которого мы создавали токен для доступа к API Telegram. Например, вот так в нём выглядит инлайн-меню с уже созданными ботами:</p>
22 <em>Скриншот: Aiogram / Skillbox Media</em><p>Создадим на Python для нашего бота инлайн-кнопки со ссылками на Skillbox Media и курсы по программированию. Для этого вернёмся к разделу с импортами в коде и добавим ещё одну строку, чтобы можно было использовать необходимые классы:</p>
22 <em>Скриншот: Aiogram / Skillbox Media</em><p>Создадим на Python для нашего бота инлайн-кнопки со ссылками на Skillbox Media и курсы по программированию. Для этого вернёмся к разделу с импортами в коде и добавим ещё одну строку, чтобы можно было использовать необходимые классы:</p>
23 from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton<p>InlineKeyboardMarkup пригодится для инициализации инлайн-кнопок, а InlineKeyboardButton - для их создания.</p>
23 from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton<p>InlineKeyboardMarkup пригодится для инициализации инлайн-кнопок, а InlineKeyboardButton - для их создания.</p>
24 <p>Теперь создадим сами кнопки:</p>
24 <p>Теперь создадим сами кнопки:</p>
25 urlkb = InlineKeyboardMarkup(row_width=1) urlButton = InlineKeyboardButton(text='Перейти в блог Skillbox', url='https://skillbox.ru/media/code/') urlButton2 = InlineKeyboardButton(text='Перейти к курсам Skillbox', url='https://skillbox.ru/code/') urlkb.add(urlButton,urlButton2) @dp.message_handler(commands='ссылки') async def url_command(message: types.Message): await message.answer('Полезные ссылки:', reply_markup=urlkb)<p>Разберёмся в коде построчно. Сначала мы инициализируем клавиатуру с помощью InlineKeyboardMarkup, передав в качестве аргумента row_width число 1. Оно определяет, сколько кнопок будет находиться в одном ряду. Так как у нас надписи на кнопках длинные, лучше поместить их друг под другом.</p>
25 urlkb = InlineKeyboardMarkup(row_width=1) urlButton = InlineKeyboardButton(text='Перейти в блог Skillbox', url='https://skillbox.ru/media/code/') urlButton2 = InlineKeyboardButton(text='Перейти к курсам Skillbox', url='https://skillbox.ru/code/') urlkb.add(urlButton,urlButton2) @dp.message_handler(commands='ссылки') async def url_command(message: types.Message): await message.answer('Полезные ссылки:', reply_markup=urlkb)<p>Разберёмся в коде построчно. Сначала мы инициализируем клавиатуру с помощью InlineKeyboardMarkup, передав в качестве аргумента row_width число 1. Оно определяет, сколько кнопок будет находиться в одном ряду. Так как у нас надписи на кнопках длинные, лучше поместить их друг под другом.</p>
26 <p>После этого создаём для каждой кнопки отдельную переменную и инициализируем класс Button. В параметрах указываем:</p>
26 <p>После этого создаём для каждой кнопки отдельную переменную и инициализируем класс Button. В параметрах указываем:</p>
27 <ul><li>text - текст, который будет показан на кнопке в мессенджере;</li>
27 <ul><li>text - текст, который будет показан на кнопке в мессенджере;</li>
28 <li>url - URL страницы, на которую пользователь будет переходить при нажатии на кнопку.</li>
28 <li>url - URL страницы, на которую пользователь будет переходить при нажатии на кнопку.</li>
29 </ul><p>С помощью метода add добавляем две кнопки к уже созданной клавиатуре. Теперь необходимо написать message_handler, который будет вызывать в Telegram эти инлайн-кнопки. Делаем это по аналогии с обычными кнопками - с той лишь разницей, что в качестве команды вызова укажем ссылки, а в параметре reply_markup передадим название нашей клавиатуры - urlkb.</p>
29 </ul><p>С помощью метода add добавляем две кнопки к уже созданной клавиатуре. Теперь необходимо написать message_handler, который будет вызывать в Telegram эти инлайн-кнопки. Делаем это по аналогии с обычными кнопками - с той лишь разницей, что в качестве команды вызова укажем ссылки, а в параметре reply_markup передадим название нашей клавиатуры - urlkb.</p>
30 <p>Повторно запустим нашего бота и посмотрим на результат:</p>
30 <p>Повторно запустим нашего бота и посмотрим на результат:</p>
31 <em>Скриншот: Aiogram / Skillbox Media</em><p>Всё получилось. Теперь инлайн-клавиатура появляется при отправке команды /ссылки в бот.</p>
31 <em>Скриншот: Aiogram / Skillbox Media</em><p>Всё получилось. Теперь инлайн-клавиатура появляется при отправке команды /ссылки в бот.</p>
32 <p>В нашем эхо-боте для Telegram появилось два вида меню, написанных на Python: reply-кнопки для быстрых сообщений и инлайн-кнопки для перехода на блог и сайт Skillbox. Для создания сложных ботов - например, ботов онлайн-магазинов - можно самостоятельно<a>изучить документацию к библиотеке Aiogram</a>: попробовать новые классы, методы и объекты.</p>
32 <p>В нашем эхо-боте для Telegram появилось два вида меню, написанных на Python: reply-кнопки для быстрых сообщений и инлайн-кнопки для перехода на блог и сайт Skillbox. Для создания сложных ботов - например, ботов онлайн-магазинов - можно самостоятельно<a>изучить документацию к библиотеке Aiogram</a>: попробовать новые классы, методы и объекты.</p>
33 <p>Python для всех</p>
33 <p>Python для всех</p>
34 <p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
34 <p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
35 <p><a>Пройти бесплатно</a></p>
35 <p><a>Пройти бесплатно</a></p>
36 <a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>
36 <a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>