Запись данных из бота в Google Sheets
Я пробую писать телеграм-бота на Pyhton, на библиотеке aiogram. И встала задача реализовать регистрацию пользователя в боте и чтобы потом эти данные сохранялись в гугл таблицу. То бишь у меня есть инлайн клавиатура в боте по нажатию на кнопку которой бот начинает запрашивать данные по типу имени, телеграм ID и т.п. Как мне реализовать это правильно, чтобы после того как пользователь ввел данные они сохранились в гугл таблицу?
Ответы (1 шт):
Автор решения: QWERTYZ PB
→ Ссылка
Шаги:
Подготовка Google Таблицы:
- Создайте Google Таблицу с необходимыми столбцами для хранения данных пользователей (например, имя, Telegram ID, дата регистрации и др.).
- Откройте доступ к таблице для сервисного аккаунта (см. ниже).
Создание сервисного аккаунта Google Cloud:
- Перейдите в Google Cloud Console (https://console.cloud.google.com/).
- Создайте новый проект или выберите существующий.
- В разделе "IAM и администрирование" создайте сервисный аккаунт.
- Дайте сервисному аккаунту доступ к Google Таблицам (роль "Редактор").
- Создайте ключ сервисного аккаунта и скачайте файл JSON с ключом.
Установка библиотек:
- Установите необходимые библиотеки:
pip install aiogram gspread oauth2client
Код Python:
import asyncio import gspread from aiogram import Bot, Dispatcher, executor, types from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton from oauth2client.service_account import ServiceAccountCredentials # Данные для доступа к Google Таблице SERVICE_ACCOUNT_FILE = 'path/to/your/credentials.json' SCOPE = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] SPREADSHEET_ID = 'your_spreadsheet_id' # Инициализация бота bot = Bot(token='your_bot_token') dp = Dispatcher(bot) # Функция для авторизации в Google Таблицах async def get_sheet(): creds = ServiceAccountCredentials.from_json_keyfile_name( SERVICE_ACCOUNT_FILE, SCOPE) client = gspread.authorize(creds) sheet = client.open_by_key(SPREADSHEET_ID).sheet1 return sheet # Обработчик нажатия на кнопку регистрации @dp.callback_query_handler(lambda c: c.data == 'register') async def register_user(callback_query: types.CallbackQuery): # Запрос имени пользователя await bot.send_message(callback_query.from_user.id, "Введите ваше имя:") # Ожидание ответа пользователя @dp.message_handler() async def get_name(message: types.Message): name = message.text # Запрос Telegram ID telegram_id = message.from_user.id # Сохранение данных в Google Таблицу sheet = await get_sheet() sheet.append_row([name, telegram_id]) # Уведомление об успешной регистрации await bot.send_message(message.from_user.id, "Вы успешно зарегистрированы!") # Создание инлайн клавиатуры с кнопкой регистрации keyboard = InlineKeyboardMarkup() keyboard.add(InlineKeyboardButton("Регистрация", callback_data='register')) # Команда для запуска процесса регистрации @dp.message_handler(commands=['start']) async def start_command(message: types.Message): await bot.send_message(message.from_user.id, "Привет! Нажмите кнопку, чтобы зарегистрироваться:", reply_markup=keyboard) # Запуск бота if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)
Пояснения:
- В коде используются асинхронные функции
async
иawait
для работы с aiogram. get_sheet()
- асинхронная функция для авторизации в Google Таблицах и получения объекта листа.register_user()
- обработчик нажатия на кнопку регистрации. Он запрашивает имя пользователя и Telegram ID, а затем сохраняет данные в Google Таблицу.start_command()
- обработчик команды/start
. Он отправляет пользователю сообщение с инлайн клавиатурой для регистрации.
Дополнительные возможности:
- Вы можете добавить в Google Таблицу дополнительные столбцы для хранения информации о пользователе, например, дату регистрации, контактные данные и т.д.
- Вы можете использовать библиотеку
aiogram.dispatcher.filters.State
для создания более сложных сценариев регистрации с несколькими этапами. - Вы можете расширить функционал бота, используя данные из Google Таблицы, например, для отправки персонализированных сообщений или предоставления доступа к определенным функциям.
Не забудьте заменить следующие значения в коде на свои:
your_bot_token
- токен вашего бота, полученный от BotFather.path/to/your/credentials.json
- путь к файлу JSON с ключом сервисного аккаунта Google Cloud.your_spreadsheet_id
- ID вашей Google Таблицы.