Create a run plan
Creates a new simulation run plan. Optionally triggers a job immediately if autoRun is true.
import Roark from '@roarkanalytics/sdk';
const client = new Roark({
bearerToken: process.env['ROARK_API_BEARER_TOKEN'], // This is the default and can be omitted
});
const simulationRunPlan = await client.simulationRunPlan.create({
agentEndpoints: [{ id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }],
direction: 'INBOUND',
maxSimulationDurationSeconds: 300,
metrics: [{}],
name: 'My Run Plan',
personas: [{ id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }],
scenarios: [{ id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }],
});
console.log(simulationRunPlan.data);import os
from roark_analytics import Roark
client = Roark(
bearer_token=os.environ.get("ROARK_API_BEARER_TOKEN"), # This is the default and can be omitted
)
simulation_run_plan = client.simulation_run_plan.create(
agent_endpoints=[{
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
}],
direction="INBOUND",
max_simulation_duration_seconds=300,
metrics=[{}],
name="My Run Plan",
personas=[{
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
}],
scenarios=[{
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
}],
)
print(simulation_run_plan.data)curl --request POST \
--url https://api.roark.ai/v1/simulation/plan \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "My Run Plan",
"direction": "INBOUND",
"maxSimulationDurationSeconds": 300,
"scenarios": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variables": {
"customerName": "John Doe",
"appointmentDate": "2024-02-15"
}
}
],
"personas": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"agentEndpoints": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"metrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"metricId": "<string>"
}
],
"description": "A run plan for testing inbound calls",
"iterationCount": 1,
"maxConcurrentJobs": 5,
"silenceTimeoutSeconds": 30,
"endCallPhrases": [
"goodbye"
],
"endCallReasons": [
"Order has been confirmed by the agent"
],
"executionMode": "PARALLEL",
"autoRun": false
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.roark.ai/v1/simulation/plan",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'My Run Plan',
'direction' => 'INBOUND',
'maxSimulationDurationSeconds' => 300,
'scenarios' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'variables' => [
'customerName' => 'John Doe',
'appointmentDate' => '2024-02-15'
]
]
],
'personas' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'agentEndpoints' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'metrics' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'slug' => '<string>',
'metricId' => '<string>'
]
],
'description' => 'A run plan for testing inbound calls',
'iterationCount' => 1,
'maxConcurrentJobs' => 5,
'silenceTimeoutSeconds' => 30,
'endCallPhrases' => [
'goodbye'
],
'endCallReasons' => [
'Order has been confirmed by the agent'
],
'executionMode' => 'PARALLEL',
'autoRun' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.roark.ai/v1/simulation/plan"
payload := strings.NewReader("{\n \"name\": \"My Run Plan\",\n \"direction\": \"INBOUND\",\n \"maxSimulationDurationSeconds\": 300,\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {\n \"customerName\": \"John Doe\",\n \"appointmentDate\": \"2024-02-15\"\n }\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ],\n \"description\": \"A run plan for testing inbound calls\",\n \"iterationCount\": 1,\n \"maxConcurrentJobs\": 5,\n \"silenceTimeoutSeconds\": 30,\n \"endCallPhrases\": [\n \"goodbye\"\n ],\n \"endCallReasons\": [\n \"Order has been confirmed by the agent\"\n ],\n \"executionMode\": \"PARALLEL\",\n \"autoRun\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.roark.ai/v1/simulation/plan")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"My Run Plan\",\n \"direction\": \"INBOUND\",\n \"maxSimulationDurationSeconds\": 300,\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {\n \"customerName\": \"John Doe\",\n \"appointmentDate\": \"2024-02-15\"\n }\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ],\n \"description\": \"A run plan for testing inbound calls\",\n \"iterationCount\": 1,\n \"maxConcurrentJobs\": 5,\n \"silenceTimeoutSeconds\": 30,\n \"endCallPhrases\": [\n \"goodbye\"\n ],\n \"endCallReasons\": [\n \"Order has been confirmed by the agent\"\n ],\n \"executionMode\": \"PARALLEL\",\n \"autoRun\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roark.ai/v1/simulation/plan")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"My Run Plan\",\n \"direction\": \"INBOUND\",\n \"maxSimulationDurationSeconds\": 300,\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {\n \"customerName\": \"John Doe\",\n \"appointmentDate\": \"2024-02-15\"\n }\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ],\n \"description\": \"A run plan for testing inbound calls\",\n \"iterationCount\": 1,\n \"maxConcurrentJobs\": 5,\n \"silenceTimeoutSeconds\": 30,\n \"endCallPhrases\": [\n \"goodbye\"\n ],\n \"endCallReasons\": [\n \"Order has been confirmed by the agent\"\n ],\n \"executionMode\": \"PARALLEL\",\n \"autoRun\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"runPlan": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"iterationCount": 123,
"maxConcurrentJobs": 123,
"maxSimulationDurationSeconds": 123,
"silenceTimeoutSeconds": 123,
"endCallPhrases": [
"<string>"
],
"endCallReasons": [
"<string>"
],
"scenarios": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variables": {
"customerName": "John Doe",
"appointmentDate": "2024-02-15"
}
}
],
"personas": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"agentEndpoints": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"evaluators": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"metrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"testCaseCount": 123,
"createdAt": "<string>",
"updatedAt": "<string>",
"description": "<string>"
},
"runPlanJob": {
"simulationRunPlanId": "9a8b7c6d-5e4f-3210-abcd-ef9876543210",
"simulationRunPlanJobId": "7f3e4d2c-8a91-4b5c-9e6f-1a2b3c4d5e6f",
"status": "PENDING",
"createdAt": "2024-01-15T10:30:00Z"
}
}
}{
"type": "validation",
"code": "invalid_parameter",
"message": "The request was invalid",
"param": "email"
}{
"type": "authentication",
"code": "unauthorized",
"message": "Authentication required"
}{
"type": "forbidden",
"code": "permission_denied",
"message": "You do not have permission to access this resource"
}{
"type": "rate_limit",
"code": "too_many_requests",
"message": "Rate limit exceeded"
}{
"type": "internal",
"code": "internal_error",
"message": "Internal server error"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Input for creating a new simulation run plan
Name of the run plan
1"My Run Plan"
Direction of the simulation (INBOUND or OUTBOUND)
INBOUND, OUTBOUND "INBOUND"
Maximum duration in seconds for each simulation
x >= 1300
Scenarios to include in this run plan. The same scenario ID can appear multiple times with different variables.
1Show child attributes
Show child attributes
Personas to include in this run plan
1Show child attributes
Show child attributes
Agent endpoints to include in this run plan
1Show child attributes
Show child attributes
Metric definitions to include in this run plan. Reference each by id (UUID) or slug.
1Show child attributes
Show child attributes
Description of the run plan
"A run plan for testing inbound calls"
Number of iterations to run for each test case. Must be 1 for OUTBOUND direction.
x >= 11
Maximum number of concurrent simulation jobs
x >= 15
Timeout in seconds for silence detection
x >= 130
Phrases that trigger end of call. Empty array disables the feature.
["goodbye"]
Semantic conditions that trigger end of call. The LLM evaluates the conversation against these conditions. Empty array disables the feature.
["Order has been confirmed by the agent"]
Execution mode (PARALLEL or SEQUENTIAL)
PARALLEL, SEQUENTIAL_SAME_RUN_PLAN, SEQUENTIAL_PROJECT "PARALLEL"
Whether to automatically trigger a job after creating the run plan
false
Response
The created run plan
Response when creating a run plan, optionally including a triggered job
Show child attributes
Show child attributes
import Roark from '@roarkanalytics/sdk';
const client = new Roark({
bearerToken: process.env['ROARK_API_BEARER_TOKEN'], // This is the default and can be omitted
});
const simulationRunPlan = await client.simulationRunPlan.create({
agentEndpoints: [{ id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }],
direction: 'INBOUND',
maxSimulationDurationSeconds: 300,
metrics: [{}],
name: 'My Run Plan',
personas: [{ id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }],
scenarios: [{ id: '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e' }],
});
console.log(simulationRunPlan.data);import os
from roark_analytics import Roark
client = Roark(
bearer_token=os.environ.get("ROARK_API_BEARER_TOKEN"), # This is the default and can be omitted
)
simulation_run_plan = client.simulation_run_plan.create(
agent_endpoints=[{
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
}],
direction="INBOUND",
max_simulation_duration_seconds=300,
metrics=[{}],
name="My Run Plan",
personas=[{
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
}],
scenarios=[{
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"
}],
)
print(simulation_run_plan.data)curl --request POST \
--url https://api.roark.ai/v1/simulation/plan \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "My Run Plan",
"direction": "INBOUND",
"maxSimulationDurationSeconds": 300,
"scenarios": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variables": {
"customerName": "John Doe",
"appointmentDate": "2024-02-15"
}
}
],
"personas": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"agentEndpoints": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"metrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"metricId": "<string>"
}
],
"description": "A run plan for testing inbound calls",
"iterationCount": 1,
"maxConcurrentJobs": 5,
"silenceTimeoutSeconds": 30,
"endCallPhrases": [
"goodbye"
],
"endCallReasons": [
"Order has been confirmed by the agent"
],
"executionMode": "PARALLEL",
"autoRun": false
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.roark.ai/v1/simulation/plan",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'My Run Plan',
'direction' => 'INBOUND',
'maxSimulationDurationSeconds' => 300,
'scenarios' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'variables' => [
'customerName' => 'John Doe',
'appointmentDate' => '2024-02-15'
]
]
],
'personas' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'agentEndpoints' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
],
'metrics' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'slug' => '<string>',
'metricId' => '<string>'
]
],
'description' => 'A run plan for testing inbound calls',
'iterationCount' => 1,
'maxConcurrentJobs' => 5,
'silenceTimeoutSeconds' => 30,
'endCallPhrases' => [
'goodbye'
],
'endCallReasons' => [
'Order has been confirmed by the agent'
],
'executionMode' => 'PARALLEL',
'autoRun' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.roark.ai/v1/simulation/plan"
payload := strings.NewReader("{\n \"name\": \"My Run Plan\",\n \"direction\": \"INBOUND\",\n \"maxSimulationDurationSeconds\": 300,\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {\n \"customerName\": \"John Doe\",\n \"appointmentDate\": \"2024-02-15\"\n }\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ],\n \"description\": \"A run plan for testing inbound calls\",\n \"iterationCount\": 1,\n \"maxConcurrentJobs\": 5,\n \"silenceTimeoutSeconds\": 30,\n \"endCallPhrases\": [\n \"goodbye\"\n ],\n \"endCallReasons\": [\n \"Order has been confirmed by the agent\"\n ],\n \"executionMode\": \"PARALLEL\",\n \"autoRun\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.roark.ai/v1/simulation/plan")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"My Run Plan\",\n \"direction\": \"INBOUND\",\n \"maxSimulationDurationSeconds\": 300,\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {\n \"customerName\": \"John Doe\",\n \"appointmentDate\": \"2024-02-15\"\n }\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ],\n \"description\": \"A run plan for testing inbound calls\",\n \"iterationCount\": 1,\n \"maxConcurrentJobs\": 5,\n \"silenceTimeoutSeconds\": 30,\n \"endCallPhrases\": [\n \"goodbye\"\n ],\n \"endCallReasons\": [\n \"Order has been confirmed by the agent\"\n ],\n \"executionMode\": \"PARALLEL\",\n \"autoRun\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.roark.ai/v1/simulation/plan")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"My Run Plan\",\n \"direction\": \"INBOUND\",\n \"maxSimulationDurationSeconds\": 300,\n \"scenarios\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"variables\": {\n \"customerName\": \"John Doe\",\n \"appointmentDate\": \"2024-02-15\"\n }\n }\n ],\n \"personas\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"agentEndpoints\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ],\n \"metrics\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"slug\": \"<string>\",\n \"metricId\": \"<string>\"\n }\n ],\n \"description\": \"A run plan for testing inbound calls\",\n \"iterationCount\": 1,\n \"maxConcurrentJobs\": 5,\n \"silenceTimeoutSeconds\": 30,\n \"endCallPhrases\": [\n \"goodbye\"\n ],\n \"endCallReasons\": [\n \"Order has been confirmed by the agent\"\n ],\n \"executionMode\": \"PARALLEL\",\n \"autoRun\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"runPlan": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"iterationCount": 123,
"maxConcurrentJobs": 123,
"maxSimulationDurationSeconds": 123,
"silenceTimeoutSeconds": 123,
"endCallPhrases": [
"<string>"
],
"endCallReasons": [
"<string>"
],
"scenarios": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"variables": {
"customerName": "John Doe",
"appointmentDate": "2024-02-15"
}
}
],
"personas": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"agentEndpoints": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"evaluators": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"metrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"testCaseCount": 123,
"createdAt": "<string>",
"updatedAt": "<string>",
"description": "<string>"
},
"runPlanJob": {
"simulationRunPlanId": "9a8b7c6d-5e4f-3210-abcd-ef9876543210",
"simulationRunPlanJobId": "7f3e4d2c-8a91-4b5c-9e6f-1a2b3c4d5e6f",
"status": "PENDING",
"createdAt": "2024-01-15T10:30:00Z"
}
}
}{
"type": "validation",
"code": "invalid_parameter",
"message": "The request was invalid",
"param": "email"
}{
"type": "authentication",
"code": "unauthorized",
"message": "Authentication required"
}{
"type": "forbidden",
"code": "permission_denied",
"message": "You do not have permission to access this resource"
}{
"type": "rate_limit",
"code": "too_many_requests",
"message": "Rate limit exceeded"
}{
"type": "internal",
"code": "internal_error",
"message": "Internal server error"
}