Как создать меню в Телеграмм боте

Затем пишем и отправляем сообщение /mybots :

пишем и отправляем сообщение /mybots

Выбираем своего бота:

выбираем своего бота

Нажимаем кнопку Edit Bot :

нажимаем кнопку Edit Bot

Нажимаем кнопку Edit Commands :

нажимаем кнопку Edit Commands

Вставляем и отправляем команды и названия кнопок .

Формат ввода такой:

вставляем и отправляем команды и названия кнопок

Все, готово! Получается вот такая красота:

бот с меню в телеграме

Видео как получается сделать такую красоту 🙂

САМОЕ ГЛАВНОЕ

После того как создали бота второе по важности что нужно сделать — это задать алгоритм его работы (то как он будет работать).

Если нет знаний по программированию, то вот список сервисов, к которым бота можно подключить и через них его сделать — https://clck.ru/RvSho

Хотите чат бота или автоворонку в мессенджерах? Я занимаюсь этим профессионально.

Записывайтесь на консультацию (и заодно посмотрите как у меня работает чат бот).

Как сделать меню в боте Телеграм | Меню с кнопками в Телеграм

P.S. Меня допинали создать свой канал в телеграме — О чат ботах и бизнесе

Присоединяйтесь, бесплатно буду консультировать в чате при канале здесь

Источник: dzen.ru

Как создать постоянное меню для Telegram чат-бота

Функционал Telegram чат-ботов в SendPulse доступен при регистрации в сервисе. Создайте бесплатный аккаунт, чтобы добавить 3 чат-бота и отправлять до 10 000 сообщений каждый месяц.

Используйте меню бота, чтобы помочь пользователям найти нужную информацию в вашем боте. Создавайте команды, которые запускают определенные цепочки. Открыть меню можно кликнув по иконке со знаком «/» в поле ввода сообщений .

Чтобы создать меню бота, на странице чат-бота откройте вкладку «Меню» и нажмите «Добавить элемент».

Введите название команды. Можно использовать до 30 символов в поле: латинские буквы, цифры и знак «_».

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

Выберите цепочку, которая запустится после выбора команды из списка.

Нажмите “Добавить”, чтобы добавить команду в меню.

Расширяйте меню дополнительными командами с помощью кнопки «Добавить элемент». После создания команд нажмите «Сохранить», чтобы сохранить созданные элементы.

Меню с командами готово к работе.

Как настроить меню для чат-бота в Телеграм. Команды в чат-боте Telegram для Leadteh

Вы также можете создать клавиатурное меню для пользователя из кнопок «Быстрые ответы». Вы можете добавить до 10 таких кнопок и добавить в них эмодзи.

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

Источник: sendpulse.com

За границей Hello World: полный гайд по разработке Telegram ботов на Python + Aiogram 3. Часть 2: Меню и OpenAI API

Привет, Хабр! Продолжаю серию статей про разработку telegram-ботов на библиотеке aiogram и языке программирования Python. Хочется отметить, что статья не является документацией или учебником. Я просто рассказываю пошагово как разработать полнофункционального бота, стараясь затронуть как можно больше тем. Если вы не увидели в статье чего-то очень важного по вашему мнению — предложите рассмотреть тему в следующей статье в комментариях.

Всем приятного чтения, жду вашего мнения, критики и вопросов в комментариях.

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

Еще по теме:  Боты Телеграмм python flask pythonanywhere

Создание меню

Меню нашего бота будет реализовано с помощью inline кнопок. Для начала надо создать клавиатуру главного меню. Все клавиатуры будут храниться в файле kb.py , поэтому открываем его и пишем в него такой код:

from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove menu = [ [InlineKeyboardButton(text=» Генерировать текст», callback_data=»generate_text»), InlineKeyboardButton(text=» Генерировать изображение», callback_data=»generate_image»)], [InlineKeyboardButton(text=» Купить токены», callback_data=»buy_tokens»), InlineKeyboardButton(text=» Баланс», callback_data=»balance»)], [InlineKeyboardButton(text=» Партнёрская программа», callback_data=»ref»), InlineKeyboardButton(text=» Бесплатные токены», callback_data=»free_tokens»)], [InlineKeyboardButton(text=» Помощь», callback_data=»help»)] ] menu = InlineKeyboardMarkup(inline_keyboard=menu) exit_kb = ReplyKeyboardMarkup(keyboard=[[KeyboardButton(text=»◀️ Выйти в меню»)]], resize_keyboard=True) iexit_kb = InlineKeyboardMarkup(inline_keyboard=[[InlineKeyboardButton(text=»◀️ Выйти в меню», callback_data=»menu»)]])

