D-ID API готовит видео с говорящим аватаром по запросу из вашего сервера: вы отправляете изображение и текст сценария, получаете идентификатор задания, опрашиваете статус и забираете готовый файл. Весь путь проходит под контролем людей: сценарий утверждает автор, образ допускается только при согласии человека на изображении, а готовое видео смотрит приёмщик до публикации. Схема рассчитана на заранее написанные ролики, а диалог с посетителем сайта строится иначе.
Запрос на видео
Серверный вызов создаёт задание и возвращает его идентификатор; готовое видео забирают по этому идентификатору после смены статуса на «done».
Условный сценарий: компания хочет серию коротких приветствий для новых клиентов по утверждённому шаблону. Текст пишет сотрудник, образ ведущего заранее согласован, а скрипт собирает из этого заявки на генерацию. Персональные данные клиента остаются за пределами сценария: шаблон обезличен, а имя подставляется в сопроводительном сообщении уже вне видео.
В документации D-ID сейчас несколько линеек: Agents для интерактивных аватаров, V4 Expressive Avatars, V3 Pro и V3 Instant Avatars, V2 Avatars на основе фото и Video Translate. У каждой свой quickstart, и общая страница служит оглавлением. Эта статья описывает вариант с изображением и текстом из quickstart для фото-аватара; перед разработкой сверьте с вашим тарифом, какая линейка вам доступна. Интерактивный аватар для сайта разбирает отдельная статья про пилот на сайте.
Перед первым запросом подготовьте три вещи: изображение по адресу, доступному сервису, утверждённый текст и выбранный голос из списка поддерживаемых провайдеров. Заявку собирает скрипт из таблицы сценариев, где у каждой строки есть номер, версия текста, ссылка на изображение и отметка автора «утверждено». Строки без отметки остаются за пределами очереди.
- Адрес создания задания:
POST https://api.d-id.com/talks. - Поля запроса:
source_urlс изображением,script.typeсо значением text,script.inputс текстом,script.providerс типом и идентификатором голоса. - Ответ содержит
id, время создания и статус created.
Ключ и ответы
Ключ создаётся в настройках аккаунта студии D-ID, а запросы подписываются заголовком Authorization по схеме Basic с парой логина и пароля API. Храните пару в переменных окружения серверной части и вызывайте интерфейс только оттуда: в браузере и мобильном приложении ключ окажется виден любому.
| Ответ или статус | Что означает | Реакция скрипта |
|---|---|---|
| created, started | Задание создано или выполняется | Ждать и опрашивать повторно |
| done | Видео готово, в ответе есть result_url | Скачать и сохранить файл |
| error | Генерация завершилась сбоем | Записать причину, остановить задание |
| rejected | Задание отклонено | Передать человеку на разбор |
| 402 | Кредиты на аккаунте закончились | Остановить очередь, сообщить владельцу |
| 451 | Сработала модерация содержимого | Остановить, проверить материалы |
Для серии роликов очередь ограничивают так, чтобы закончившиеся кредиты остановили отправку и накопленные задания сохранились. Скрипт хранит отметки о том, какие строки сценариев уже отправлены, и после пополнения продолжает с первой неотправленной. Одна и та же строка уходит один раз, потому что идентификатор задания записан рядом.
Коды 400, 401 и 403 описывают ошибки запроса, авторизации и прав. Все ответы пишутся в журнал вместе с номером задания, но без самого ключа и без текста сценария, если в нём есть коммерческие сведения.
Опрос и сохранение
Статус проверяется запросом GET https://api.d-id.com/talks/{id}. Пока в ответе created или started, скрипт повторяет запрос с паузой, а при статусе done забирает адрес из поля result_url. Вместо опроса при создании задания можно передать адрес вебхука: сервис сам сообщит о завершении. Поле user_data допускает произвольные данные, но предназначено для несекретных сведений, поэтому клиентские данные в него класть нельзя.
- Отправьте заявку и сохраните идентификатор вместе с номером сценария и версией текста.
- Опрашивайте статус с нарастающей паузой либо ждите вебхук.
- При статусе done скачайте файл сразу: по документации адрес результата действует двадцать четыре часа.
- Сохраните видео в своё хранилище и запишите путь рядом с идентификатором.
- Передайте файл приёмщику вместе со сценарием и данными о согласии.
Неудачные задания разбирайте отдельно от удачных. Статус error означает сбой при генерации, а rejected — отказ принять заявку; при отказе повтор без правок материалов вряд ли что-то изменит. Для каждого случая в журнале хранится причина, чтобы автор сценария видел, что исправить.
Тот же приём «задание, статус, файл» применяется и при озвучке: схему с очередью и версиями текста разбирает статья про ElevenLabs API.
Согласие и приёмка
Лицо на изображении принадлежит конкретному человеку, и до генерации у вас должно быть его согласие на использование образа в таких роликах. Запишите, кто дал согласие, на какие сценарии и на какой срок, и храните запись рядом с исходным изображением. Видео с образом сотрудника, ушедшего из компании, снимается с публикации по условиям этого согласия.
| Что проверяет приёмщик | На что смотрит | Решение |
|---|---|---|
| Текст | Совпадение речи со сценарием, ударения, названия продуктов | Принять или вернуть автору |
| Образ | Совпадение с утверждённым изображением, отсутствие искажений | Принять или заменить изображение |
| Картинка | Артефакты в области рта и глаз, синхронизация губ | Принять или перегенерировать |
| Маркировка | Пометка о том, что видео создано нейросетью | Добавить до публикации |
Текст сценария заранее готовят для произнесения голосом: числа и сокращения записывают так, как они должны звучать, названия брендов проверяют на произношение, длинные фразы делят на короткие. Такая подготовка снижает число перегенераций, потому что большая часть замечаний приёмщика касается именно речи.
Список проверок приёмщик ведёт по каждому ролику. Перегенерация возможна только после записи причины, а серия утверждается пакетом лишь после выборочного просмотра нескольких роликов целиком. Сходный контур для обучающих материалов описан в статье про HeyGen.
Ролики какого типа вы готовили бы по сценарию вместо съёмки?
Границы схемы
Граница ответственности такая: сервис генерирует видео, скрипт управляет очередью, приёмщик отвечает за соответствие ролика тексту и образу, а владелец канала публикации решает, выходит ли видео. Один человек может совмещать роли в маленькой команде, но записи в журнале остаются раздельными.
Сценарий пишет человек или языковая модель с последующей проверкой. Модель допустимо просить подготовить черновик по утверждённому шаблону, но подтверждает текст автор, и факты в нём сверяются с источником. Права на публикацию, список допустимых образов и квота генераций проверяются сервером, и расширить их ни сценарием, ни подсказкой в тексте невозможно.
Изображения и сценарии отправляются внешнему сервису, поэтому в них остаются только материалы, которые компания вправе передавать. Полные данные клиентов обрабатывает учётная система, а в видео уходит обезличенный текст. Условия обработки данных и допустимого использования образа читайте в документации сервиса и договоре до запуска серии. Такой контур входит в общую автоматизацию бизнес-процессов.
Перед запуском серии проверьте, как устроено хранение. Видео, исходные изображения и тексты лежат в хранилище компании с ограниченным доступом, а срок хранения записан в регламенте. Если согласие на образ отозвано, ролики с этим образом удаляются из всех мест публикации по списку, который ведёт ответственный за канал.
Сгенерируйте один ролик по короткому сценарию на согласованном изображении и пройдите всю цепочку до записи в журнале. Сохраните идентификатор, файл, сценарий и фамилию приёмщика, а к серии переходите после первого утверждённого ролика.