PHPackages                             tigusigalpa/yandex-speechkit-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. tigusigalpa/yandex-speechkit-php

ActiveLibrary[API Development](/categories/api)

tigusigalpa/yandex-speechkit-php
================================

PHP SDK for Yandex SpeechKit API with Laravel support. Async speech recognition, speaker labeling, speech analysis.

v1.0.0(3mo ago)57MITPHPPHP ^8.0

Since Mar 5Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/tigusigalpa/yandex-speechkit-php)[ Packagist](https://packagist.org/packages/tigusigalpa/yandex-speechkit-php)[ Docs](https://github.com/tigusigalpa/yandex-speechkit-php)[ RSS](/packages/tigusigalpa-yandex-speechkit-php/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (1)Dependencies (6)Versions (2)Used By (0)

Yandex SpeechKit PHP SDK
========================

[](#yandex-speechkit-php-sdk)

[![Yandex SpeechKit PHP SDK](https://private-user-images.githubusercontent.com/2721390/558822155-60dac329-9959-4856-b44f-ada33a9685e3.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODIzNzg5OTUsIm5iZiI6MTc4MjM3ODY5NSwicGF0aCI6Ii8yNzIxMzkwLzU1ODgyMjE1NS02MGRhYzMyOS05OTU5LTQ4NTYtYjQ0Zi1hZGEzM2E5Njg1ZTMucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDYyNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA2MjVUMDkxMTM1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Yjg3OTZmOWE1Njg1NzgyN2Y4ZjFiNDNlMzdiYjEwYjJjM2RlMzZkZGViODRiOTFkMzcyNjZhZWU0NTFlNjU5NyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGcG5nIn0.RHwZR5OwitH6PC92eA_4R5mWHA5Iyr3eEWR4Cv4OR3w)](https://private-user-images.githubusercontent.com/2721390/558822155-60dac329-9959-4856-b44f-ada33a9685e3.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODIzNzg5OTUsIm5iZiI6MTc4MjM3ODY5NSwicGF0aCI6Ii8yNzIxMzkwLzU1ODgyMjE1NS02MGRhYzMyOS05OTU5LTQ4NTYtYjQ0Zi1hZGEzM2E5Njg1ZTMucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDYyNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA2MjVUMDkxMTM1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Yjg3OTZmOWE1Njg1NzgyN2Y4ZjFiNDNlMzdiYjEwYjJjM2RlMzZkZGViODRiOTFkMzcyNjZhZWU0NTFlNjU5NyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGcG5nIn0.RHwZR5OwitH6PC92eA_4R5mWHA5Iyr3eEWR4Cv4OR3w)

[![PHP Version](https://camo.githubusercontent.com/911a83e2aa6fe73660ab613629a95c76622bf03049a7344e80c5ea72d4ef9c7d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e302d626c7565)](https://www.php.net/)[![Laravel](https://camo.githubusercontent.com/c7a4a1112ca327e74d3843c2bf9c2a1a998979f4b1712301fa55953aac1a14fd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d253545382e30253743253545392e3025374325354531302e3025374325354531312e3025374325354531322e302d726564)](https://laravel.com/)[![License](https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e)](LICENSE)

PHP SDK для работы с [Yandex SpeechKit API](https://cloud.yandex.ru/services/speechkit). Работает как самостоятельная библиотека или как Laravel-пакет. Если вам нужно транскрибировать аудио, определять спикеров или анализировать речь из PHP — вы по адресу.

**Язык:** Русский | [English](README-en.md)

Что умеет
---------

[](#что-умеет)

- Асинхронное распознавание длинного аудио (до 4 часов / 1 ГБ)
- Форматы WAV, OGG\_OPUS, MP3 и raw PCM
- Разделение по спикерам (диаризация) — кто что сказал
- Нормализация текста и фильтрация мата из коробки
- Мультиязычное распознавание
- Встраивается в Laravel через Facade и Service Provider
- Покрыт тестами

Экосистема
----------

[](#экосистема)

Пакет входит в небольшое семейство PHP-библиотек для Yandex Cloud:

- **[tigusigalpa/yandex-cloud-client-php](https://github.com/tigusigalpa/yandex-cloud-client-php)** — аутентификация: OAuth-токены, генерация и автообновление IAM-токенов
- **[tigusigalpa/yandexgpt-php](https://github.com/tigusigalpa/yandexgpt-php)** — интеграция с YandexGPT

Об авторизации можно не думать — `yandex-cloud-client-php` сам разберётся с IAM-токенами.

Требования
----------

[](#требования)

- PHP ^8.0
- Laravel ^8.0|^9.0|^10.0|^11.0|^12.0 (опционально, для интеграции с Laravel)
- tigusigalpa/yandex-cloud-client-php ^1.0

Установка
---------

[](#установка)

```
composer require tigusigalpa/yandex-speechkit-php
```

Настройка Laravel
-----------------

[](#настройка-laravel)

### 1. Опубликуйте конфиг

[](#1-опубликуйте-конфиг)

```
php artisan vendor:publish --tag=yandex-speechkit-config
```

Создаст файл `config/yandex-speechkit.php`.

### 2. Пропишите `.env`

[](#2-пропишите-env)

Минимум нужен folder ID и один из способов авторизации:

```
# Через OAuth-токен (рекомендуется)
YANDEX_OAUTH_TOKEN=ваш_oauth_токен
YANDEX_FOLDER_ID=ваш_folder_id

# ...или через API-ключ
YANDEX_API_KEY=ваш_api_ключ
YANDEX_FOLDER_ID=ваш_folder_id

# Необязательно — дефолты подходят в большинстве случаев
YANDEX_SPEECHKIT_MODEL=general
YANDEX_SPEECHKIT_POLL_INTERVAL=10
YANDEX_SPEECHKIT_MAX_WAIT=14400
```

### 3. Service Provider

[](#3-service-provider)

Регистрируется автоматически через package discovery Laravel — ничего делать не нужно.

Использование
-------------

[](#использование)

### Чистый PHP (без Laravel)

[](#чистый-php-без-laravel)

```
use Tigusigalpa\YandexCloudClient\YandexCloudClient;
use Tigusigalpa\YandexSpeechKit\YandexSpeechKitClient;
use Tigusigalpa\YandexSpeechKit\Models\RecognitionRequest;
use Tigusigalpa\YandexSpeechKit\Models\AudioFormat;

// Настройка
$cloudClient = new YandexCloudClient('ваш_oauth_токен');
$client = new YandexSpeechKitClient($cloudClient, 'ваш_folder_id');

// Собираем запрос
$request = new RecognitionRequest(
    uri: 'https://storage.yandexcloud.net/my-bucket/audio.wav',
    model: 'general',
    audioFormat: AudioFormat::container('WAV'),
);

// Самый простой способ — recognizeAndWait() сам опрашивает статус и дождётся результата
$result = $client->recognizeAndWait($request);
echo "Транскрипция: " . $result->fullText . "\n";

// Если нужен контроль, можно опрашивать вручную:
$operation = $client->recognizeFileAsync($request);
echo "ID операции: " . $operation->id . "\n";

do {
    sleep(10);
    $operation = $client->getOperation($operation->id);
    echo "Статус: " . ($operation->isDone() ? 'готово' : 'в работе') . "\n";
} while (!$operation->isDone());

$result = $client->getRecognition($operation->id);
echo "Транскрипция: " . $result->fullText . "\n";
```

### С Laravel

[](#с-laravel)

```
use Tigusigalpa\YandexSpeechKit\Laravel\Facades\YandexSpeechKit;
use Tigusigalpa\YandexSpeechKit\Models\RecognitionRequest;
use Tigusigalpa\YandexSpeechKit\Models\AudioFormat;

$request = new RecognitionRequest(
    uri: 'https://storage.yandexcloud.net/my-bucket/audio.wav',
    audioFormat: AudioFormat::container('WAV'),
);

$result = YandexSpeechKit::recognizeAndWait($request);
echo $result->fullText;
```

### Полный пример со всеми настройками

[](#полный-пример-со-всеми-настройками)

```
use Tigusigalpa\YandexSpeechKit\Models\RecognitionRequest;
use Tigusigalpa\YandexSpeechKit\Models\AudioFormat;
use Tigusigalpa\YandexSpeechKit\Models\TextNormalization;
use Tigusigalpa\YandexSpeechKit\Models\LanguageRestriction;
use Tigusigalpa\YandexSpeechKit\Models\SpeakerLabeling;

// Настраиваем всё: нормализацию, языки, разделение по спикерам
$request = new RecognitionRequest(
    uri: 'https://storage.yandexcloud.net/my-bucket/audio.wav',
    model: 'general',
    audioFormat: AudioFormat::container('WAV'),
    textNormalization: new TextNormalization(
        textNormalization: 'TEXT_NORMALIZATION_ENABLED',
        profanityFilter: true,
        literatureText: false
    ),
    languageRestriction: new LanguageRestriction(
        restrictionType: 'WHITELIST',
        languageCode: ['ru-RU', 'en-US']
    ),
    speakerLabeling: new SpeakerLabeling('SPEAKER_LABELING_ENABLED')
);

// Запускаем распознавание
$operation = $client->recognizeFileAsync($request);
echo "ID операции: " . $operation->id . "\n";

// Ждём...
do {
    sleep(10);
    $operation = $client->getOperation($operation->id);
    echo "Статус: " . ($operation->isDone() ? 'готово' : 'в работе') . "\n";
} while (!$operation->isDone());

// Что-то пошло не так?
if ($operation->hasError()) {
    throw new \RuntimeException($operation->getErrorMessage());
}

// Забираем результат
$result = $client->getRecognition($operation->id);
echo "Транскрипция: " . $result->fullText . "\n";
echo "Слов: " . count($result->words) . "\n";

// Можно пройтись по отдельным словам с таймкодами
foreach ($result->words as $word) {
    echo sprintf(
        "%s [%s - %s]\n",
        $word['text'],
        $word['startTimeMs'],
        $word['endTimeMs']
    );
}

// Не забудьте почистить за собой
$client->deleteRecognition($operation->id);
echo "Результаты удалены.\n";
```

### Передача аудио в base64

[](#передача-аудио-в-base64)

Нет удалённого URL? Можно передать содержимое файла напрямую:

```
$audioContent = base64_encode(file_get_contents('/path/to/audio.wav'));

$request = new RecognitionRequest(
    content: $audioContent,
    audioFormat: AudioFormat::container('WAV')
);

$result = $client->recognizeAndWait($request);
```

### Работа с raw PCM

[](#работа-с-raw-pcm)

```
use Tigusigalpa\YandexSpeechKit\Models\AudioFormat;

$request = new RecognitionRequest(
    uri: 'https://storage.yandexcloud.net/my-bucket/audio.pcm',
    audioFormat: AudioFormat::raw(
        audioEncoding: 'LINEAR16_PCM',
        sampleRateHertz: 16000,
        audioChannelCount: 1
    )
);
```

### Отмена операции

[](#отмена-операции)

Передумали? Не проблема:

```
$operation = $client->recognizeFileAsync($request);

$cancelledOperation = $client->cancelOperation($operation->id);
echo "Операция отменена: " . $cancelledOperation->id . "\n";
```

Справочник API
--------------

[](#справочник-api)

### Методы клиента

[](#методы-клиента)

МетодЧто делаетВозвращает`recognizeFileAsync($request)`Запускает асинхронное распознавание`Operation``getRecognition($operationId)`Забирает результат распознавания`RecognitionResult``deleteRecognition($operationId)`Удаляет сохранённые результаты`bool``getOperation($operationId)`Проверяет статус операции`Operation``cancelOperation($operationId)`Отменяет операцию`Operation``recognizeAndWait($request, $poll = 10, $maxWait = 14400)`Всё в одном: отправить, дождаться, вернуть результат`RecognitionResult``getCloudClient()`Возвращает базовый cloud-клиент`YandexCloudClient`### Поддерживаемые форматы

[](#поддерживаемые-форматы)

ФорматТипКак использоватьWAVКонтейнер`AudioFormat::container('WAV')`OGG\_OPUSКонтейнер`AudioFormat::container('OGG_OPUS')`MP3Контейнер`AudioFormat::container('MP3')`LINEAR16\_PCMRaw`AudioFormat::raw('LINEAR16_PCM', 16000, 1)`### Модели распознавания

[](#модели-распознавания)

- `general` — основная, подходит для большинства задач
- `general:rc` — release candidate, новее, но менее обкатана
- `general:deprecated` — старая версия, пока доступна
- `deferred-general` — то же качество, но обрабатывается в очереди (дешевле)
- `deferred-general:rc` — отложенная RC
- `deferred-general:deprecated` — отложенная, старая версия

Обработка ошибок
----------------

[](#обработка-ошибок)

Три типа исключений, чтобы можно было реагировать по ситуации:

```
use Tigusigalpa\YandexSpeechKit\Exceptions\AuthenticationException;
use Tigusigalpa\YandexSpeechKit\Exceptions\RecognitionException;
use Tigusigalpa\YandexSpeechKit\Exceptions\OperationException;

try {
    $result = $client->recognizeAndWait($request);
} catch (AuthenticationException $e) {
    // Плохой токен, истёкшие credentials и т.п.
    echo "Ошибка авторизации: " . $e->getMessage();
} catch (RecognitionException $e) {
    // Что-то не так с аудио или запросом
    echo "Ошибка распознавания: " . $e->getMessage();
    echo "Код ошибки API: " . $e->getApiErrorCode();
} catch (OperationException $e) {
    // Таймаут, отменённая операция и т.д.
    echo "Ошибка операции: " . $e->getMessage();
}
```

Тесты
-----

[](#тесты)

```
composer install
vendor/bin/phpunit
```

Ссылки
------

[](#ссылки)

- [Документация SpeechKit](https://cloud.yandex.ru/docs/speechkit/)
- [Справочник API](https://cloud.yandex.ru/docs/speechkit/stt/api/transcribation-api)
- [Этот репозиторий на GitHub](https://github.com/tigusigalpa/yandex-speechkit-php)
- [yandex-cloud-client-php](https://github.com/tigusigalpa/yandex-cloud-client-php) — слой авторизации
- [yandexgpt-php](https://github.com/tigusigalpa/yandexgpt-php) — интеграция с YandexGPT

Лицензия
--------

[](#лицензия)

MIT. См. [LICENSE](LICENSE).

Автор
-----

[](#автор)

**Игорь Сазонов** — [GitHub](https://github.com/tigusigalpa) ·

Участие в разработке
--------------------

[](#участие-в-разработке)

PR и issues приветствуются. См. [CONTRIBUTING.md](CONTRIBUTING.md).

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance78

Regular maintenance activity

Popularity9

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

113d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/2721390?v=4)[Igor Sazonov](/maintainers/tigusigalpa)[@tigusigalpa](https://github.com/tigusigalpa)

---

Top Contributors

[![tigusigalpa](https://avatars.githubusercontent.com/u/2721390?v=4)](https://github.com/tigusigalpa "tigusigalpa (4 commits)")

---

Tags

apilaravelphpyandex-aiyandex-apiyandex-cloudyandex-speech-kityandex-speechkityandex-speechkit-apiyandexcloudphpapilaravelsdkaiyandexspeech-to-textspeechkitsttyandex cloudspeech-recognition

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/tigusigalpa-yandex-speechkit-php/health.svg)

```
[![Health](https://phpackages.com/badges/tigusigalpa-yandex-speechkit-php/health.svg)](https://phpackages.com/packages/tigusigalpa-yandex-speechkit-php)
```

###  Alternatives

[openai-php/laravel

OpenAI PHP for Laravel is a supercharged PHP API client that allows you to interact with the Open AI API

3.7k8.8M83](/packages/openai-php-laravel)[mozex/anthropic-laravel

Laravel integration for the Anthropic API: facade, config publishing, install command, testing fakes, messages, streaming, tool use, thinking, and batches.

72287.1k1](/packages/mozex-anthropic-laravel)[resend/resend-laravel

Resend for Laravel

1212.2M8](/packages/resend-resend-laravel)[smodav/mpesa

M-Pesa API implementation

16167.1k1](/packages/smodav-mpesa)[gemini-api-php/laravel

Gemini API client for Laravel

8916.9k](/packages/gemini-api-php-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
