Generate spoken briefing
well_generate_spoken_briefingRead a written answer aloud and return it as one playable audio file, kept as a media row of the workspace. Use it only when the person asks to hear an answer, not after every answer. On WhatsApp the audio goes out as a voice message: title, when you pass it, goes out as one line right before the voice message, and your own text follows it.
Pass the written answer exactly as it already stands in text — this tool reads it aloud, it does not write new wording. Speech costs money by the character and shares one daily budget across every workspace, so a spent or unreadable budget, or any other reason the voice could not run, still returns success: true with audio_url: null and a reason: tell the person the text answer stands and the voice was not available.
audio_url plays with a plain HTTP GET and no auth header, and stops working at expires_at, 24 hours after the call: never promise the person a lasting link. transcript is the spoken script, for a reader who cannot listen — it is never longer than text and never speaks a figure text does not carry.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The written answer to read aloud, exactly as it already stands. | |
| title | No | The card's title. Defaults to a generic 'Spoken briefing'. | |
| language | No | The language to read it in. Defaults to English. | |
| workspace_id | No | Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which. | |
| conversation_id | No | The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation. | |
| idempotency_key | No | Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation. | |
| workspace_scope | No | Restrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The written answer this call read, unchanged. | |
| title | Yes | ||
| reason | Yes | ||
| success | Yes | ||
| media_id | Yes | ||
| audio_url | Yes | A signed link to the stored audio (MP3 on the web, Ogg Opus on WhatsApp), or null when the call carries no audio. | |
| expires_at | Yes | When `audio_url` stops working, as an ISO 8601 time, or null when the call carries no link. | |
| transcript | Yes | ||
| conversation_id | No | The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation. | |
| newly_connected | No | Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later. | |
| conversation_id_note | No | Present only when the server opened a fresh lane, stating that no choice recorded earlier was read. | |
| conversation_id_source | No | Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened. |