Как заставить Telegram-бота запомнить, о чем вы говорили вчера (и не сойти с ума)

Когда создаёшь Telegram-бота на связке Make и OpenAI, быстро замечаешь одну неприятную вещь: он «забывает» контекст разговора буквально через сообщение. Говоришь ему: «Хочу пройти тест!», он отвечает: «Какой тест — про рыб или раков?». Ты выбираешь: «Про раков». А он тебе: «Раки — это млекопитающие». И всё! Он уже забыл, что был какой-то тест. Вот это реально бесит!

Что же делать?

Вот о чем я говорю:

Пример диалога с ботом
Пример диалога с ботом
Пример диалога с ботом
Пример диалога с ботом

Какие идеи у меня были по поводу решения этой задачи

Первое, что пришло в голову: просто записывать ВСЕ диалоги ВСЕХ пользователей в базу данных и отправлять последние 10–20 сообщений в OpenAI каждый раз, когда приходит новое сообщение.

Решение вроде бы рабочее, но есть несколько минусов:

  • Постоянно растущая база данных, что неудобно и небезопасно.
  • Нагрузка на бота — он будет всё медленнее отвечать, пока перебирает старые сообщения.

О таком костыле даже думать было больно. И я решила поискать более элегантное решение.

Идеальное решение: использование Thread ID и простой проверки в БД

OpenAI генерирует для каждого пользователя автоматически Threads (нить диалога). В чём их главная фишка:

  • OpenAI сам хранит весь контекст диалогов внутри Thread ID.
  • Каждому пользователю автоматически создаётся свой уникальный Thread ID.
  • Боту достаточно хранить только этот ID, а не все сообщения пользователя.

Но есть одна проблемка: эти Thread ID OpenAI почему то генерирует каждый раз при обращении к OpenAI, что и приводит к тому, что бот общается с пользователем "каждый раз как в первый раз". Мое решение заключается в том, чтобы объединить Thread ID с базой данных (я использовала Data Store в Make):

  • Пользователь отправляет сообщение.
  • Бот проверяет в базе, есть ли уже созданный Thread ID для этого пользователя.
  • Если ID есть, берёт его и отправляет сообщение в OpenAI, сохраняя контекст.
  • Если ID нет, создаётся новый Thread ID и сразу записывается в базу.

Такое решение оставляет за OpenAI генерацию Thread ID, но при этом "старый" пользователь будет всегда находиться в своем "старом" Thread ID, а новому будет создан новый Thread ID инструментами OpenAI.

Итак на практике

Вот финальная рабочая структура, которую я собрала на платформе Make:

Рабочая схема реализации бота в Make
Рабочая схема реализации бота в Make
  • Telegram Bot (Watch Updates). Ловит все сообщения пользователей и запускает сценарий.
  • Telegram Bot (Make an API Call). Отправляет пользователю в чат статус «печатает...», пока бот обрабатывает запрос через OpenAI.
  • Data Store (Get a record). Проверяет, есть ли уже Thread ID для этого пользователя.
Cкрин с настройками Data store
Cкрин с настройками Data store
  • OpenAI (Message an Assistant). Отправляет сообщение пользователя вместе с Thread ID, сохраняя контекст диалога.
Скрин с настройками из OpenAI
Скрин с настройками из OpenAI
  • Data Store (Update a record). Записывает новый Thread ID в базу или обновляет старый.
Скрин с настройками Data store
Скрин с настройками Data store
  • Telegram Bot (Send a Text Message). Возвращает ответ пользователю с сохранённым контекстом.

Получается:

  • Никакой путаницы в диалогах.
  • База данных не разрастается и не тормозит.
  • Пользователи получают ответы быстро и чётко.

Итог

Теперь мой бот прекрасно помнит, о чём мы говорили сегодня, вчера, неделю назад. Он не «тупит», а общается с каждым пользователем, как с хорошим знакомым. Именно так должен работать умный помощник в 2025 году!

Теперь мой бот прекрасно держит контекст, пользователи и я счастливы ❤

Пример диалога с ботом, когда по последней схеме
Пример диалога с ботом, когда по последней схеме

А вы как решаете эту проблему с контекстом в своих ботах? Делитесь в комментариях!

Об авторе статьи:

Наталия, IT Product Manager и консультант по AI-интеграциям.

Делюсь рабочими решениями из жизни: как сделать бота, который не бесит и реально работает. Разбираюсь в Make, OpenAI, Telegram и том, как всё это соединить без слёз.

Подписывайтесь, если хотите делать такое же (или лучше). А если нужна помощь — пишите, не стесняйтесь.

Наталия, в ИТ больше 14 лет, услуги ИТ и ИИ решениями.

Приходи в канал, там много актуального для современного мира:

Начать дискуссию