The Node.js SDK is continually evolving, with new endpoints being added regularly. Stay tuned for updates!
Overview
The Roark Node.js SDK provides a streamlined way to interact with the Roark API. This guide covers the two most common workflows: uploading calls and running metrics, and executing simulation run plans.
Prerequisites
Before you begin, ensure you have:
Installation
Choose your preferred package manager:
npm install @roarkanalytics/sdk
Initialize the Client
import Roark from '@roarkanalytics/sdk'
const client = new Roark ({
bearerToken: process . env . ROARK_API_BEARER_TOKEN ,
})
Set ROARK_API_BEARER_TOKEN in your environment, or replace with your actual API key from Roark.
Upload a Call and Run Metrics
Upload a call recording, then run metric definitions against it using a collection job.
Upload a Call
const call = await client . call . create ({
recordingUrl: 'https://example.com/recording.mp3' ,
startedAt: '2024-01-15T10:00:00Z' ,
interfaceType: 'PHONE' ,
callDirection: 'INBOUND' ,
agent: {
name: 'Support Agent' ,
customId: 'agent-123' ,
},
customer: {
phoneNumberE164: '+15551234567' ,
},
// Optional: custom properties for filtering
properties: {
department: 'sales' ,
campaignId: 'summer-2024' ,
},
})
Get Metric Definitions
List available metric definitions to choose which ones to run: const definitions = await client . metric . listDefinitions ()
// Find the metrics you want to collect
const taskCompletion = definitions . data . find (
( m ) => m . metricId === 'task_completion'
)
const satisfaction = definitions . data . find (
( m ) => m . metricId === 'customer_satisfaction'
)
Create a Metric Collection Job
Run the selected metrics against your uploaded call: const job = await client . metricCollectionJob . create ({
callIds: [ call . data . id ],
metrics: [
{ id: taskCompletion . id },
{ id: satisfaction . id },
],
})
Poll for Completion
let status = 'PENDING'
while ( status !== 'COMPLETED' && status !== 'FAILED' ) {
const result = await client . metricCollectionJob . getByID ( job . data . id )
status = result . data . status
console . log ( `Progress: ${ result . data . completedItems } / ${ result . data . totalItems } ` )
if ( status !== 'COMPLETED' && status !== 'FAILED' ) {
await new Promise (( r ) => setTimeout ( r , 2000 ))
}
}
Fetch Results
const metrics = await client . call . listMetrics ( call . data . id )
console . log ( metrics . data )
If you have metric policies configured, metrics are collected automatically when calls are uploaded — no collection job needed.
Run a Simulation Run Plan
Create and execute a simulation run plan to systematically test your voice AI agent.
Create the Run Plan
Define scenarios, personas, agent endpoints, and metrics to include: const plan = await client . simulationRunPlan . create ({
name: 'Production Regression Suite' ,
direction: 'INBOUND' ,
maxSimulationDurationSeconds: 300 ,
scenarios: [
{ id: 'scenario-uuid-1' },
{ id: 'scenario-uuid-2' },
],
personas: [
{ id: 'persona-uuid-1' },
{ id: 'persona-uuid-2' },
],
agentEndpoints: [
{ id: 'agent-endpoint-uuid' },
],
metrics: [
{ id: 'metric-definition-uuid-1' },
{ id: 'metric-definition-uuid-2' },
],
iterationCount: 1 ,
maxConcurrentJobs: 10 ,
autoRun: true , // Start immediately after creation
})
// plan.data.runPlanJob contains the job if autoRun is true
Or Start an Existing Plan
If you already have a run plan, start a new job for it: const job = await client . simulationRunPlanJob . start ( 'plan-uuid' )
Monitor Progress
const jobResult = await client . simulationRunPlanJob . getByID (
job . data . simulationRunPlanJobId
)
console . log ( `Status: ${ jobResult . data . status } ` )
console . log ( `Jobs: ${ jobResult . data . simulationJobs . length } ` )
View Results
Results including metric evaluations are available in the Roark dashboard, or you can fetch metrics for individual simulation calls via the API: // Get metrics for a specific simulation call
const metrics = await client . call . listMetrics ( 'simulation-call-id' )
Additional Examples
Create a call with tool invocations
Create a call with an existing agent
Reference an agent by its Roark ID or custom ID: // By Roark ID
const call = await client . call . create ({
recordingUrl: 'https://example.com/recording.mp3' ,
startedAt: '2024-01-15T10:00:00Z' ,
interfaceType: 'WEB' ,
callDirection: 'OUTBOUND' ,
agent: {
roarkId: '550e8400-e29b-41d4-a716-446655440000' ,
},
customer: {
phoneNumberE164: '+15551234567' ,
},
})
// By custom ID
const call2 = await client . call . create ({
recordingUrl: 'https://example.com/recording.mp3' ,
startedAt: '2024-01-15T10:00:00Z' ,
interfaceType: 'PHONE' ,
callDirection: 'INBOUND' ,
agent: {
customId: 'my-agent-id' ,
},
customer: {
phoneNumberE164: '+15551234567' ,
},
})
Create a metric collection job for multiple calls
Run metrics across a batch of existing calls: const job = await client . metricCollectionJob . create ({
callIds: [
'call-uuid-1' ,
'call-uuid-2' ,
'call-uuid-3' ,
],
metrics: [
{ id: 'metric-definition-uuid-1' },
{ id: 'metric-definition-uuid-2' },
],
})
// totalItems = callIds.length * metrics.length
console . log ( `Processing ${ job . data . totalItems } items` )
Additional Resources