Свой голос в Twilio: проигрывайте собственную озвучку
Глагол Say в Twilio читает текст в звонке встроенными голосами Amazon Polly и Google. Это удобно — и поэтому ваше IVR, напоминания и сообщение ожидания звучат как у тысяч других компаний.
Глагол Play вместо этого проигрывает любой аудиофайл. Бесплатным движком SuperClonica вы озвучиваете подсказки офлайн — стандартным голосом, голосом, обученным по записи вашего диктора, или голосом персонажа, — а Twilio проигрывает их в звонке. В этом руководстве — как сделать файлы для телефонии, отдавать их так, чтобы Twilio их кешировал, и когда Say всё ещё лучше.
Say или Play
Используйте Play для всех подсказок, одинаковых для всех звонящих, а Say оставьте для текста, который меняется в каждом звонке, например номера заказа.
- Say: Twilio произносит текст во время звонка встроенными голосами; ничего не нужно размещать.
- Play: Twilio скачивает аудиофайл по вашему URL и проигрывает его — любым голосом.
- Play принимает MP3, WAV, AIFF, GSM и μ-law и умеет повторять файл, пока абонент не положит трубку.
- SuperClonica говорит на 31 языке; китайский пока не поддерживается.
Послушайте голоса бесплатно
На странице любого голоса впишите одну из подсказок, от 30 до 100 символов, выберите язык и нажмите «Озвучить». Через несколько секунд вы услышите, как может звучать ваша линия, без регистрации.
Сделайте файлы для телефонии
WAV 8 кГц μ-law десятисекундной подсказки весит около 80 КБ, так что даже большое меню скачивается мгновенно.
- Установите движок: python -m pip install superclonica-cpu.
- В Python один раз создайте движок через tts = Superclonica(), затем озвучьте подсказку и сохраните её для телефона: audio, rate = tts.synthesize("Спасибо за звонок. Все операторы заняты, оставайтесь на линии.", "F1", "ru"); sf.write("hold.wav", resample_poly(audio, 8000, rate), 8000, subtype="ULAW").
- Для этого нужны soundfile и resample_poly из scipy.signal — оба ставятся вместе с движком.
- Twilio перекодирует весь звук звонка; в документации предупреждают, что MP3 128 кбит/с может звучать хуже, чем файл без потерь с низким битрейтом, — а WAV 8 кГц μ-law именно такой.
Отдайте и проиграйте подсказки
Размещайте файлы по HTTPS — на своём сервере или в объектном хранилище — с заголовками ETag или Last-Modified, чтобы Twilio кешировал их после первого проигрывания. С Python-библиотекой Twilio TwiML занимает две строки: r = VoiceResponse(); r.play('https://example.com/audio/hold.wav', loop=0), а значение loop 0 повторяет файл до конца звонка. Для текста, который меняется в каждом звонке, запустите HTTP-сервер SuperClonica рядом с приложением и озвучивайте фразу до ответа на вебхук: короткая фраза занимает заметно меньше секунды на настольном процессоре, а повторяющееся кешируйте.
Правила для автоматических звонков
В США FCC в 2024 году постановила, что голоса, созданные ИИ, в роботизированных звонках считаются искусственными по закону TCPA, поэтому для автоматических звонков нужно то же согласие, что и для любого записанного сообщения. Используйте голос, на который у вас есть права, — например, десять стандартных голосов модели или собственный голос, обученный по записи диктора, давшего согласие, — никогда не голос, имитирующий реального человека, и сообщайте, что абонент говорит с автоматической системой.