docs(server-events): document assistant.speechStarted message#1028
Merged
dhruva-reddy merged 1 commit intomainfrom Apr 22, 2026
Merged
docs(server-events): document assistant.speechStarted message#1028dhruva-reddy merged 1 commit intomainfrom
dhruva-reddy merged 1 commit intomainfrom
Conversation
Contributor
Author
This was referenced Apr 22, 2026
Contributor
|
🌿 Preview your docs: https://vapi-preview-f66c6cba-3358-4ef0-bcb1-bc3e85d7d7f6.docs.buildwithfern.com |
Contributor
Author
4 tasks
adhamvapi
approved these changes
Apr 22, 2026
Contributor
Author
Merge activity
|
dhruva-reddy
added a commit
that referenced
this pull request
Apr 22, 2026
## Description - Creates `fern/providers/voice/minimax.mdx` — a new voice provider page for Minimax. Minimax was previously absent from the Voices section in the docs nav. - Registers the new page in `fern/docs.yml` under the existing `Voices (Text-to-speech)` section, alphabetically positioned after LMNT. - Documents basic Minimax voice configuration (`provider`, `model`, `voiceId`). - Documents the new `subtitleType` voice param (`"sentence"` default, `"word"` opt-in) and how it interacts with the [`assistant.speechStarted`](/server-url/events#assistant-speech-started) message. - Honest limitations section explaining that Minimax word-progress events fire near the _end_ of each synthesis segment (because Minimax only attaches subtitle metadata to the final audio chunk per segment), not per-word in real time. Recommends ElevenLabs for true playback-cadence highlighting. - Documents the other gotchas: `totalWords: 0` sentinel, `force-say` always emits text-only, barge-in cuts emission, CJK languages are word-counted per ideograph/kana/hangul. - Stacked on [PR #1028](https://app.graphite.com/github/pr/VapiAI/docs/1028) which adds the `#assistant-speech-started` anchor this page links to. ## Testing Steps - [x] Verified the page registers in `docs.yml` correctly (matches the structure of sibling voice provider pages like ElevenLabs and Cartesia) - [x] Verified the cross-reference link `/server-url/events#assistant-speech-started` matches the anchor added in the parent PR - [x] Reviewer: spot-check the Fern preview build to confirm the page renders and shows up in the Voices nav between LMNT and RimeAI
dhruva-reddy
added a commit
that referenced
this pull request
Apr 22, 2026
## Description
- Adds a new `### Live captions and word-level timing` section to `fern/quickstart/web.mdx`, slotted between the Web SDK installation tabs and `### Voice widget implementation` so it's discoverable in the natural client-side flow.
- Originally targeted `fern/sdk/web.mdx`, but that page is redirected away (`/sdk/web → /quickstart/web` per `docs.yml` line 1058) and is effectively orphaned. Moved the content to the canonical destination so customers can actually find it.
- Shows how to opt in via `clientMessages` and consume the event in a `vapi.on("message", ...)` handler with concrete code that branches on `timing?.type`.
- Includes a `<Warning>` callout explaining the cadence/granularity differences between providers so customers don't pick the wrong one for their UI:
- ElevenLabs (`word-alignment`) — true per-word playback cadence
- Minimax (`word-progress`) — segment-sized jumps near segment end
- All others — text-only events tied to audio playback
- Notes that `force-say` always emits text-only and that barge-in stops emission for the interrupted turn.
- Cross-links to the new [Minimax provider page](/providers/voice/minimax) and the canonical [Server events → Assistant Speech Started](/server-url/events#assistant-speech-started) reference.
- Stacked on [PR #1028](https://app.graphite.com/github/pr/VapiAI/docs/1028) (adds the events anchor) and [PR #1029](https://app.graphite.com/github/pr/VapiAI/docs/1029) (adds the Minimax page) — the cross-references in this PR resolve once the stack is merged.
## Testing Steps
- [x] Verified `/sdk/web` redirects to `/quickstart/web` per `docs.yml` redirect rule, confirming the original target page was not user-reachable
- [x] Verified both cross-reference links target paths/anchors created in the downstack PRs
- [x] Verified the new `<Warning>` block uses the same component pattern as existing warnings on this page
- [x] Reviewer: spot-check the Fern preview build to confirm the new section renders correctly between "Installation and setup" and "Voice widget implementation"
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Description
### Assistant Speech Startedsection toserver-url/events.mdxdocumenting the opt-inassistant.speechStartedserver/client messagetext,turn,source, optionaltiming) and the threetimingshapes:word-alignment(ElevenLabs) — per-word timestamps at playback cadenceword-progress(Minimax withvoice.subtitleType: "word") — cursor-based per-segment progressforce-sayevents always emit text-only, even on ElevenLabs/Minimaxassistant.speechStoppedevent — usespeech-update(status: "stopped") or watchturnincrementuser-interruptedtotalWords: 0is a valid sentinel; guard against divide-by-zero#assistant-speech-startedanchor created here.Testing Steps
<Warning>and table syntax matches existing usage on the page#assistant-speech-startedwill be auto-generated by Fern from the### Assistant Speech Startedheading; cross-references in PR 2 and PR 3 use this anchor