Здесь мы создаём основную клавиатуру menu , сразу же добавляя все кнопки в два столбца. Есть несколько способов создания клавиатур в aiogram 3:

  • Передать двумерный список кнопок как аргумент при создании клавиатуры. Данный способ используется в нашем проекте для создания меню. Удобен когда клавиатура статичная и все данные для неё заранее известны.
  • Использовать Keyboard Builder. Этот способ тоже будет использоваться для создания динамических клавиатур в дальнейшем. Чтобы создать клавиатуру через Keyboard Builder можно использовать следующий код:

builder = InlineKeyboardBuilder() for i in range(15): builder.button(text=f”Кнопка ”, callback_data=f”button_”) builder.adjust(2) await msg.answer(“Текст сообщения”, reply_markup=builder.as_markup())

Здесь мы создаём Keyboard Builder и в цикле добавляем в него кнопки. builder.adjust(2) группирует кнопки в 2 столбца. Далее отправляется сообщение с созданной клавиатурой, которая из Keyboard Builder преобразовывается в Keyboard Markup функцией builder.as_markup() .

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

greet = «Привет, , я бот, использующий нейросети от OpenAI, такие как ChatGPT и Dall-e. Задавай мне вопросы и я постараюсь ответить ☺️» menu = » Главное меню»

Теперь пишем обработчики в файле handlers.py .

Если вы всё сделали правильно, то после запуска бота (через файл main.py ) вы увидите, что бот отвечает на команду /start и на слово «Меню».

Давайте подробнее разберём код, который мы написали. Первая часть файла похожа идентична предыдущей статье, а вот код обработчиков изменился. В функции start вместо отправки строки мы отправляем текст из переменной greet модуля text , причём форматируем его, подставляя имя пользователя ( msg.from_user.full_name ), а также прикрепляем к сообщению inline-клавиатуру, которую создали до этого.

Далее добавился обработчик menu . Как вы могли заметить, перед объявлением функции стоят целых три декоратора. Это означает, что функция запустится, если сработает любой из трёх фильтров. В нашем примере функция будет реагировать на сообщения с текстом «Меню», «Выйти в меню» и «◀️ Выйти в меню». В самой функции нет ничего особенного, она просто отправит текст text.menu с клавиатурой kb.menu . Пока что ни один из наших пунктов меню не работает, давайте исправим это.

Подключение API OpenAI

Сейчас мы реализуем основной полезный функционал нашего бота — работа с нейросетями. Прежде всего стоит отметить, что API не бесплатное, однако при регистрации даётся бесплатно 5$ на счёт. Для тестов нам этого вполне хватит.

Сначала надо получить токен API, для этого регистрируемся на сайте OpenAI, используя VPN и иностранный номер телефона, можно использовать виртуальный, однако не на все виртуальные номера получается зарегистрироваться. После регистрации заходим в аккаунт, в раздел View API Keys и создаём ключ API. Обязательно скопируйте и сохраните ключ в надёжном месте, так как его нельзя будет посмотреть позже, только создать новый.

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

Еще по теме:  Фрод партнерок с убт Telegram и Youtube это то что ты искал

pip install openai

Теперь когда все приготовления закончены, приступим к функциям для использования API. У нас будет две функции: для генерации текста и для генерации изображений, мы поместим их в файл utils.py , так как они не привязаны к aiogram и могут рассматриваться как внешний модуль.

import openai import logging import config openai.api_key = config.OPENAI_TOKEN async def generate_text(prompt) -> dict: try: response = await openai.ChatCompletion.acreate( model=»gpt-3.5-turbo», messages=[ ] ) return response[‘choices’][0][‘message’][‘content’], response[‘usage’][‘total_tokens’] except Exception as e: logging.error(e) async def generate_image(prompt, n=1, size=»1024×1024″) -> list[str]: try: response = await openai.Image.acreate( prompt=prompt, n=n, size=size ) urls = [] for i in response[‘data’]: urls.append(i[‘url’]) except Exception as e: logging.error(e) return [] else: return urls

Рассмотрим код подробнее. После импортов мы настраиваем библиотеку openai , давая ей наш ключ от API. Затем объявляем две функции:

  • generate_text — для генерации текста
  • generate_image — для генерации изображений

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

Функция openai.ChatCompletion.acreate генерирует текст с помощью моделей завершения текста. В качестве параметров передаём используемую модель, в нашем случае gpt-3.5-turbo — самая дешёвая и быстрая на данный момент, и сообщения — список словарей с ключами system, user, assistant. Все переданные сообщения будут учтены при создании ответа, подробнее можете почитать в документации.

