Ошибка Google TTS Python

Всем привет, я использую Google TTS,Zoom API и Selenium для того, что бы мой бот мог общаться в зуме с людьми и задавать вопросы, но проблема в том, что после того как бот приветствует обнаруженного участника, в логах вылезает ошибка DEPRECATED_ENDPOINT[15888:10840:0818/210759.301:ERROR:google_apis\gcm\engine\registration_request.cc:291] Registration response error message: DEPRECATED_ENDPOINT Сразу скажу, что большую часть кода, писал DeepSeek

Вот мой код:

import os
import time
import json
import threading
from datetime import datetime, timedelta
from urllib.parse import quote
from flask import Flask, redirect, request, render_template_string
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pyttsx3
import gtts
from pydub import AudioSegment
from pydub.playback import play
import tempfile
import logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    filename='bot.log',
    filemode='w'  # Перезаписывать файл при каждом запуске
)
logger = logging.getLogger(__name__)

app = Flask(__name__)

# Конфигурация
CONFIG_FILE = 'zoom_config.json'
CHROME_DRIVER_PATH = 'chromedriver.exe'  # Убедитесь, что файл находится в той же папке
CHROME_BINARY_PATH = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'  # Путь к Chrome

# Список вопросов для бота
QUESTIONS = [
    "Добрый день! Я голосовой бот. Как вас зовут?",
    "Приятно познакомиться! Какой у вас опыт работы в этой области?",
    "Что вас интересует в нашем продукте?",
    "Есть ли у вас вопросы ко мне?",
    "Спасибо за беседу! Хорошего дня!"
]

# Инициализация синтезатора речи
engine = pyttsx3.init()
engine.setProperty('rate', 150)
engine.setProperty('volume', 1.0)

def is_participant_present(driver):
"""Проверяет наличие участника несколькими способами"""
try:
    # Способ 1: Проверка счетчика участников
    try:
        counter = WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "span.footer-button__number-counter span")))
        return int(counter.text) > 1
    except:
        pass
    
    # Способ 2: Проверка видео элементов
    videos = driver.find_elements(By.CSS_SELECTOR, "video")
    if len(videos) > 1:
        return True
        
    # Способ 3: Проверка по списку участников
    participants = driver.find_elements(By.CSS_SELECTOR, "div.participants-item")
    return len(participants) > 1
        
except Exception as e:
    logger.error(f"Ошибка при проверке участников: {str(e)}")
return False

def wait_for_participant(driver):
    """Ожидание участника с несколькими методами обнаружения"""
    print("Ожидаем участника...")
    wait = WebDriverWait(driver, 300)  # 5 минут таймаут

try:
    # Способ 1: По счетчику участников
    def participant_count_greater_than_1(driver):
        try:
            counter = driver.find_element(By.CSS_SELECTOR, "span.footer-button__number-counter span")
            return int(counter.text) > 1
        except:
            return False
            
    wait.until(participant_count_greater_than_1)
    return True
    
except Exception as e:
    print(f"Способ 1 не сработал: {str(e)}")
    try:
        # Способ 2: По наличию видеоэлементов
        wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, "video")) > 1)
        return True
    except Exception as e:
        print(f"Способ 2 не сработал: {str(e)}")
        return False

вот основные функции моего бота:

def speak(text):
    """Упрощенная и надежная версия синтеза речи"""
    print(f"[BOT] {text}")

try:
    # Инициализация движка при каждом вызове для надежности
    engine = pyttsx3.init()
    engine.setProperty('rate', 180)
    
    # Установка русского голоса если доступен
    voices = engine.getProperty('voices')
    for voice in voices:
        if 'ru' in voice.languages or 'russian' in voice.languages:
            engine.setProperty('voice', voice.id)
            break
            
    engine.say(text)
    engine.runAndWait()
    engine.stop()  # Явная остановка движка
except Exception as e:
    print(f"Ошибка синтеза речи: {str(e)}")

def join_meeting_with_selenium(meeting_url):
    """Присоединяется к конференции через веб-интерфейс"""
    try:
        chrome_options = Options()
        chrome_options.add_argument("--start-maximized")
        chrome_options.add_argument("--use-fake-ui-for-media-stream")
        chrome_options.add_argument("--disable-notifications")
        chrome_options.add_argument("--mute-audio")
        chrome_options.add_argument("--disable-gpu")
        chrome_options.add_argument("--no-sandbox")
        chrome_options.add_argument("--disable-dev-shm-usage")
        chrome_options.add_experimental_option("prefs", {
            "profile.default_content_setting_values.media_stream_mic": 2,
            "profile.default_content_setting_values.media_stream_camera": 2,
            "profile.default_content_setting_values.geolocation": 2,
            "profile.default_content_setting_values.notifications": 2
        })

    if os.path.exists(CHROME_BINARY_PATH):
        chrome_options.binary_location = CHROME_BINARY_PATH
    
    service = Service(executable_path=CHROME_DRIVER_PATH)
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    # Извлекаем пароль из URL если есть
    password = ""
    if "pwd=" in meeting_url:
        password = meeting_url.split("pwd=")[1].split("&")[0]
    
    # Форсируем веб-версию с паролем
    forced_web_url = meeting_url.replace("zoom.us/j/", "zoom.us/wc/join/") + f"&uname=HR-AI"
    driver.get(forced_web_url)
    print("Открываем веб-версию Zoom")

    # Обрабатываем экран ввода пароля (если появился)
    try:
        password_field = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "input[type='password']")))
        password_field.send_keys(password)
        join_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "button.preview-join-button")))
        join_button.click()
        print("Успешно ввели пароль")
    except Exception as e:
        print(f"Поле для пароля не найдено: {str(e)}")

    # Вводим имя если требуется
    try:
        name_field = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "input-for-name")))
        name_field.send_keys("HR-AI")
        print("Ввели имя")
    except:
        print("Поле для имени не найдено")

    # Нажимаем кнопку присоединения
    try:
        join_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "button.preview-join-button")))
        join_button.click()
        print("Успешно присоединились")
    except Exception as e:
        print(f"Ошибка при нажатии кнопки: {str(e)}")

    # Ждем участника и задаем вопросы
    logger.info("Ожидаем участника...")
    participant_detected = False
    questions_asked = 0
    last_check_time = time.time()

    while questions_asked < len(QUESTIONS):
        try:
            # Проверяем участника каждые 5 секунд
            if time.time() - last_check_time > 5:
                if is_participant_present(driver):
                    if not participant_detected:
                        logger.info("Участник обнаружен, начинаю диалог...")
                        participant_detected = True
                    
                    # Задаем вопрос
                    speak(QUESTIONS[questions_asked])
                    questions_asked += 1
                    logger.info(f"Задан вопрос {questions_asked}/{len(QUESTIONS)}")
                    
                    # Делаем скриншот для диагностики
                    driver.save_screenshot(f'question_{questions_asked}.png')
                    
                    # Ждем перед следующим вопросом
                    if questions_asked < len(QUESTIONS):
                        logger.info("Ожидаем 20 секунд перед следующим вопросом...")
                        time.sleep(20)
                else:
                    logger.info("Участник не обнаружен, продолжаем проверку...")
                
                last_check_time = time.time()
            
            time.sleep(1)
            
        except Exception as e:
            logger.error(f"Ошибка в основном цикле: {str(e)}")
            time.sleep(5)

except Exception as e:
    print(f"Критическая ошибка: {str(e)}")
    if 'driver' in locals():
        driver.save_screenshot('error.png')
finally:
    if 'driver' in locals():
        driver.quit()

Ответы (0 шт):