Как выстроить работу с таблицей NocoDB в PuzzleBot: запись, обновление и удаление данных

В этой инструкции разберём, как организовать работу с таблицей NocoDB в PuzzleBot на примере реального сценария.

Разберём по шагам:
— как создать запись пользователя;
— как обновлять данные в уже существующей строке;
— как выводить данные через блок «Слайдер»;
— как получать данные конкретного пользователя через интегрированную переменную;
— как удалять запись из таблицы.

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

Нужно определить:
— в какой момент создаётся запись;
— по какому уникальному параметру будет выполняться поиск строки;
— по каким полям будет происходить фильтрация;
— в каких случаях данные обновляются, а в каких — удаляются.

Если структура продумана заранее, дальше работать с таблицей намного проще.

В этом примере логика выстроена так:
— запись создаётся сразу после получения согласия на обработку данных;
— анкета не создаёт новую строку, а дополняет уже существующую запись;
— фильтрация выполняется по значению переменной profile_completed и telegram_user_id;
— удаление записи происходит по запросу пользователя.

Далее переходим к реализации настройки.
Регистрация в NocoDB и настройка интеграции с PuzzleBot
В PuzzleBot перейдите в раздел Настройки Интеграции NocoDB и нажмите кнопку «Открыть» — откроется страница регистрации.

Зарегистрируйтесь → перейдите в Настройки аккаунта → Tokens, создайте API-токен и скопируйте его.

Вернитесь в PuzzleBot, вставьте токен в разделе интеграции, сохраните изменения и активируйте галочку быстрого доступа «Добавить вкладку NocoDB в меню» — в меню конструктора появится быстрый доступ к таблицам.

Создание базы и настройка таблицы

Вернитесь в NocoDB.

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

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

Настройка структуры таблицы
Ниже — набор полей, которые используются в этом сценарии.

Поля, которые заполняются при создании записи
Запись создаётся сразу после получения согласия.
  • N_id — нумерация строк
  • JOIN_DATE — дата первого входа пользователя в бот
  • telegram_user_id — уникальный идентификатор пользователя
  • username — username пользователя в Telegram (записывается при наличии)
  • telegram_name — имя пользователя из профиля
  • consent_given — дата получения согласия
  • profile_completed — статус заполнения анкеты
По умолчанию profile_completed = false. После заполнения анкеты значение меняется на true.
Это поле используется для фильтрации пользователей, чтобы вывести информацию о тех, кто дал согласие, но не завершил анкету.

Поля, которые заполняются после анкеты
Эти данные не создают новую строку, а дополняют существующую запись:
  • fio — ФИО пользователя
  • phone — телефон пользователя
  • email — электронная почта пользователя
  • industry — сфера деятельности

Создание категорий

В PuzzleBot перейдите в раздел Модерация → нажмите ➕ → введите название категории → нажмите Создать категорию

Для этого сценария потребуется три категории:
— Администратор
— Получено согласие
— Заполнена анкета

Категории позволяют:
— ограничивать доступ к группам команд;
— выстраивать логику переходов через блок «Условие»;
— использовать их как фильтр при настройке рассылок.

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

Создание переменных

В PuzzleBot перейдите в раздел Переменные → нажмите ➕ Добавить переменную → создайте переменные с необходимыми настройками.

Персональные переменные (формат значения «Текст»):
  • consent_given — для записи даты получения согласия на обработку данных
  • profile_completed — для хранения статуса анкеты

Персональные переменные созданные для дублирования ответов из формы ввода*:
  • fio — ФИО пользователя
  • phone — телефон пользователя
  • email — электронная почта пользователя
  • industry — сфера деятельности
  • user_id_poisk — хранит USER ID, введённый администратором, и используется для поиска пользователя в таблице

*В форме ввода по умолчанию создается переменная, но в некоторых случаях необходимо дублировать ответ в созданные переменные, например, чтобы использовать для проверки в команде Условие*

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

Интегрированная персональная переменная (формат значения «NocoDB»):
  • data_output_by_user_id — используется для вывода данных пользователя из таблицы

Выберите созданную базу и таблицу.

В фильтре настройте поиск по столбцу telegram_user_id с условием «Полное совпадение».
В качестве значения укажите переменную {{user_id_poisk}} — в ней хранится ID, введённый администратором.

В поле «Значение» выберите тип «Строка» и заполните шаблон отображения данных пользователя.

Глобальная переменная (формат значения «Число»):
N_id — для нумерации строк

Настройка логики

В PuzzleBot перейдите в раздел Конструктор и поэтапно выполните настройку:

Получение согласия и создание записи

Форму получения согласия можно реализовать по-разному — например, через мини-приложение или обычные команды с формами ввода.

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

Для каждого согласия настраивается отдельная форма:
— согласие с политикой конфиденциальности и обработкой персональных данных
— согласие на получение рекламных сообщений

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

После получения согласий запускается отдельная служебная команда, в которой настроены системные действия: присвоение категории, фиксация даты согласия, увеличение глобальной переменной и формирование записи пользователя в таблице.

Сбор анкеты и обновление данных

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

