search_transcripts
Search conversation transcripts by meaning, not date, to find where a topic was discussed when date or conversation is unknown. Returns matched messages with the matching transcript excerpt.
Instructions
Find messages by meaning (semantic search over transcripts), with the part that matched.
USE WHEN: "Where did we discuss X?" without knowing the date or conversation. Omitting workspace_id searches every workspace, one request each out of 20/min: send it when known. Someone's own words ("what did Ana say"): their search_user id in creator_ids, not the name in query.
USE INSTEAD: search_message_ids for notified, mentions/tags, labels; list_messages for plain history; search_messages_by_heard_status for unread. Exact names, URLs, ticket numbers may be missed.
FIRST: workspace_id comes from get_workspaces_basic_info (field id) when searching one workspace — call it first if you don't have one.
EXAMPLE: {"query":"launch date decision","workspace_id":"ws-abc"}
RETURNS: With workspace_id: {results: [{message_id, conversation_id, conversation_name, score, matched_chunk, ...}], scope_capped}. Without: {needs_workspace_choice, workspaces: [{workspace_id, workspace_name, result_count, best_score, scope_capped, results}], empty_workspaces, skipped_workspaces: [{workspace_id, workspace_name, reason}]}. needs_workspace_choice true: ask the user which workspace (name, count, best matched_chunk), then call again with its id. skipped_workspaces were NOT searched: tell the user; retry RATE_LIMITED ones later by id. Next page: seen ids in exclude_message_ids. scope_capped true: narrow by conversation_ids or dates. Window [start_date, end_date), both with an offset. conversation_id: null = your voice memo. matched_chunk is usually the whole transcript; for more, get_messages with the message_ids.
ERROR BAD_REQUEST: A bad argument — fix the one the message names.
ERROR FORBIDDEN: Not a member of workspace_id — pick one from get_workspaces_basic_info.
ERROR RATE_LIMITED: 20 searches/min used — wait a minute, or retry with one workspace_id.
ERROR SERVER_ERROR: Search is down — retry later and tell the user.
ERROR NOT_FOUND: Search not deployed — tell the user; do not retry.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per workspace, 1-50. Default 30, or 10 per workspace when `workspace_id` is omitted (then at most 100 in total, or 1 each past 100 workspaces: lowest scores cut first, each workspace keeps its best). | |
| query | Yes | What to look for, in natural language (max 500 chars). | |
| end_date | No | EXCLUSIVE upper bound, ISO 8601 with Z or ±HH:MM. | |
| start_date | No | Inclusive lower bound, ISO 8601 with Z or ±HH:MM. | |
| creator_ids | No | Only messages by these users. Max 50. | |
| workspace_id | No | Workspace to search. Omit to search all of yours. | |
| response_fields | No | Dot-path allowlist to shrink the response, e.g. ["results.id","total"]. Omit for the full payload. | |
| conversation_ids | No | Only these conversations; skips voice memos. Send their workspace_id too. Max 50. | |
| exclude_message_ids | No | Message ids to leave out. Max 500. |