Собственное аудио

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

Чтобы воспроизвести свой звук в ответе навыка:

  1. В консоли разработчика или через HTTP API загрузите на Яндекс Диалоги аудиофайл.

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

    • Длительность файла: до 120 секунд. Треки длиннее 120 секунд будут автоматически обрезаны до 120 секунд.
    • Размер файла: до 5 МБ.
    • Формат: MP3, WAV или OGG.
    • Общий лимит: 1 ГБ.
  2. Чтобы аудио воспроизводилось, в ответе навыка укажите поле tts:

    "tts": "<speaker audio='dialogs-upload/{идентификатор навыка}/{идентификатор аудиофайла}.opus'>"
    

    Идентификатор навыка можно посмотреть в консоли разработчика: на странице навыка откройте вкладку Общие сведения и пролистайте вниз.

    Идентификатор аудиофайла станет известен, когда вы загрузите файл на Диалоги. Найдите идентификатор на странице навыка на вкладке Ресурсы или получите из ответа сервера, если вы загружали аудиофайл через HTTP API.

Загрузка аудиофайла через консоль разработчика

  1. Зайдите в консоль разработчика и откройте страницу навыка.

  2. Перейдите в раздел Ресурсы. В нем показан список всех ресурсов, загруженных для навыка (картинки и звуки), в том числе через HTTP API.

  3. Откройте вкладку Звуки и переместите в окошко аудиофайл с компьютера. Когда файл загрузится, он появится на этой странице.

  4. Чтобы аудиофайл воспроизводился, добавьте в ответ навыка поле tts. В поле укажите строку со ссылкой на аудио в Диалогах:

    "tts": "<speaker audio=\"dialogs-upload/{идентификатор навыка}/{идентификатор аудиофайла}.opus\">"
    

    Чтобы не набирать идентификаторы вручную, на странице ресурсов нажмите кнопку Скопировать:

    Копирование идентификатора аудиофайла на вкладке Звуки раздела Ресурсы в консоли разработчика

    Пример:

    "tts": "<speaker audio=\"dialogs-upload/0c41c02e-29dd-49a1-a065-2ae8eb4aacfb/22f850f4-33d4-456a-8979-f875d2f43d54.opus\">"
    

    Подробнее о формате ответа навыка

Загрузка аудиофайла через HTTP API

Авторизоваться

Загружать аудиофайлы может только пользователь Яндекса, который создал навык:

  1. Получите OAuth-токен для Диалогов.
  2. Указывайте токен в каждом запросе к Диалогам в заголовке Authorization:
Authorization: OAuth ARAAAAAB5vpbAAQ7o9abBlrUn0nshvcHZE4Irhw

Проверить свободное место

Лимит на загрузку аудиофайлов — 1 ГБ. Диалоги конвертируют загруженные аудиофайлы в формат OPUS и обрезают их до 120 секунд. В лимите учитывается размер сжатых файлов, а не оригиналов.

Чтобы узнать, сколько места занято, отправьте запрос:

GET /api/v1/status

Host: https://dialogs.yandex.net
Authorization: OAuth <OAuth-токен>
curl
curl \
  -H 'Authorization: OAuth <OAuth-токен>' \
  'https://dialogs.yandex.net/api/v1/status'

Диалоги пришлют доступный объем для аудиофайлов и картинок, а также занятый объем. Значения указаны в байтах. Лимиты аудио и картинок считаются отдельно:

{
    "_images": {
        "quota": {
            "total": 104857600,
            "used": 875963
        }
    },
    "sounds": {
        "quota": {
            "total": 1073741824,
            "used": 1593859
        }
    }
}

Загрузить файл

Выполните запрос:

POST /api/v1/skills/<идентификатор навыка>/sounds

Host: https://dialogs.yandex.net
Authorization: OAuth <OAuth-токен>
Content-Type: multipart/form-data

Content-Disposition: form-data; name="file"; filename="<путь к файлу>"
curl
curl \
  -H 'Authorization: OAuth <OAuth-токен>' \
  -H 'Content-Type: multipart/form-data' \
  -X POST \
  -F file=@<путь к файлу> \
  'https://dialogs.yandex.net/api/v1/skills/<идентификатор навыка>/sounds'

Идентификатор навыка посмотрите в консоли разработчика: на странице навыка откройте вкладку Общие сведения и пролистайте вниз.

Если Диалоги получили файл, в ответе придет информация о файле:

{
  "sound": {
    "id": <идентификатор аудиофайла>,
    "skillId": <идентификатор навыка>,
    "size": <размер файла | null>,
    "originalName": <название загружаемого файла>,
    "createdAt": <дата создания файла>,
    "isProcessed": <флаг готовности файла>,
    "error": <текст ошибки | null>
  }
}

Аудиофайлы обрабатываются асинхронно. В ответ на запрос сервер вернет информацию о загружаемом файле, но для использования в навыке файл будет доступен позже (обычно через несколько секунд).

Статус аудиофайла отображается в поле isProcessed. Чтобы проверить готовность, отправьте GET-запрос:

GET /api/v1/skills/<идентификатор навыка>/sounds/<идентификатор аудиофайла>

Host: https://dialogs.yandex.net
Authorization: OAuth <OAuth-токен>
curl
curl \
  -H 'Authorization: OAuth <OAuth-токен>' \
  'https://dialogs.yandex.net/api/v1/skills/<идентификатор навыка>/sounds/<идентификатор аудиофайла>'

Аудиофайл готов:

{
  "sound": {
    "id": "842e667b-bdb3-4b84-a0ae-c13a1e0b6f20",
    "skillId": "c1701dba-85ab-4aaa-b7b1-8881588fddad",
    "size": 428738,
    "originalName": "dolphin-sound.mp3",
    "createdAt": "2019-06-18T12:07:42.013Z",
    "isProcessed": true,
    "error": null
  }
}

Получить список загруженных файлов

Чтобы посмотреть аудиофайлы, загруженные для навыка, отправьте запрос:

GET /api/v1/skills/<идентификатор навыка>/sounds

Host: https://dialogs.yandex.net
Authorization: OAuth <OAuth-токен>
curl
curl \
  -H 'Authorization: OAuth <OAuth-токен>' \
  'https://dialogs.yandex.net/api/v1/skills/<идентификатор навыка>/sounds'

В ответ Диалоги вернут список аудиофайлов:

{
  "sounds": [
    {
      "id": "842e667b-bdb3-4b84-a0ae-c13a1e0b6f20",
      ...
    },
    {
      "id": ...
    }
  ],
  "total": 2
} 

Удалить файл

Чтобы удалить аудиофайл, отправьте его идентификатор в запросе DELETE:

DELETE /api/v1/skills/<идентификатор навыка>/sounds/<идентификатор аудиофайла>

Host: https://dialogs.yandex.net
Authorization: OAuth <OAuth-токен>
curl
curl \
  -H 'Authorization: OAuth <OAuth-токен>' \
  -X DELETE \
  'https://dialogs.yandex.net/api/v1/skills/<идентификатор навыка>/sounds/<идентификатор аудиофайла>'

Если аудиофайл указан верно и был успешно удален, Диалоги вернут ответ:

{
  "result": "ok"
} 

Полезные видео

Разработка прототипа голосового приложения