Conversations
/conversations is the primary tool for debugging and analysing calls processed by Delphi. It surfaces a chronological log of everything that happened during a call: dialogue turns, AI-model invocations with cost tracking, telephony events, errors, and performance metrics.
Conversation data is generated automatically; available recording controls provide playback and deletion. Data is generated by TelPhi and the voice pipeline during live calls and persisted to Postgres. For operator-side debugging (SIP ladder, trace IDs), pair this page with Monitoring in SigNoz.
Page layout
| Panel | Width | Content |
|---|---|---|
| Left | ~33% | App selector + conversations list. |
| Right | ~67% | Detailed log table for the selected conversation. |
Left panel
- App selector — filter conversations by app. Supports deep linking via
?appId={appId}. - Conversations list — sorted by start time (newest first).
| Column | Description |
|---|---|
| ID | Conversation identifier. |
| Start Time | yyyy-MM-dd HH:mm:ss. |
| Recording Status | Recording indicator (see below). |
Click a row to load its logs.
Right panel
The log detail table. Default sort is timestamp ascending (chronological order).
Recording and transcript retention
The app's Recording artefacts selection controls which audio and transcript outputs are stored in S3. Select Full call transcript without audio options for transcript-only storage; clear the selection to stop new S3 recording capture. Conversation records and diagnostic logs can still exist, with text governed by the platform PII logging policy.
Members and Team Admins can select recording artefacts. See Recording and transcript storage for the controls, setup steps, and retention behavior. Platform PII redaction does not disable selected S3 transcript capture. Keypad events are reconstructed into the selected full-call transcript and MP3s, while STT/TTS turn artefacts contain speech only.
For the exact file layout and JSON fields, see the operator reference for S3 recording storage.
When recording is enabled, a conversation can show these statuses:
| Status | Meaning |
|---|---|
| AVAILABLE | Selected artefacts are ready; playback requires full-call audio. |
| PROCESSING | Recording upload or audio processing is pending. |
| FAILED | Recording processing failed; ask the platform operator to investigate. |
Full-call audio playback is available from the call detail view and the app's Latest calls. Transcript-only calls do not show an audio player. S3 expiry is governed by the actual bucket lifecycle described in the recording guide.
Call transfers
When an AI agent initiates a transfer (via the transfer() tool), the event is logged in the conversation timeline:
- Transfer target — destination number / endpoint.
- Transfer status — success / failure.
- Transfer metadata — additional context from the transfer.
Transfer events appear inline with other log types.
Token usage
Model Usage entries include detailed token consumption:
| Field | Description |
|---|---|
| Input Tokens | Tokens sent to the model. |
| Output Tokens | Tokens received from the model. |
| Model Name | Specific model used. |
Token counts appear in the summary (Input: 150 → Output: 80) and in the detail dialog. They aggregate into the Dashboard token widgets.
Log types
Every log row has a type that determines its icon, colour, and the data it carries.
| Type | Icon | Captures | Key fields |
|---|---|---|---|
| Conversation | Chat bubble | Individual dialogue turns. | Actor (User / AI), Event Type, Duration, Interrupted, Interruption Reason, Text. |
| Model Usage | Robot | Each AI-model API call with cost. | Provider, Model, Service Type (STT / LLM / TTS / Realtime), Estimated Cost, Tokens, Latency, Duration, Audio Size, Characters, Region, Quality Tier. |
| System | Gear | Internal platform events. | Component, Action, Status. |
| Performance | Lightning | Timing for internal operations. | Component, Operation, Duration (ms). |
| Audio | Music note | Audio processing events. | Direction, Format, Operation, Duration. |
| Error | Error symbol | Errors during the conversation. | Component, Error Message. |
| Telephony | Phone | SIP / call-level events. | Event Type (INVITE, BYE, …), Channel Type, Channel ID, Caller, Called. |
| Sandbox | Island | Sandbox execution events. | — |
| VM | Wrench | JavaScript VM (tool) execution. | Operation, Function Name, Function Count, Execution Time. |
Log detail dialog
Clicking the info icon opens a structured view of all data for that log:
- Model Usage — estimated cost, token counts, latency, provider, model.
- Conversation — actor, transcript, duration, interruption details.
- Telephony — caller / called numbers, event type, channel info.
- All types — raw JSON section at the bottom.
Cost calculation
The platform automatically estimates costs for Model Usage logs based on provider and model:
| Pricing method | Used for | How it works |
|---|---|---|
| Token-based | LLM calls | Cost per input token + cost per output token. |
| Time-based | Realtime, STT | Cost per second of audio. |
| Character-based | TTS | Cost per character converted to speech. |
OpenAI and Azure pricing are supported. Costs are estimates based on standard pricing.
Log summary format
| Log type | Summary |
|---|---|
| Model Usage | Provider/Model — tokens — latency |
| Conversation | Actor: EventType (duration) [INTERRUPTED] |
| System | Component.Action: Status |
| Performance | Component.Operation: duration ms |
| Audio | Direction Format Operation duration |
| Error | Component: Message |
| Telephony | Event: ChannelType ChannelId (caller -> called) |
| VM | Operation FunctionName (functionCount) executionTime |
Filtering and navigation
- App filter — selecting an app resets the conversation selection.
- Deep linking —
?appId={appId}pre-selects an app via URL. - Search — built-in search in the log detail table.
- Server-side filtering — supported via the filter model.
- Server-side sorting — default timestamp ascending; configurable.
- Infinite scroll — logs load in pages of 50.
- Pagination — the conversations list supports 10 / 25 / 50 rows per page.
Workflows
Investigate a call
- Go to
/conversations. - Select the app.
- Pick the conversation by start time.
- Review logs chronologically in the right panel.
- Click the info icon on any log for details.
Check AI costs
- Select a conversation.
- Look at the Cost column on Model Usage entries.
- Click the info icon for token counts, latency, and provider details.
Debug an error
- Select a conversation.
- Filter / scroll to the Error entries (red chip).
- Click the info icon for component + full error message.
- Cross-reference with Telephony and System logs at the same timestamp.
| Tab | Shows |
|---|---|
| Debug | Logs, span tree, SIP ladder, DTMF evidence, and SIP ladder text export for the call's trace, sourced from SigNoz. |
| Timeline | Channel events ordered by ChannelMessage.timestamp. |
| Flow run | Per-node execution of the Flow Builder graph with inputs / outputs. |
| QA | QA scoring results (gated by qaScoring; enqueued on flow finalisation / hangup). |
| Token | Token usage by provider. |
| Action | Browser action invocations and results. |
The Debug tab is the bridge between this page and the operator-side Monitoring in SigNoz workflow. It separates Logs, Spans, and SIP Ladder panes; use the SIP ladder export when support needs a plain-text bundle of the call signaling. For SIP calls, v0.9.13+ can show DTMF evidence from SIP INFO, RFC4733 negotiation/media, ARI, and in-band detection when those signals are present in telemetry.
When platform operators keep ENABLE_PII_LOGGING=false (the default), Timeline transcript text and caller numbers in the Postgres conversation record are redacted. SigNoz logs and traces are scrubbed too, except raw SIP ladder messages. That redaction is separate from retention: if the app selects a transcript artefact, transcript text can still be written to S3 with the recording artefact. See Recording and transcript retention and PII redaction.
See also
- Dashboard — aggregated metrics behind the conversation totals.
- Monitoring in SigNoz — operator-side debugging.
- Endpoints — what determines which conversations land where.
Realtime transcript timing
For new OpenAI and Azure realtime calls, transcript turns use the matching speech-start event timestamp when available, even if transcription arrives after a reply or node transition. Missing or invalid timing falls back to receipt time. This improves timeline ordering; it is not sample-accurate recording alignment and does not rewrite historical call rows.