From 53a43a04f3d6e214d4391897eba0e9aaf81745c2 Mon Sep 17 00:00:00 2001 From: Devon-White Date: Wed, 19 Aug 2026 12:26:27 -0400 Subject: [PATCH 1/4] docs: filter interactive voice widgets from LLM exports --- .../guides/getting-started/authentication.mdx | 2 +- .../cxml/guides/webhooks/webhook-security.mdx | 2 +- .../best-practices-for-ai/index.mdx | 2 +- .../Integrations/vapi/inbound-calls.mdx | 2 +- .../pages/calling/voice/SIP/byoc/index.mdx | 2 +- .../pages/calling/voice/TTS/azure.mdx | 4 ++ .../pages/calling/voice/TTS/cartesia.mdx | 4 ++ .../pages/calling/voice/TTS/deepgram.mdx | 4 ++ .../pages/calling/voice/TTS/elevenlabs.mdx | 4 ++ .../platform/pages/calling/voice/TTS/fish.mdx | 4 ++ .../pages/calling/voice/TTS/google.mdx | 4 ++ .../platform/pages/calling/voice/TTS/grok.mdx | 4 ++ .../pages/calling/voice/TTS/groq-tts.mdx | 4 ++ .../pages/calling/voice/TTS/index.mdx | 4 ++ .../pages/calling/voice/TTS/inworld.mdx | 4 ++ .../pages/calling/voice/TTS/minimax.mdx | 4 ++ .../pages/calling/voice/TTS/mistral.mdx | 4 ++ .../pages/calling/voice/TTS/openai.mdx | 4 ++ .../pages/calling/voice/TTS/polly.mdx | 4 ++ .../platform/pages/calling/voice/TTS/rime.mdx | 4 ++ .../pages/calling/voice/TTS/smallest.mdx | 4 ++ .../pages/calling/voice/TTS/speechify.mdx | 4 ++ .../pages/platform/compliance/hipaa.mdx | 2 +- .../pages/platform/compliance/overview.mdx | 2 +- .../pages/platform/compliance/tcpa.mdx | 2 +- scripts/check-llm-exports.mjs | 6 ++- scripts/llm-export-cases.json | 42 +++++++++++++++++++ 27 files changed, 123 insertions(+), 9 deletions(-) diff --git a/fern/products/browser-sdk/pages/v4/guides/getting-started/authentication.mdx b/fern/products/browser-sdk/pages/v4/guides/getting-started/authentication.mdx index 1de63bc776..8bd7abbe9b 100644 --- a/fern/products/browser-sdk/pages/v4/guides/getting-started/authentication.mdx +++ b/fern/products/browser-sdk/pages/v4/guides/getting-started/authentication.mdx @@ -332,7 +332,7 @@ Only credentials issued with full user (Subscriber) identity can register. Guest Create a Subscriber Access Token (SAT) for your project using the request snippet below. Have your space name and an API token ready, with at least one of the **Voice / Messaging / Fax / Video** scopes. Both come from the API Credentials section of the SignalWire dashboard. Open the [Create Subscriber Token](/docs/apis/rest/subscribers/tokens/create-subscriber-token) reference to send the request with your space and credentials filled in. - + The Project API Token can issue a SAT for any user in your project. Use a development project, or rotate the API token afterward. diff --git a/fern/products/compatibility-api/pages/cxml/guides/webhooks/webhook-security.mdx b/fern/products/compatibility-api/pages/cxml/guides/webhooks/webhook-security.mdx index 08ea756be3..171f4a2602 100644 --- a/fern/products/compatibility-api/pages/cxml/guides/webhooks/webhook-security.mdx +++ b/fern/products/compatibility-api/pages/cxml/guides/webhooks/webhook-security.mdx @@ -51,7 +51,7 @@ This method takes as its parameters: If you are using Express for your application, you also have the option of using the middleware shortcut `webhook()` which doesn't require any parameters instead of the `validateRequest` method. - + If using a service like ngrok to test locally, it is preferred to use the `validateRequest` method instead of the `webhook()` middleware. This is because `ngrok` will rewrite the request headers and protocol, which will cause the signature to fail validation. diff --git a/fern/products/platform/pages/ai/get-started/best-practices-for-ai/index.mdx b/fern/products/platform/pages/ai/get-started/best-practices-for-ai/index.mdx index b91c536043..7c9dbdecda 100644 --- a/fern/products/platform/pages/ai/get-started/best-practices-for-ai/index.mdx +++ b/fern/products/platform/pages/ai/get-started/best-practices-for-ai/index.mdx @@ -401,7 +401,7 @@ The prompt asks the agent to call `opt_out`, and the handler is what makes the o The number lands on your do-not-call list before the agent says a word about it, so the record exists even if the caller hangs up on the confirmation. - + This is technical guidance, not legal advice. Requirements vary by jurisdiction and by call type, and they change often. Consult qualified counsel before launching an outbound program. diff --git a/fern/products/platform/pages/ai/guides/Integrations/vapi/inbound-calls.mdx b/fern/products/platform/pages/ai/guides/Integrations/vapi/inbound-calls.mdx index b819ed4fde..7752d50f83 100644 --- a/fern/products/platform/pages/ai/guides/Integrations/vapi/inbound-calls.mdx +++ b/fern/products/platform/pages/ai/guides/Integrations/vapi/inbound-calls.mdx @@ -54,7 +54,7 @@ Run the API call below to create the trunk, making sure to replace `YOUR_VAPI_PR Save the `id` from the response - you'll need this credential ID for the next step. - + These IP addresses are current as of this guide's publication, but SignalWire IPs can change and should be programmatically monitored to avoid any impact on calls. You can gather SignalWire's latest IPs by performing a DIG or nslookup of `sip.signalwire.com`. See our guide on [allowing SignalWire IPs through firewalls][sw-firewall-guide] for more details. diff --git a/fern/products/platform/pages/calling/voice/SIP/byoc/index.mdx b/fern/products/platform/pages/calling/voice/SIP/byoc/index.mdx index 9dc32eca44..3a07aeeb60 100644 --- a/fern/products/platform/pages/calling/voice/SIP/byoc/index.mdx +++ b/fern/products/platform/pages/calling/voice/SIP/byoc/index.mdx @@ -28,7 +28,7 @@ If you would like to do inbound BYOC (i.e. send your carrier traffic to SignalWi For detailed instructions on how to create a domain application, please follow the [SIP Domain Applications](/docs/platform/voice/sip/domain-applications) guide. - + It's VERY important to whitelist the IPs that you want to allow through - if you do not select this option, anyone who has the URL could send traffic to your custom domain app. diff --git a/fern/products/platform/pages/calling/voice/TTS/azure.mdx b/fern/products/platform/pages/calling/voice/TTS/azure.mdx index 204253967e..94ee12d12e 100644 --- a/fern/products/platform/pages/calling/voice/TTS/azure.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/azure.mdx @@ -12,10 +12,14 @@ Microsoft's Azure platform offers an impressive array of high-quality, multiling ## Voices + + Press play to audition any Azure voice, then **copy config** to grab the value for SWML or your SDK. + + Browse the complete list of Azure Neural voices in Microsoft's official documentation. diff --git a/fern/products/platform/pages/calling/voice/TTS/cartesia.mdx b/fern/products/platform/pages/calling/voice/TTS/cartesia.mdx index 9eb32b5298..b88e8ee7f8 100644 --- a/fern/products/platform/pages/calling/voice/TTS/cartesia.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/cartesia.mdx @@ -43,10 +43,14 @@ Cartesia account — including custom or cloned voices — will not work. See [Custom and cloned voices](/docs/platform/voice/tts#custom-and-cloned-voices) for details. + + Press play to audition any Cartesia voice, then **copy config** to grab the value for SWML or your SDK. + + Copy the voice ID from the table below: diff --git a/fern/products/platform/pages/calling/voice/TTS/deepgram.mdx b/fern/products/platform/pages/calling/voice/TTS/deepgram.mdx index bdbbb9c649..336efec524 100644 --- a/fern/products/platform/pages/calling/voice/TTS/deepgram.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/deepgram.mdx @@ -28,10 +28,14 @@ Deepgram's Aura model provides ultra-low latency text-to-speech optimized for co ## Voices + + Press play to audition any Deepgram voice, then **copy config** to grab the value for SWML or your SDK. + + Deepgram Aura voices are designed for natural-sounding English speech. Each voice follows the pattern `aura--en`. Popular voices include: diff --git a/fern/products/platform/pages/calling/voice/TTS/elevenlabs.mdx b/fern/products/platform/pages/calling/voice/TTS/elevenlabs.mdx index 44cd7d8430..e0cb7af590 100644 --- a/fern/products/platform/pages/calling/voice/TTS/elevenlabs.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/elevenlabs.mdx @@ -30,10 +30,14 @@ ElevenLabs voice import is available by request: see [Custom and cloned voices](/docs/platform/voice/tts#custom-and-cloned-voices) for details. + + Press play to audition any ElevenLabs voice, then **copy config** to grab the value for SWML or your SDK. + + You can use the **Name** and **ID** values for each voice in the below table interchangeably. | Name | ID | diff --git a/fern/products/platform/pages/calling/voice/TTS/fish.mdx b/fern/products/platform/pages/calling/voice/TTS/fish.mdx index 20ecfce9d9..8d87a9c3e3 100644 --- a/fern/products/platform/pages/calling/voice/TTS/fish.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/fish.mdx @@ -26,10 +26,14 @@ See [Fish Audio's documentation](https://docs.fish.audio/) for more detail. ## Voices + + Press play to audition any Fish Audio voice, then **copy config** to grab the value for SWML or your SDK. + + A Fish Audio voice ID is a **reference ID** — a long hexadecimal string found on the voice's page in the Fish Audio marketplace. The default voice is Energetic Male (`802e3bc2b27e49c2995d23ef70e6ac89`). diff --git a/fern/products/platform/pages/calling/voice/TTS/google.mdx b/fern/products/platform/pages/calling/voice/TTS/google.mdx index c617eba2aa..116eec8300 100644 --- a/fern/products/platform/pages/calling/voice/TTS/google.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/google.mdx @@ -41,10 +41,14 @@ the `polyglot-1` voice has variants for English (Australia), English (US), Frenc ## Voices + + Press play to audition any Google Cloud voice, then **copy config** to grab the value for SWML or your SDK. + + ## Billing Google Cloud TTS usage on SignalWire is billed according to the following SKU codes: diff --git a/fern/products/platform/pages/calling/voice/TTS/grok.mdx b/fern/products/platform/pages/calling/voice/TTS/grok.mdx index 0bae42c200..e6d680a166 100644 --- a/fern/products/platform/pages/calling/voice/TTS/grok.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/grok.mdx @@ -18,10 +18,14 @@ never append a `:model` suffix. ## Voices + + Press play to audition any Grok voice, then **copy config** to grab the value for SWML or your SDK. + + Grok provides five voices: `ara`, `eve`, `leo`, `rex`, and `sal`. `eve` is the default, and is also used as the fallback when an unrecognized voice is requested. diff --git a/fern/products/platform/pages/calling/voice/TTS/groq-tts.mdx b/fern/products/platform/pages/calling/voice/TTS/groq-tts.mdx index c3fc73db9c..6b34d6c583 100644 --- a/fern/products/platform/pages/calling/voice/TTS/groq-tts.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/groq-tts.mdx @@ -35,10 +35,14 @@ Requests fail until the terms are accepted. ## Voices + + Press play to audition any Groq voice, then **copy config** to grab the value for SWML or your SDK. + + Groq's Orpheus deployment provides the following voices: | Voice | Description | diff --git a/fern/products/platform/pages/calling/voice/TTS/index.mdx b/fern/products/platform/pages/calling/voice/TTS/index.mdx index 1f143c35ea..2d9c36d73b 100644 --- a/fern/products/platform/pages/calling/voice/TTS/index.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/index.mdx @@ -46,8 +46,12 @@ Only voices from SignalWire's catalog resolve on the platform — voice IDs from account will not work. See [Custom and cloned voices](#custom-and-cloned-voices) for supported options. + + + + ## Compare providers and models SignalWire's TTS providers offer a wide range of voice engines optimized for various applications. diff --git a/fern/products/platform/pages/calling/voice/TTS/inworld.mdx b/fern/products/platform/pages/calling/voice/TTS/inworld.mdx index 284d79379a..d9f4002db7 100644 --- a/fern/products/platform/pages/calling/voice/TTS/inworld.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/inworld.mdx @@ -28,10 +28,14 @@ defaults to `inworld-tts-1.5-max`. Set a model explicitly to override this. ## Voices + + Press play to audition any Inworld voice, then **copy config** to grab the value for SWML or your SDK. + + Inworld provides a large library of expressive voices across many languages. A voice's name is its voice ID — for example, `Lauren` becomes `inworld.Lauren` in the [voice string](#usage). diff --git a/fern/products/platform/pages/calling/voice/TTS/minimax.mdx b/fern/products/platform/pages/calling/voice/TTS/minimax.mdx index 651b3d60f8..d0ad5d44c0 100644 --- a/fern/products/platform/pages/calling/voice/TTS/minimax.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/minimax.mdx @@ -28,10 +28,14 @@ SignalWire supports the following MiniMax models. Pick a `turbo` model for speed ## Voices + + Press play to audition any MiniMax voice, then **copy config** to grab the value for SWML or your SDK. + + MiniMax provides a large library of system voices across many languages. A voice's **Voice ID** is what you put in the [voice string](#usage): for example, `English_CalmWoman` becomes `minimax.English_CalmWoman`. diff --git a/fern/products/platform/pages/calling/voice/TTS/mistral.mdx b/fern/products/platform/pages/calling/voice/TTS/mistral.mdx index aca565ab1d..f1bd7297ed 100644 --- a/fern/products/platform/pages/calling/voice/TTS/mistral.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/mistral.mdx @@ -25,10 +25,14 @@ for current models. ## Voices + + Press play to audition any Mistral voice, then **copy config** to grab the value for SWML or your SDK. + + Voice IDs are passed through to Mistral's hosted voice library — a voice named `myvoice` becomes `mistral.myvoice` in the [voice string](#usage). Find the available voices in diff --git a/fern/products/platform/pages/calling/voice/TTS/openai.mdx b/fern/products/platform/pages/calling/voice/TTS/openai.mdx index 5af166bb5d..63861adada 100644 --- a/fern/products/platform/pages/calling/voice/TTS/openai.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/openai.mdx @@ -27,10 +27,14 @@ OpenAI offers two TTS models with different quality and latency characteristics: ## Voices + + Press play to audition any OpenAI voice, then **copy config** to grab the value for SWML or your SDK. + + OpenAI provides 6 fully multilingual voices optimized for natural-sounding speech: | Voice | Description | diff --git a/fern/products/platform/pages/calling/voice/TTS/polly.mdx b/fern/products/platform/pages/calling/voice/TTS/polly.mdx index 5177312a80..8f0d2191ff 100644 --- a/fern/products/platform/pages/calling/voice/TTS/polly.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/polly.mdx @@ -38,10 +38,14 @@ SignalWire supports the following three Amazon models. ## Voices + + Press play to audition any Amazon Polly voice, then **copy config** to grab the value for SWML or your SDK. + + ## Languages Consult AWS documentation for a comprehensive and up-to-date list of supported voices, diff --git a/fern/products/platform/pages/calling/voice/TTS/rime.mdx b/fern/products/platform/pages/calling/voice/TTS/rime.mdx index 36c8cbdd64..6604f32796 100644 --- a/fern/products/platform/pages/calling/voice/TTS/rime.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/rime.mdx @@ -36,10 +36,14 @@ Rime offers uniquely realistic voices with a focus on natural expressiveness. ## Voices + + Press play to audition any Rime voice, then **copy config** to grab the value for SWML or your SDK. + + Mist v2 is the default Rime model on the SignalWire platform. To use this model, simply set the voice ID. diff --git a/fern/products/platform/pages/calling/voice/TTS/smallest.mdx b/fern/products/platform/pages/calling/voice/TTS/smallest.mdx index cb7cfce540..81dc6f7b08 100644 --- a/fern/products/platform/pages/calling/voice/TTS/smallest.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/smallest.mdx @@ -23,10 +23,14 @@ SignalWire supports the following Waves Lightning models. ## Voices + + Press play to audition any Smallest.ai voice, then **copy config** to grab the value for SWML or your SDK. + + Smallest.ai provides roughly 250 voices in the Waves catalog. A voice's name is its voice ID — for example, `sophia` (the default, an American English female voice) becomes `smallest.sophia` in the [voice string](#usage). diff --git a/fern/products/platform/pages/calling/voice/TTS/speechify.mdx b/fern/products/platform/pages/calling/voice/TTS/speechify.mdx index c38fd89575..5a2ce830d0 100644 --- a/fern/products/platform/pages/calling/voice/TTS/speechify.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/speechify.mdx @@ -30,10 +30,14 @@ pairing fails. Test your combination before deploying. ## Voices + + Press play to audition any Speechify voice, then **copy config** to grab the value for SWML or your SDK. + + Speechify voice IDs come from its voice list API (for example, `alicia` or `alton`) — use the voice's **ID**, not its display name. The default voice is `alicia`, an American English female voice. diff --git a/fern/products/platform/pages/platform/compliance/hipaa.mdx b/fern/products/platform/pages/platform/compliance/hipaa.mdx index f719f7288c..70f8ae3436 100644 --- a/fern/products/platform/pages/platform/compliance/hipaa.mdx +++ b/fern/products/platform/pages/platform/compliance/hipaa.mdx @@ -7,7 +7,7 @@ max-toc-depth: 3 The Health Insurance Portability and Accountability Act (HIPAA) establishes requirements for protecting Protected Health Information (PHI). As a telecommunications technology company, SignalWire is built to support HIPAA-compliant applications: SignalWire APIs and WebRTC communications services are all encrypted by default via HTTPS, TLS, and/or SRTP/DTLS. When building applications — especially voice AI agents defined with [SWML](/docs/swml) or the [Server SDK](/docs/server-sdks) — that handle healthcare data, you must implement appropriate safeguards to protect PHI throughout the call lifecycle. - + This guide provides technical guidance for implementing security controls relevant to HIPAA compliance. It is not legal advice. Healthcare organizations must consult with qualified healthcare compliance experts and legal counsel to ensure their specific implementation meets all applicable HIPAA requirements. Compliance is a shared responsibility between SignalWire, your organization, and your implementation choices. diff --git a/fern/products/platform/pages/platform/compliance/overview.mdx b/fern/products/platform/pages/platform/compliance/overview.mdx index 3747081856..efe9761491 100644 --- a/fern/products/platform/pages/platform/compliance/overview.mdx +++ b/fern/products/platform/pages/platform/compliance/overview.mdx @@ -9,7 +9,7 @@ position: 0 SignalWire is built to support compliant communications and voice AI applications. These guides cover the technical controls — encryption, consent, disclosure, access, and audit logging — for meeting specific regulatory obligations when your application handles calls, messages, and sensitive data. - + These guides provide technical guidance for implementing compliance controls. They are not legal advice. Requirements vary by jurisdiction, by use case, and by data type, and they change frequently. Always consult qualified counsel before operationalizing any program. Compliance is a shared responsibility between SignalWire, your organization, and your implementation choices. diff --git a/fern/products/platform/pages/platform/compliance/tcpa.mdx b/fern/products/platform/pages/platform/compliance/tcpa.mdx index 114f978a8d..07c0679e28 100644 --- a/fern/products/platform/pages/platform/compliance/tcpa.mdx +++ b/fern/products/platform/pages/platform/compliance/tcpa.mdx @@ -16,7 +16,7 @@ Each must be checked and recorded the same way on every call. A prompt can only *ask* the model to behave; a state machine *guarantees* the behavior and leaves a record. Treat the law's requirements as code your agent runs inside of, not as instructions you hope it follows. - + This guide provides technical guidance for implementing controls relevant to TCPA compliance. It is not legal advice. TCPA obligations vary by jurisdiction, by call type, and by the consent standard that applies to each number, and they change frequently. diff --git a/scripts/check-llm-exports.mjs b/scripts/check-llm-exports.mjs index 45d1a66068..a25c37099e 100644 --- a/scripts/check-llm-exports.mjs +++ b/scripts/check-llm-exports.mjs @@ -72,7 +72,11 @@ async function main() { } const baseUrl = normalizeDocsBase(rawBaseUrl); - const testCases = JSON.parse(await readFile(manifestPath, 'utf8')); + const manifest = JSON.parse(await readFile(manifestPath, 'utf8')); + const testCases = manifest.flatMap((testCase) => { + const paths = testCase.paths ?? [testCase.path]; + return paths.map((path) => ({ ...testCase, path, paths: undefined })); + }); const failures = []; await Promise.all(testCases.map(async (testCase) => { diff --git a/scripts/llm-export-cases.json b/scripts/llm-export-cases.json index 36feab3cd1..8252a93921 100644 --- a/scripts/llm-export-cases.json +++ b/scripts/llm-export-cases.json @@ -134,5 +134,47 @@ "notContains": [ " Date: Wed, 19 Aug 2026 14:09:16 -0400 Subject: [PATCH 2/4] fix: validate canonical TTS export routes --- .../platform/pages/calling/voice/TTS/index.mdx | 10 ++++++++-- scripts/llm-export-cases.json | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/fern/products/platform/pages/calling/voice/TTS/index.mdx b/fern/products/platform/pages/calling/voice/TTS/index.mdx index 2d9c36d73b..4863875852 100644 --- a/fern/products/platform/pages/calling/voice/TTS/index.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/index.mdx @@ -38,6 +38,8 @@ Refer to each provider's documentation for up-to-date model details and service ## Browse and audition voices + + Choose a provider to browse and audition its full voice catalog. Press play to audition a voice, and use **copy config** to grab the engine and voice values for your SWML or SDK code. Each provider's complete voice list lives on its reference page, linked in the table below. @@ -46,12 +48,16 @@ Only voices from SignalWire's catalog resolve on the platform — voice IDs from account will not work. See [Custom and cloned voices](#custom-and-cloned-voices) for supported options. - - + + +Browse each provider's complete voice list on its reference page, linked in the table below. + + + ## Compare providers and models SignalWire's TTS providers offer a wide range of voice engines optimized for various applications. diff --git a/scripts/llm-export-cases.json b/scripts/llm-export-cases.json index 8252a93921..ee1a9613ff 100644 --- a/scripts/llm-export-cases.json +++ b/scripts/llm-export-cases.json @@ -143,14 +143,14 @@ "/platform/voice/tts/deepgram.md", "/platform/voice/tts/elevenlabs.md", "/platform/voice/tts/fish.md", - "/platform/voice/tts/google.md", + "/platform/voice/tts/gcloud.md", "/platform/voice/tts/grok.md", "/platform/voice/tts/groq-tts.md", "/platform/voice/tts/inworld.md", "/platform/voice/tts/minimax.md", "/platform/voice/tts/mistral.md", "/platform/voice/tts/openai.md", - "/platform/voice/tts/polly.md", + "/platform/voice/tts/amazon-polly.md", "/platform/voice/tts/rime.md", "/platform/voice/tts/smallest.md", "/platform/voice/tts/speechify.md" From 77ffa923cca1cf20b5c013960d40e68c50102a20 Mon Sep 17 00:00:00 2001 From: Devon-White Date: Wed, 19 Aug 2026 14:22:23 -0400 Subject: [PATCH 3/4] docs: define high-stakes warning title rule --- .claude/rules/mdx-components.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.claude/rules/mdx-components.md b/.claude/rules/mdx-components.md index 2d5c90de24..9b17e3c8e2 100644 --- a/.claude/rules/mdx-components.md +++ b/.claude/rules/mdx-components.md @@ -44,3 +44,5 @@ Custom components (registered in `docs.yml` → `fern/components/`): - `VoiceWidget` — interactive click-to-call demo. Human-only: wrap usages in ``. - `Skeleton` / `SkeletonText` — loading placeholders; registered, no MDX uses yet. + +Fern's Markdown export flattens an untitled callout into ordinary prose. Give a `Warning` a concise title when losing the warning context could change a reader's safe interpretation—for example, legal or compliance disclaimers, credential handling, network restrictions, or service availability. Do not add titles mechanically to every callout; the title must identify the specific hazard or constraint. From 9a39ca86208cff7e51c4579413f1f7bf7e772398 Mon Sep 17 00:00:00 2001 From: August L-R Date: Thu, 20 Aug 2026 19:07:56 +0000 Subject: [PATCH 4/4] docs: fill empty Voices heading in google/polly .md exports --- fern/products/platform/pages/calling/voice/TTS/google.mdx | 6 ++++++ fern/products/platform/pages/calling/voice/TTS/polly.mdx | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/fern/products/platform/pages/calling/voice/TTS/google.mdx b/fern/products/platform/pages/calling/voice/TTS/google.mdx index 116eec8300..ef64a5c822 100644 --- a/fern/products/platform/pages/calling/voice/TTS/google.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/google.mdx @@ -49,6 +49,12 @@ Press play to audition any Google Cloud voice, then **copy config** to grab the + + +Browse Google's table of [supported voices](https://cloud.google.com/text-to-speech/docs/voices) and copy the **Voice name** value to use as the voice ID. + + + ## Billing Google Cloud TTS usage on SignalWire is billed according to the following SKU codes: diff --git a/fern/products/platform/pages/calling/voice/TTS/polly.mdx b/fern/products/platform/pages/calling/voice/TTS/polly.mdx index 8f0d2191ff..823c567131 100644 --- a/fern/products/platform/pages/calling/voice/TTS/polly.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/polly.mdx @@ -46,6 +46,12 @@ Press play to audition any Amazon Polly voice, then **copy config** to grab the + + +Browse Amazon's list of [available voices](https://docs.aws.amazon.com/polly/latest/dg/available-voices.html) and build the voice ID string as shown in the model cards above. + + + ## Languages Consult AWS documentation for a comprehensive and up-to-date list of supported voices,