Signals
What is a Signal?
A Signal turns recorded conversations into a table. You describe who takes part, what kinds of conversation to expect and what you want to know; Tavnit transcribes the audio, works out who said what, splits the recording into separate conversations and fills your columns turn by turn.
The Signal is the configuration. Each audio file you run through it produces a Wave: one execution with its own transcript, player and output table. A shop-floor recording of a whole shift can hold dozens of sales conversations; a Wave finds each one and structures it separately.
Signals are in beta and are enabled per organisation. If you don't see “Signals” in the sidebar, contact the Tavnit team to turn them on.
When to use a Signal
- Checking whether salespeople mention a promotion, and which products customers ask about
- Scoring support or intake calls against a checklist of things that should happen
- Turning interviews into rows you can filter, chart and store in a Bucket
What you configure
Only a name and at least one member type are required. Everything else is optional and adds columns or filters to the output.
| Setting | What it does |
|---|---|
| Member Types | The participants you expect (for example Salesperson and Customer), each with an optional description of how to recognise them. Unexpected speakers are labelled “Other”. |
| Interaction Types | The kinds of conversation to capture (Sale, Support, Return…). Each detected conversation is classified as one of them, or “Other”. Leave empty to capture every conversation, untyped. |
| Rules | Yes/no checks evaluated on every turn, such as “Was the keyboards promotion mentioned?”. Each occurrence becomes a row. A rule can apply to all interaction types or only some (“Applies to”). |
| Extraction Fields | Data pulled from every turn, such as “Products mentioned”. Each field becomes a column. |
| Content Categories | Each turn is labelled with the best-fitting category, such as “objection”. |
| Conversation Rules | Yes/no checks judged once over the whole conversation, such as “Was the sale resolved?”. Each becomes a true/false column. |
| Conversation Categories | Classification groups with options (for example Outcome: Won / Lost). One option is picked per group for the whole conversation. |
| Exclude other interactions | Leaves conversations that match none of your interaction types out of the output. |
| Include Wave ID column | Adds a leading Wave ID column so rows from several Waves can be joined, in CSV, webhook and Bucket exports. |
Descriptions matter: the AI reads them to decide who is who and when a rule or category applies. Names must be unique within each list and can't reuse a built-in column name.
Creating a Signal
- 1Open “Signals” in the sidebar and click “Create Signal”.
- 2Choose how to start: “Conversation preset” (a sales, support or interview setup), “From an existing signal” (duplicates its full configuration) or “Start from scratch”.
- 3Enter a Signal Name (at least 3 characters) and define at least one member type.
- 4Optionally add interaction types, per-turn rules, extraction fields and content categories, then conversation-level rules and category groups.
- 5Under Options, decide whether to exclude unmatched interactions, add a Wave ID column or send results to a webhook.
- 6Click “Create Signal”. Recorders, Bucket export and the Signal ID for the API are set up on the Signal's page once it exists.
To change the configuration later, open the Signal and click “Edit” on any configuration section, then “Save”. Changes apply to new Waves; each Wave keeps a copy of the configuration it ran with.
Running a Wave
- 1Click “Run Wave” on the Signal's page (or on the Signals list, then select the Signal).
- 2Under “Upload Audio”, choose the recording.
- 3The Wave is queued and processed in the background. Its page updates automatically.
| Limit | Value |
|---|---|
| Formats | mp3, mp4, mpeg, mpga, m4a, wav, webm |
| File size | Up to 150 MB |
| Recording length | Up to 8 hours of audio, with at most 2 hours of detected speech |
Long silences are cut before any processing, so a full-shift recording with long quiet stretches is fine. The spoken language is detected automatically. A Signal that has been deactivated can't run Waves until you activate it again.
A Wave moves from Queued to Running (“Structuring audio…”) and ends as Completed or Failed. Every Wave of a Signal is listed in its “Waves” section, with a status filter.
Reading a Wave
A completed Wave shows the duration (and how much of it was speech), the number of interactions (and how many were excluded) and turns.
- Audio: a player for the recording, with “Download original”.
- Conversation: the transcript by speaker and member type. Search it, show “Only extractions”, use “Play from here” on any turn, and “Export transcript”.
- Interactions: a profile of each detected conversation: duration, turns, the longest turn, each speaker's share of the talk and categories, every extracted value (click one to jump to that turn) and the conversation-level verdicts. Excluded interactions are marked.
- Results: the output table, filterable by interaction, with “Export CSV”, “Export JSON” and “Export to bucket”.
The output table always starts with these columns, followed by your extraction fields and conversation-level columns:
| Column | Contents |
|---|---|
| Interaction | Which conversation in the recording the row belongs to. |
| Interaction Type | One of your interaction types, or Other. |
| Turn / Timedate | The turn number and when it was spoken. |
| Member / Member Type | The speaker and the member type they were mapped to. |
| Content / Content Category | What was said and its category. |
| Rule / Rule Check | The rule the row is about. Rule Check is true on the rule’s first occurrence in an interaction; a rule that never occurred still gets one row per interaction, with Rule Check false. |
Recorders
Recorders are organisation members who capture sessions with the Tavnit Recorder Android app and send them to a Signal, where each one becomes a Wave automatically.
- 1Open the Signal and go to “Recorders”.
- 2Click “Add recorder” and pick the member.
- 3Enter a Referring ID (a free-form identifier such as an employee number, stamped on every Wave that recorder uploads) and choose the member type they record as.
A recorder can be set to Active or Disabled, edited or removed. Removing one keeps the Waves it already uploaded. Waves from the app show when they were recorded, the Referring ID and the member type.
Where the data goes
| Output | How it works |
|---|---|
| Webhook | Sends the output table to an https:// URL when a Wave completes. See Webhooks. |
| Bucket Export | Writes every completed Wave's rows into a Bucket. Map each Wave column to a Bucket column and optionally add a Wave ID column. |
| Manual export | From a Wave: Export CSV, Export JSON or Export to bucket. |
API
Copy the ID from “Signal ID” on the Signal's page and post the audio as multipart file (or as JSON with file_base64 and filename):
curl -X POST https://run.tavnit.io/api/signals/SIGNAL_ID/run \
-H "X-API-Key: $TAVNIT_API_KEY" \
-F "file=@call.mp3"{
"success": true,
"wave_id": "…",
"signal_id": "…",
"status": "queued",
"audio_seconds": 754,
"message": "Wave queued for processing."
}Errors: 400 for a missing, empty, unsupported or too-long file, 402 when your organization can't start new work right now (contact the Tavnit team), 403/404 when the Signal isn't in your organisation. Follow the Wave in the app. See the REST API page for authentication.
Who can do what
| Action | Roles |
|---|---|
| Create, edit and delete Signals | Owner, Admin |
| Manage recorders | Owner, Admin |
| Run Waves | Owner, Admin, Member |
See User roles.
Troubleshooting
| Symptom | What to check |
|---|---|
| The upload is rejected | Check the format (mp3, mp4, mpeg, mpga, m4a, wav, webm), the 150 MB size limit and the 8-hour length limit. |
| “Run Wave” is disabled | The Signal is inactive. Activate it first. |
| Speakers are assigned to the wrong member type | Add descriptions to your member types saying how to tell them apart (role, what they typically say). |
| Conversations land in Other | Describe each interaction type more concretely, or leave interaction types empty to capture everything. |
| The Wave failed after queuing | Check that the recording has at most 2 hours of speech. |