Все ответы из форм ввода дублируются в заранее созданные переменные.

Внутри команды настраиваются формы:
— имя пользователя — тип ввода «Отправка сообщения»
— номер телефона — тип ввода «Запрос контакта»
— электронная почта — тип ввода «Отправка сообщения» с маской ввода «Почта»
— сфера деятельности — выбор одного варианта с помощью кнопки

После заполнения анкеты запускается служебная команда, в которой:
— присваивается категория «Заполнена анкета»;
— переменная profile_completed получает значение true;
— выполняется поиск строки по telegram_user_id и обновление данных в таблице.
— пользователю отправляется сообщение о выполнении условий доступа.

Доступ к базе знаний

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

— «Получено согласие»
— «Заполнена анкета»

Такой подход позволяет управлять доступом на уровне категорий и автоматически открывать материалы только после выполнения необходимых условий.

Проверка пользователя при входе в бот

При запуске бота по команде /start команда направляет пользователя в блок «Условие», где проверяется наличие категорий и определяется текущий этап прохождения сценария.

Логика проверки выстраивается следующим образом:
— если у пользователя есть категории «Получено согласие» и «Заполнена анкета» — он направляется в команду «Личный кабинет», расположенную в группе команд с ограниченным доступом;

— если категория «Получено согласие» уже присвоена, но анкета ещё не заполнена — пользователь автоматически переводится в команду «Анкета» для завершения ввода данных;

— если категория «Получено согласие» отсутствует — пользователь попадает в команду «Согласие», с которой начинается сценарий.

Такая проверка позволяет сохранять последовательность прохождения и возвращать пользователя на нужный этап даже при повторном запуске бота.

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

Административный кабинет

Административный раздел располагается в отдельной группе команд с ограничением по категории «Администратор». Доступ к нему получают только пользователи с соответствующей категорией.

Назначение категории можно реализовать через ссылку во вкладке «Вход». В настройках ссылки указывается присвоение категории и переход на нужную команду. При переходе по такой ссылке пользователю автоматически назначается категория «Администратор», после чего запускается команда административного раздела.
Такой способ позволяет управлять доступом без ручного назначения категорий в модерации — владелец может самостоятельно отправлять ссылку тем, кому нужно предоставить доступ.

В административном кабинете реализованы три действия:
— просмотр пользователей, которые не заполнили анкету
— просмотр пользователей, которые заполнили анкету
— поиск данных конкретного пользователя по telegram_user_id

Просмотр пользователей без анкеты
Настройка позволяет быстро оценить количество пользователей, которые дали согласие, но не завершили анкету:

По нажатию кнопки выполняется переход в блок проверки.

В блоке «Условие» бот проверяет наличие строк в таблице, где значение поля profile_completed равно false.

Если найдена хотя бы одна запись, запускается команда со слайдером.

Слайдер с типом NocoDB: выбирается нужная база и таблица, настраивается фильтр по profile_completed = false, после чего выводятся строки, соответствующие условию.

Таким образом используется двойная проверка: сначала определяется наличие записей, затем слайдер повторно обращается к таблице и выводит актуальные данные.

Если записей нет — администратор получает сообщение об их отсутствии.

Просмотр пользователей с заполненной анкетой
Логика аналогична предыдущему блоку.
Проверяется наличие строк, где profile_completed имеет значение true.

При наличии записей отправляется команда со слайдером.

Если записей нет — бот сообщает об их отсутствии.

Поиск конкретного пользователя
Для получения данных конкретного пользователя реализована отдельная команда.

Администратор вводит telegram_user_id, значение дублируется в переменную user_id_poisk, после чего выполняется поиск строки в таблице по столбцу telegram_user_id.

Перед выводом данных дополнительно выполняется проверка наличия записи.

Если запись найдена — выводятся данные пользователя через интегрированную переменную {{data_output_by_user_id}}.

Если запись отсутствует — бот сообщает, что пользователь в базе не найден.

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

Удаление данных

В этом сценарии удаление данных реализовано на примере предоставления возможности пользователю отозвать согласия и удалить свои данные.

В личном кабинете пользователя предусмотрена кнопка «Отозвать согласие».

При нажатии бот запрашивает подтверждение действия и предупреждает, что доступ к функциям бота будет закрыт.

Если пользователь отменяет действие — сценарий не меняется, он продолжает пользоваться ботом.

Если пользователь подтверждает отзыв согласия, запускается отдельная команда, в которой выполняются системные действия:

— удаляются категории «Получено согласие» и «Заполнена анкета»
— очищаются переменные пользователя
— выполняется удаление строки из таблицы по telegram_user_id
— доступ к закрытым разделам бота прекращается

Удаление строки выполняется через действие удаления записи в таблице NocoDB с фильтром по telegram_user_id.

Таким образом из базы полностью удаляется вся информация о пользователе.

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

Итог

В инструкции последовательно показано, как работать с таблицей NocoDB: создавать записи, обновлять строки, настраивать вывод данных и удалять информацию при необходимости.

На основе этой схемы можно выстраивать собственные сценарии, добавляя поля, переменные, фильтры и дополнительные логические ветки.