Мы передаём только сообщение от пользователя и используем поведение модели по умолчанию, но можно также передавать системные сообщения (role: system) для реализации режимов работы, например отдельные функции для написания кода и ответов на теоретические вопросы. Также можно усовершенствовать функцию, чтобы сохранять контекст общения — нейросеть будет «помнить» предыдущие сообщения от пользователя и учитывать их при создании ответа. Всё это дополнительные усовершенствования, которые вы можете попробовать реализовать самостоятельно. Если эта тема будет интересна, то напишу отдельную статью, посвящённую реализации сохранения контекста и переключения режимов работы, поэтому пишите в комментариях, хотите ли видеть такую статью.

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

При отправке запроса специальный инструмент делит промпт (отправленное нейросети сообщение) на токены и в таком виде отдаёт модели. Для модели gpt-3.5-turbo один токен — примерно 3-4 английских буквы, либо 1 русская буква или любой другой символ, не входящий в английский алфавит. Количество использованных токенов определяет сколько вы заплатите за использование API. Для модели gpt-3.5-turbo на момент написания статьи 1 тысяча токенов стоит 0.002 доллара. Согласитесь, не очень много?

Функция генерации изображений очень похожа на предыдущую, но имеет немного другие параметры. Через API можно генерировать как одно, так и сразу несколько изображений, а также можно задать разрешение изображения на выходе. В нашей функции всегда генерируется одно изображение в максимальном разрешении — 1024×1024. Однако мы всё равно перебираем полученные ссылки на изображения в цикле — так будет проще расширять функционал бота в будущем, например дать пользователям возможность генерировать несколько вариантов одного изображения и менять разрешение. Возвращается из функции список, состоящий из ссылок на полученные изображения.

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

Подключение нейросетей к боту

Здесь нам нужно познакомиться с одной из самых удобных и мощных на мой взгляд функций aiogram, которой нет во многих других библиотеках — машиной состояний (её также называют машиной конечных автоматов или просто FSM).

Еще по теме:  Как включить человека в группу в Телеграмме

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

Все состояния будем создавать в файле states.py

from aiogram.fsm.state import StatesGroup, State class Gen(StatesGroup): text_prompt = State() img_prompt = State()

Как видите всё очень просто, мы создали класс Gen и создали в нём два состояния:

  • text_prompt — бот будет воспринимать сообщения как промпты для ChatGPT
  • img_prompt — бот будет воспринимать сообщения как промпты для Dall-e

Последнее приготовление, которое надо сделать — подключить middleware для отображения статуса «Печатает…» во время когда бот ждёт ответа от API. Для этого мы подключим встроенную в aiogram middleware ChatActionMiddleware . В общих чертах middleware это некоторый код (функция, класс), выполняемый до передачи сообщения обработчику. В этом коде можно проверять какие-то данные, сохранять статистику, выполнять какие-либо действия или передавать дополнительные данные в обработчик. Подробнее мы рассмотрим middleware, когда будем реализовывать бан пользователей, а сейчас просто подключим уже готовую middleware. Для этого в файле main.py надо добавить импорт from aiogram.utils.chat_action import ChatActionMiddleware и перед запуском бота вставить строку dp.message.middleware(ChatActionMiddleware()) . Так мы подключили middleware для отправки состояний бота пользователям.

Теперь приступаем к основному коду обработчиков. handlers.py. Код, который мы писали ранее дублировать не буду, обращу лишь внимание, что требуется 4 новых импорта:

from aiogram import flags from aiogram.fsm.context import FSMContext import utils from states import Gen

Обратите внимание, что сообщения отправляются с текстами из модуля text , поэтому надо там их создать

Теперь проанализируем код обработчиков. В нашем коде впервые встречается такой декоратор как callback_query. Он означает, что функция будет реагировать на нажатия inline-кнопок с определённым фильтром. Если при обработке сообщений надо было использовать выражение F.text , то теперь мы используем F.data .

В функциях где работа идёт с функциями из utils выполняется проверка на ошибки — если API вернёт ошибку или она произойдёт в самой функции, то она вернёт нам None . Поэтому перед отправкой пользователю сообщения с ответом мы проверяем, успешно ли функция отработала. К каждому ответу от бота будет прикреплён специальный текст, у меня помещённый в переменную text.text_watermark . Это обеспечит нам некоторую рекламу, если пользователь решит переслать ответ нейросети другому пользователю.

Параметр disable_web_page_preview отвечает за отображение превью ссылок. Нам это ни к чему, поэтому устанавливаем параметр в True.

Теперь наш бот умеет отвечать на текстовые запросы по API и генерировать изображения:

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

Заключение

Что ж, на этом вторая часть заканчивается. Мы сделали немало работы — подключили API OpenAI к Python, создали клавиатуру меню и даже связали это всё вместе! Сейчас бот уже полноценно функционирует и может отвечать на запросы. Однако работа на этом не заканчивается, так как функционал нашего бота намного обширнее.

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

Жду вашего мнения, критики, советов и вопросов в комментариях!

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...