diff --git a/CLAUDE.md b/CLAUDE.md index e5a8d5376e..5ea16cc492 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,6 +12,39 @@ Fern-powered documentation site. Two sources of truth: MDX pages under `fern/pro A SWML-only `.tsp` edit still moves `fern/apis/signalwire-rest/openapi.yaml`, because the REST tree imports the SWML models. Run `yarn build:specs` before committing even a SWML-only change, and expect a large REST diff in a SWML PR. +## Changelog + +`fern/products/platform/changelog/` is a **product** changelog for customers, authored by +Product, Marketing, and PMs as well as docs. One file per date, `YYYY-MM-DD.mdx`, dated when +the change reached customers — not when it was written. Several changes on one date share a +file, one `##` heading each, most important first. `overview.mdx` is the index page. + +- **Documentation work gets no entry.** A new guide, a new reference page, or writing up + something that already shipped is not a change, however important the feature. The only + exception is a capability customers had no way to discover, where publishing it is + effectively the release. When in doubt, leave it out. +- **Titles say what was added, changed, removed, or deprecated** — in words, since no tag + carries the kind. Sentence case, no end punctuation. A reader skimming the index shouldn't + have to open the entry: "Default TTS engine changed from Google to ElevenLabs", not "TTS + update"; "E911 self-service added to the REST API", not "E911". Not "One AI agent, many + languages" (marketing), not "Webhook payloads documented" (documentation is not a change). +- **Lead with the capability in the first clause** — that line is the whole entry for anyone + skimming. An imperative usually beats a formula ("Pick Groq or Mistral as your TTS + engine"); "You can now …" is one option, not a house opening. One to three sentences, + second person, present tense. No marketing adjectives, no emoji, no exclamation marks. +- **Tag product areas only, alphabetical** — `voice`, `messaging`, `ai`, `video`, `fabric`, + `sdks`, `swml`, `apis`, `tts`, `e911`, `compliance`, `security`. Chips render on the index + and feed the tag filter, so keep the list short; a tag matching one entry filters nothing. + The kind of change goes in the title, never in a tag. +- **Open every `##` section with a text paragraph**, never a component — Fern previews an + entry by its opening content and a callout there renders badly. A breaking change says so + in the title and puts a titled `` after that paragraph; an untitled callout + flattens to plain prose in the Markdown export. +- **Links inline in prose, never a trailing "Updated pages:" list.** Copy every URL from the + target page's own `slug:` frontmatter, prefixed `/docs//`. Never guess one. + +Entries are customer-facing, so everything under "Everything here is customer-facing" applies. + ## Everything here is customer-facing Assume no prior knowledge, and never expose internal implementation detail — backend endpoints, transports, engine-side params. Every fact traces to source, a spec, the dashboard, or a ticket; if you can't verify one, write `[NEEDS SOURCE: what's missing]` instead of guessing. diff --git a/fern/docs.yml b/fern/docs.yml index ab948cf68b..48c3fd1571 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -135,6 +135,9 @@ navbar-links: - type: minimal text: llms.txt href: https://signalwire.com/docs/llms.txt + - type: minimal + text: Changelog + href: /docs/platform/changelog - type: minimal text: Log in href: https://signalwire.com/signin diff --git a/fern/products/platform/changelog/2026-08-05.mdx b/fern/products/platform/changelog/2026-08-05.mdx new file mode 100644 index 0000000000..053d4f4259 --- /dev/null +++ b/fern/products/platform/changelog/2026-08-05.mdx @@ -0,0 +1,31 @@ +--- +tags: ["tts", "voice"] +--- + +## Six new text-to-speech engines + +You can now use the [Groq](/docs/platform/voice/tts/groq-tts), +[Mistral](/docs/platform/voice/tts/mistral), +[Grok](/docs/platform/voice/tts/grok), +[Smallest.ai](/docs/platform/voice/tts/smallest), +[Fish Audio](/docs/platform/voice/tts/fish), and +[Speechify](/docs/platform/voice/tts/speechify) +TTS engines on the SignalWire platform. + +## `playai-turbo` is now `groq-tts` + +Groq retired PlayAI in December 2025. +The engine is renamed `groq-tts` and repointed at Canopy Labs' Orpheus, defaulting to `canopylabs/orpheus-v1-english`. + +Arabic voices are available by selecting the `canopylabs/orpheus-arabic-saudi` model, or its shorthand `arabic`. +See [Groq](/docs/platform/voice/tts/groq-tts) for the voice list. + +## Rime's `arcana` model is deprecated, falls back to `coda` + +Rime retired its `arcana` model. +Applications that invoke it will fall back to `coda`, which shares voice names. + +Additionally, the `coda` model now uses the same sampling parameters as other Rime models: +`repetition_penalty`, `temperature`, `top_p`, and `max_tokens`. + +See [Rime](/docs/platform/voice/tts/rime). diff --git a/fern/products/platform/changelog/2026-08-06.mdx b/fern/products/platform/changelog/2026-08-06.mdx new file mode 100644 index 0000000000..088d944aff --- /dev/null +++ b/fern/products/platform/changelog/2026-08-06.mdx @@ -0,0 +1,13 @@ +--- +tags: ["e911", "voice"] +--- + +## E911 self-service added to the REST API + +Registering an emergency address and enabling E911 on a US phone number is now self-service, +and no longer requires a support ticket. + +Create a carrier-validated address, assign it to the number, then poll until `e911_status` reads `active`. + +To get started, read the [E911 guide](/docs/platform/e911) +and review the [API reference](/docs/apis/rest/e-911-addresses/assign-e-911-address). \ No newline at end of file diff --git a/fern/products/platform/changelog/2026-08-13.mdx b/fern/products/platform/changelog/2026-08-13.mdx new file mode 100644 index 0000000000..3e2b975d18 --- /dev/null +++ b/fern/products/platform/changelog/2026-08-13.mdx @@ -0,0 +1,12 @@ +--- +tags: ["ai", "tts", "voice"] +--- + +## Default TTS engine changed from Google to ElevenLabs + +[Voice id strings](/docs/platform/voice/tts#use-voice-identifier-strings) +that don't specify an engine now resolves against `elevenlabs` instead of `gcloud`. + + +Default engines can change. Ensure your agent continues using its configured voice by always declaring the engine explicitly. + diff --git a/fern/products/platform/changelog/2026-08-17.mdx b/fern/products/platform/changelog/2026-08-17.mdx new file mode 100644 index 0000000000..2234a8ceb5 --- /dev/null +++ b/fern/products/platform/changelog/2026-08-17.mdx @@ -0,0 +1,13 @@ +--- +tags: ["ai", "apis"] +--- + +## AI agent text chat added + +You can now chat by text with AI agents that were previously reachable only by voice. +In the REST API, AI Chat is a single, unified JSON-RPC-style +[Send AI chat methods](/docs/apis/rest/ai-chat/chat-methods) endpoint with six methods. + +The Python Server SDK wraps the endpoint in [`AIChatClient`](/docs/server-sdks/reference/python/agents/ai-chat-client) +and [`ChatGateway`](/docs/server-sdks/reference/python/agents/chat-gateway). +JSON-RPC errors are listed with the rest of the [error codes](/docs/apis/error-codes). diff --git a/fern/products/platform/changelog/2026-08-19.mdx b/fern/products/platform/changelog/2026-08-19.mdx new file mode 100644 index 0000000000..8674e4e464 --- /dev/null +++ b/fern/products/platform/changelog/2026-08-19.mdx @@ -0,0 +1,13 @@ +--- +tags: ["ai", "swml"] +--- + +## Multilingual agents that switch languages and voices in real time + +The new `multilingual` AI parameter accepts an array of language-voice pairs. +The AI agent continuously detects the other party's language, +and switches to the configured TTS voice (and language) whenever it changes. + +The `multilingual` and `languages` objects within the AI method are mutually exclusive. + +See [`ai.multilingual`](/docs/swml/reference/calling/ai/multilingual). diff --git a/fern/products/platform/changelog/overview.mdx b/fern/products/platform/changelog/overview.mdx new file mode 100644 index 0000000000..c58e374fa5 --- /dev/null +++ b/fern/products/platform/changelog/overview.mdx @@ -0,0 +1,9 @@ +--- +title: "Changelog" +description: New capabilities, changed defaults, and deprecations across the SignalWire platform, newest first. +max-toc-depth: 3 +--- + +What's new and what changed across the SignalWire platform. + +To follow along in a feed reader, append `.rss` to this page's URL. 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 c72eb77861..062d78a7d9 100644 --- a/fern/products/platform/pages/calling/voice/TTS/groq-tts.mdx +++ b/fern/products/platform/pages/calling/voice/TTS/groq-tts.mdx @@ -27,12 +27,6 @@ See [Groq's text-to-speech documentation](https://console.groq.com/docs/text-to- | `canopylabs/orpheus-v1-english` | **Default.** English voices | | `canopylabs/orpheus-arabic-saudi` | Arabic (Saudi dialect) voices. The shorthand `arabic` also selects this model | - -The Arabic model requires accepting Canopy Labs' model terms in the -[Groq console](https://console.groq.com/) for the account making the requests. -Requests fail until the terms are accepted. - - ## Voices diff --git a/fern/products/platform/platform.yml b/fern/products/platform/platform.yml index 195e7ecf9e..d898ca9879 100644 --- a/fern/products/platform/platform.yml +++ b/fern/products/platform/platform.yml @@ -1,6 +1,11 @@ tabs: platform: display-name: Platform + # The changelog's URL segment comes from this nav entry, not page frontmatter, + # and a nav-entry `slug` replaces only its own segment — so without this the + # changelog lands at /platform/platform/changelog. Every other page under this + # tab sets its own frontmatter slug, which already bypasses the tab segment. + skip-slug: true icon: fa-regular fa-planet-ringed calling: display-name: Calling @@ -21,6 +26,9 @@ navigation: - page: Get started path: ./pages/getting-started.mdx icon: fa-regular fa-home + - changelog: ./changelog + title: Changelog + icon: fa-regular fa-clock - folder: ./pages/platform/setup title: Setup title-source: frontmatter