Таймкоды
startMs и endMs в transcript.final и translation.final — это смещения в миллисекундах внутри аудио этого потока, считая от первого отправленного байта. При store: true это позиции в записи, которую можно скачать.
Распознаватель отсчитывает время от своего собственного соединения с провайдером, а оно незаметно переустанавливается посреди сессии. В этот момент часы обнуляются, и переход по клику начинает прыгать назад. Короткие тесты переподключение не вызывают, поэтому проблема всплывает уже в продакшене.
Таймкоды берутся из байтовых часов по отправленному вами аудио, а не из часов распознавателя, поэтому они остаются монотонными при переподключениях upstream. Небольшая часть сегментов может прийти без таймкодов, если распознаватель не дал потокенного тайминга.
При store: true одно соединение даёт одну запись. Если связь оборвалась посреди сессии, вы получите несколько файлов — упорядочьте их по времени создания.