Связать код регистрации в боте с добавлением данных в гугл таблицу
Пишу бота на aiogram на Pyhton. Столкнулся с проблемой. У меня есть файл хранящий обработчики и файл с кодом для работы в гугл таблицах. После того как обработчики для регистрации в боте отрабатывают регистрационные данные пользователя должны добавляться в гугл таблицу. Но я не очень сильно понимаю как подружить это дело. Для наглядности ниже фрагменты кода: Handlers:
from app.database.models import add_data_to_sheet
class Register(StatesGroup):
name = State()
number = State()
teleID = State()
purpose = State()
@router.callback_query(F.data == 'Registration')
async def reg(callback: CallbackQuery, state: FSMContext):
await callback.answer('Начните регистрацию')
await state.set_state(Register.name)
await callback.message.answer('Введите ваше имя')
@router.message(Register.name)
async def register_name(message: Message, state: FSMContext):
await state.update_data(name=message.text)
await state.set_state(Register.teleID)
await message.answer('Введите ваше имя пользователя Telegram')
@router.message(Register.teleID)
async def register_age(message: Message, state: FSMContext):
await state.update_data(TeleID=message.text)
await state.set_state(Register.purpose)
await message.answer('Напишите какой вопрос вас интересует')
@router.message(Register.purpose)
async def register_age(message: Message, state: FSMContext):
await state.update_data(purpose=message.text)
await state.set_state(Register.number)
await message.answer('Отправьте ваш номер телефона', reply_markup=kb.get_number)
sheet_id = ''
@router.message(Register.number, F.contact)
async def register_number(message: Message, state: FSMContext):
await state.update_data(number=message.contact.phone_number)
data = await state.get_data()
message_text = (f'Ваше имя: {data["name"]}\n'
f'Ваше имя телеграм: {data["TeleID"]}\n'
f'Номер: {data["number"]}\n'
f'Ваш вопрос: {data["purpose"]}')
# Разделяем данные после двоеточия
split_data = message_text.split(':')
name = split_data[1].split('\n')[0].strip()
telegram_id = split_data[2].split('\n')[0].strip()
number = split_data[3].split('\n')[0].strip()
purpose = split_data[4].strip()
# Добавляем данные в Google Таблицу
await add_data_to_sheet(sheet_id, {'name': name, 'TeleID': telegram_id, 'number': number, 'purpose': purpose})
await message.answer(message_text)
await state.clear()
Models, где хранится код для работы с таблицей:
from googleapiclient.discovery import build
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
SERVICE_ACCOUNT_FILE = os.path.join(BASE_DIR, 'credentials.json')
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES)
def add_data_to_sheet(google_service_instance, sheet_id, data):
range_name = 'Лист1!A1:D5' # Укажите здесь диапазон ячеек, куда вы хотите добавить данные
value_range_body = {
'majorDimension': 'ROWS',
'values': data
}
request = google_service_instance.spreadsheets().values().append(
spreadsheetId=sheet_id,
range=range_name,
valueInputOption='USER_ENTERED',
body=value_range_body
)
response = request.execute()
print('Данные успешно добавлены в таблицу.')
Что в конечном итоге мне нужно сделать и что я делаю неправильно для того, чтобы проект работал корректно, то есть после того как пользователь введет нужные данные, они добавятся в гугл таблицу?