Интеграция api

Гость1 день в сервисе
Данные заказчика будут вам доступны после подачи заявки
05.10.2025

Планируется разработать локальную систему для синтеза речи (TTS) с использованием голосов Яндекса. Мы будем создавать свой собственный локальный сервер, который будет обрабатывать запросы и взаимодействовать с Яндексом через WebSocket.

Архитектура и схема

  1. Локальный сервер:

    • Мы создаём WebSocket сервер, который будет работать на порту 127.0.0.1:8080 (или другом доступном порту). Этот сервер будет обрабатывать запросы от клиентской части, например, от интерфейса пользователя (GUI).

    • Сервер будет принимать JSON-запросы от клиента, такие как:

    {
      "guid": "uuid",
      "text": "Привет",
      "voice": "Alice"
    }
    

    Эти запросы будут передаваться в неофициальное API Яндекса для генерации аудиопотока.

  2. Подключение к Яндексу:

    • Мы будем подключаться к закрытому серверу Яндекса wss://uniproxy.alice.yandex.net/uni.ws через WebSocket. Это API используется для получения аудио в формате Opus.

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

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

      https://vc.go.mail.ru/account/create_anonymous
      

      Пример ответа:

      {
        "result": {
          "session_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
          "account_id": "xxxxxx",
          "session_secret": "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
        }
      }
      

      Используется:

      • session_secret → в заголовках Authorization и X-UPRX-AUTH-TOKEN

      • session_id и account_id → для синхронизации состояния (SynchronizeState)

    • Для установления соединения требуются следующие заголовки:

      Origin: https://yandex.ru
      User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
       AppleWebKit/537.36 (KHTML, like Gecko)
       Chrome/138.0.0.0 YaBrowser/25.8.0.0 Safari/537.36
      X-UPRX-APP-ID: YaBro
      X-UPRX-APP-VERSION: 25.0.0.0
      X-UPRX-OS-VERSION: 10.0.22631
      X-UPRX-PLATFORM: Windows
      X-UPRX-SPEECHKIT-VERSION: UltraHigh
      X-UPRX-UUID: <UUID v4>
      X-UPRX-AUTH-TOKEN: <session_secret>
      Authorization: Bearer <session_secret>
      

      Ключевые моменты:

      • Все X-UPRX-* заголовки обязательны.

      • X-UPRX-UUID генерируется как UUID v4 для каждой сессии.

      • Authorization и X-UPRX-AUTH-TOKEN содержат одно и то же значение (session_secret).

      • Без этих заголовков соединение не принимается сервером.

  3. Протокол сообщений:

    • Процесс взаимодействия с сервером будет следующим:

      1. StreamControl: Инициализация потока.

      2. SynchronizeState: Синхронизация состояния с сервером.

      3. GenerateTTS: Отправка текста на озвучку.

      4. Ответ от сервера: Speak, Opus аудиофайл, SpeechFinished.

    • Сервер возвращает бинарный аудиофайл в формате Opus, который мы будем декодировать в PCM (24000 Hz, 16 бит) и отправлять на проигрывание.

Схема архитектуры

Вот схема работы системы:

               +------------------+
               |    Клиент (GUI)   |
               +--------+---------+
                        |
                        | JSON-запрос
                        ▼
            +--------------------------+
            | Локальный WebSocket сервер |
            | 127.0.0.1:8080/Chat        |
            +-----------+--------------+
                        |
                        | WebSocket-соединение
                        ▼
            +------------------------------+
            |   Сервер Яндекса (API)       |
            | wss://uniproxy.alice.yandex.net |
            +------------------------------+
                        |
                        | Ответ: Opus аудиофайл
                        ▼
            +-------------------------------+
            |  Локальный HTTP-сервер         |
            | 127.0.0.1:4848/Plugin/Speech   |
            +-------------------------------+
                        |
                        | Проигрывание аудио
                        ▼
             +-------------------------+
             |    Проигрыватель        |
             +-------------------------+

Что нужно для реализации:

  1. WebSocket клиент:

    • Разработаем WebSocket клиент для взаимодействия с сервером Яндекса. Он будет использовать анонимную сессию, как в MiniChat, с генерацией UUID и токенов.

  2. Декодер Opus → PCM:

    • Применим декодирование аудиопотока в формат PCM (24000 Hz, 16 бит), чтобы воспроизвести звук на локальном плеере.

  3. Голоса:

    • Для синтеза речи будут использоваться голоса, доступные через неофициальное API (Алиса, Маруся, Максим, Татьяна).

Ограничения и риски:

  • Это неофициальное API, что означает, что в будущем доступ к нему может быть ограничен или закрыт.

  • Мы можем столкнуться с ограничениями по количеству запросов или времени жизни сессии.

  • На данный момент доступны только несколько голосов.

Задача

Необходимо реализовать локальный сервер, который будет:

  • Принимать запросы от клиента (GUI) в формате JSON.

  • Подключаться к серверу Яндекса для получения аудиопотока.

  • Обрабатывать полученные данные и передавать их на проигрывание через локальный плеер.

Заявки фрилансеров