Comms GTM AI

Dashboard

Monitor your AI voice agent

L24h Calls
L24h Avg Length
L24h Scheduled

Calls & Scheduled (7 days)

No data
Calls Scheduled

A/B Test Performance (L7 days)

No A/B tests with sessions in last 7 days

Configurations

Sorted by sessions in last 7 days

Name Description Sessions (7d) Actions
No configurations yet

System Health

Monitor agent status and performance

Agent
Uptime (L24h)
Avg Response
Error Rate

Service Status

LiveKit Agent
OpenAI API
LiveKit Cloud

Configuration Status

OpenAI API Key
LiveKit URL
LiveKit API Key
LiveKit API Secret
HubSpot Meeting Slug
BigQuery Project ID
BigQuery Credentials

Users

Manage admin panel access

UserEmailRoleLast LoginActions
No users yet

Access Control

Admin: Full access - manage users, configs, everything

Editor: Create and edit configurations

Viewer: View-only access

Invite User

User will sign in with Google using this email.

A/B Testing

Sorted by sessions in last 7 days

Name Variations (%) Sessions (7d) Actions
No A/B tests yet

Sessions

Session Started Duration Config A/B Test Source Scheduled Status
No sessions found
Loading...
Showing of sessions
Page

Session Details

No transcript available
No tool calls

                            
No config data
No events logged
Loading...

SDK

Integrate voice AI into your product

1

Whitelist Domain

Add your domain in Settings → SDK Domain Whitelist

example.com, app.example.com
2

Add Script

<script src="/sdk.js"></script>
3

Use

// Start conversation with context
gtmvoiceai.create("Dr James, Pediatrician");

// Add more context during conversation
gtmvoiceai.inject("Tyson Clinic, 5 providers");

// Close conversation
gtmvoiceai.close();

// Set up callbacks
gtmvoiceai.hooks({
  onConnecting: () => console.log('Connecting...'),
  onReady: () => console.log('Ready'),
  onConnected: () => console.log('Connected'),
  onError: () => console.log('Error'),
  onClosed: () => console.log('Closed')
});

API Reference

create(context, options?)

Start a new conversation session

ParamTypeDescription
contextstring | objectCaller context
options.configNamestring?Config name (default: A/B test)
options.configobject?Partial config overrides
options.debugboolean?Enable console logging
Returns: Promise<{session_id, config_name, ab_variant, config_used}>
inject(context)

Add more context to current session

ParamTypeDescription
contextstring | objectAdditional context to append
Returns: Promise<{status}>
close()

End the current session

Returns: Promise<{session_id, final_state}>
hooks(callbacks)

Register lifecycle callbacks

CallbackDescription
onStateChange(state, prevState) → any state change
onConnecting() → connecting to server
onReady() → session ready
onConnected() → voice connected
onError() → error occurred
onClosed() → session closed
onMicError() → microphone issue
Other Methods
getSession() → Promise<SessionInfo>
getTranscript() → Promise<Message[]>
getState() → 'idle'|'connecting'|'ready'|'connected'|'error'|'closed'
getSessionId() → string | null
setDebug(enabled) → SDK
configure({baseUrl, debug}) → SDK

States

idle
connecting
ready
connected
error
closed

Widgets

Create embeddable call widgets for your website

Don't forget to whitelist your domain!

Go to Settings → SDK Domain Whitelist to add domains where your widget will be used.

No widgets yet

Settings

System-level API keys and credentials

Environment (.env) Read-only

These settings are configured in the server's .env file and cannot be changed from the UI.

OpenAI

✓ Valid ✗ Invalid

Required for GPT-4o Realtime voice conversations

LiveKit

HubSpot

✓ Valid ✗ Invalid

HubSpot Private App Token for API access

Anthropic (Guardrails)

✓ Valid ✗ Invalid

Required for guardrails. Get key from console.anthropic.com

Google (Gemini)

✓ Valid ✗ Invalid

Google AI API key for Gemini models. Get key from aistudio.google.com

SDK Domain Whitelist

Comma-separated list of domains allowed to use the SDK. Leave empty to allow all domains.

BigQuery (Analytics)

Paste your GCP service account credentials JSON. Required for session and health metrics storage.

New A/B Test

Weight determines traffic share: weight / total = %

Label

Click to cycle states (preview only)

<div data-gtm-widget=""></div>
<script src="/widget.js"></script>

Force a language to prevent misdetection

🔤 Spelling Verification

🧠 Model

0.7–1.3

🎙️ Audio Input

Auto: phone→far_field, widget→near_field

Used for real-time transcript logging

🗣️ Turn Detection (VAD)

🔊 Audio Output

🎯 LiveKit Agent Settings

Background Voice Cancellation (server-side)

Min pause before agent responds

Max wait before forcing response

Time to decide if interruption was real

First message spoken when call connects

Variables: {faq_content}, {caller_context}

Markdown FAQ that the agent references during sales calls

🔧 Tools & LLM Validation

When validation is enabled, tool calls are reviewed by a secondary LLM before execution. It checks the conversation transcript for transcription errors (misspelled names, garbled emails) and either corrects the parameters or asks the caller to confirm.

Empty = built-in default (recommended). Custom prompts must include {transcript}, {tool_name}, {params}.

get_available_slots
Check available times from HubSpot calendar

e.g., dan2034/dg-ai-receptionist-

schedule_sales_call
Book a meeting — validates name, email, and time against transcript

Same slug used for availability + booking

enter_demo_mode
Roleplay as a clinic receptionist
exit_demo_mode
Return to sales conversation

Variables: {clinic_name}, {specialty}, {providers}, {visit_types}

Define clinic profiles for demo mode. Each key is a clinic type.

One URL per line. Called when a call ends.

One URL per line. Called when a meeting is scheduled.

Called when an error occurs during a call.

Guardrails run a secondary LLM after each agent response to check for hallucinations. If detected, it instructs the agent to correct itself. Uses prompt caching for speed and cost efficiency.

Check responses during sales conversations

Check responses during clinic demo roleplay

Sonnet 4.5 offers best balance of speed and accuracy

Define what to check for. JSON response format is added automatically. Context includes Sales Prompt + FAQ.