#aws-lambda #telegram #telegram-bot
#aws-lambda #telegram #telegram-бот
Вопрос:
Привет, я ищу способ хранения сеанса пользователя / метаданных с наименьшей задержкой, и это не будет стоить мне ни копейки.
Краткое описание проблемы.
У меня есть бот, который помогает пользователям загружать файлы с Google Диска.
Он использует Webhook функции AWS lambda.
Пользователям предоставляются интерактивные имена файлов, например
/File.pdf
Как только они нажмут на него, его необходимо загрузить и отправить пользователю.
Проблема в том, что мне нужен способ узнать, какой файл выбрал пользователь, без необходимости использовать базу данных или перебирать все мои файлы по имени.
Например, есть ли способ добавить метаданные в интерактивное сообщение? Таким образом, я могу добавить эти метаданные в интерактивное поле, и если пользователь нажмет /File.pdf, я смогу извлечь метаданные.
Ответ №1:
Вы можете отправить InlineKeyboardButton, как в этом примере, и задать callback_data
все, что вам нужно. Когда пользователь нажимает на эту кнопку, ваш бот получит эти данные в обновлении:
button_list = [
InlineKeyboardButton("File1.pdf", callback_data="https://drive.google.com/invoice.pdf"),
InlineKeyboardButton("File2.pdf", callback_data="https://drive.google.com/presentation.pdf"),
InlineKeyboardButton("File3.pdf", callback_data="https://drive.google.com/report.pdf")
]
reply_markup = InlineKeyboardMarkup(button_list)
bot.send_message(chat_id=chat_id, "Files list:", reply_markup=reply_markup)
# in update handler:
def some_update_handler(update, context):
url = update.callback_query.data
# ...
# further processing
Это также может быть полезно в любом другом случае, когда пользователь Telegram-бота должен увидеть какое-то приятное сообщение, но не должен видеть какое-то внутреннее значение, отправленное Telegram-боту.