Telegram добавляет и извлекает метаданные из сообщения

#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-боту.