@roarkanalytics/sdk 3.14.0 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -472,6 +472,12 @@ export namespace CustomerFlowEdgeCaseUpdateResponse {
472
472
  */
473
473
  environment: ImprovFlowVariant.Environment | null;
474
474
 
475
+ /**
476
+ * The personas this brief hands the phone to, in order of first mention. Empty
477
+ * when the brief inherits the happy path's: read the happy path's list.
478
+ */
479
+ handoffPersonas: Array<ImprovFlowVariant.HandoffPersona>;
480
+
475
481
  isGenerated: boolean;
476
482
 
477
483
  /**
@@ -493,7 +499,9 @@ export namespace CustomerFlowEdgeCaseUpdateResponse {
493
499
  updatedAt: string;
494
500
 
495
501
  /**
496
- * The brief the simulated customer improvises from.
502
+ * The brief the simulated customer improvises from. A `@{persona:<id>}` mention
503
+ * hands the phone to that persona mid-call; the sentences around the mention say
504
+ * when.
497
505
  */
498
506
  prompt?: string | null;
499
507
 
@@ -552,10 +560,7 @@ export namespace CustomerFlowEdgeCaseUpdateResponse {
552
560
  description?: string | null;
553
561
  }
554
562
 
555
- /**
556
- * The persona this runs as instead of the happy path's. Null means it inherits.
557
- */
558
- export interface PersonaOverride {
563
+ export interface HandoffPersona {
559
564
  /**
560
565
  * Unique identifier of the persona
561
566
  */
@@ -781,105 +786,6 @@ export namespace CustomerFlowEdgeCaseUpdateResponse {
781
786
  */
782
787
  secondaryLanguage?: 'EN' | null;
783
788
  }
784
- }
785
-
786
- /**
787
- * One voicemail greeting.
788
- */
789
- export interface VoicemailFlowVariant {
790
- id: string;
791
-
792
- /**
793
- * Graded on top of the flow's own expectations, for this variant only.
794
- */
795
- additionalExpectations: Array<VoicemailFlowVariant.AdditionalExpectation>;
796
-
797
- /**
798
- * Creation timestamp in ISO 8601 format
799
- */
800
- createdAt: string;
801
-
802
- /**
803
- * A simulation environment: the ambient conditions a customer flow variant runs
804
- * under. The list includes both your own and the ones Roark curates for every
805
- * project.
806
- */
807
- environment: VoicemailFlowVariant.Environment | null;
808
-
809
- isGenerated: boolean;
810
-
811
- /**
812
- * The persona this runs as instead of the happy path's. Null means it inherits.
813
- */
814
- personaOverride: VoicemailFlowVariant.PersonaOverride | null;
815
-
816
- precededByCustomerFlowId: string | null;
817
-
818
- precededByCustomerFlowVariantId: string | null;
819
-
820
- title: string;
821
-
822
- type: 'VOICEMAIL';
823
-
824
- /**
825
- * Last update timestamp in ISO 8601 format
826
- */
827
- updatedAt: string;
828
-
829
- systemKey?: string | null;
830
- }
831
-
832
- export namespace VoicemailFlowVariant {
833
- /**
834
- * One thing the agent under test is graded against.
835
- */
836
- export interface AdditionalExpectation {
837
- id: string;
838
-
839
- /**
840
- * What the agent under test is graded against.
841
- */
842
- prompt: string;
843
- }
844
-
845
- /**
846
- * A simulation environment: the ambient conditions a customer flow variant runs
847
- * under. The list includes both your own and the ones Roark curates for every
848
- * project.
849
- */
850
- export interface Environment {
851
- id: string;
852
-
853
- backgroundNoise:
854
- | 'NONE'
855
- | 'AIRPORT'
856
- | 'CHILDREN_PLAYING'
857
- | 'CITY'
858
- | 'COFFEE_SHOP'
859
- | 'CONSTRUCTION'
860
- | 'CRYING_BABY'
861
- | 'DRIVING'
862
- | 'LIBRARY'
863
- | 'OFFICE'
864
- | 'THUNDERSTORM'
865
- | 'TRAIN';
866
-
867
- backgroundNoiseVolume: number;
868
-
869
- /**
870
- * Creation timestamp in ISO 8601 format
871
- */
872
- createdAt: string;
873
-
874
- name: string;
875
-
876
- /**
877
- * Last update timestamp in ISO 8601 format
878
- */
879
- updatedAt: string;
880
-
881
- description?: string | null;
882
- }
883
789
 
884
790
  /**
885
791
  * The persona this runs as instead of the happy path's. Null means it inherits.
@@ -1111,30 +1017,17 @@ export namespace CustomerFlowEdgeCaseUpdateResponse {
1111
1017
  secondaryLanguage?: 'EN' | null;
1112
1018
  }
1113
1019
  }
1114
- }
1115
-
1116
- export interface CustomerFlowEdgeCaseAddResponse {
1117
- /**
1118
- * One way of running a customer flow.
1119
- */
1120
- data:
1121
- | CustomerFlowEdgeCaseAddResponse.ScriptedFlowVariant
1122
- | CustomerFlowEdgeCaseAddResponse.ImprovFlowVariant
1123
- | CustomerFlowEdgeCaseAddResponse.VoicemailFlowVariant;
1124
- }
1125
1020
 
1126
- export namespace CustomerFlowEdgeCaseAddResponse {
1127
1021
  /**
1128
- * One path through a scripted flow. The path engine owns which paths exist, so
1129
- * editing the graph is what creates and removes these.
1022
+ * One voicemail greeting.
1130
1023
  */
1131
- export interface ScriptedFlowVariant {
1024
+ export interface VoicemailFlowVariant {
1132
1025
  id: string;
1133
1026
 
1134
1027
  /**
1135
1028
  * Graded on top of the flow's own expectations, for this variant only.
1136
1029
  */
1137
- additionalExpectations: Array<ScriptedFlowVariant.AdditionalExpectation>;
1030
+ additionalExpectations: Array<VoicemailFlowVariant.AdditionalExpectation>;
1138
1031
 
1139
1032
  /**
1140
1033
  * Creation timestamp in ISO 8601 format
@@ -1146,28 +1039,22 @@ export namespace CustomerFlowEdgeCaseAddResponse {
1146
1039
  * under. The list includes both your own and the ones Roark curates for every
1147
1040
  * project.
1148
1041
  */
1149
- environment: ScriptedFlowVariant.Environment | null;
1042
+ environment: VoicemailFlowVariant.Environment | null;
1150
1043
 
1151
1044
  isGenerated: boolean;
1152
1045
 
1153
1046
  /**
1154
1047
  * The persona this runs as instead of the happy path's. Null means it inherits.
1155
1048
  */
1156
- personaOverride: ScriptedFlowVariant.PersonaOverride | null;
1049
+ personaOverride: VoicemailFlowVariant.PersonaOverride | null;
1157
1050
 
1158
1051
  precededByCustomerFlowId: string | null;
1159
1052
 
1160
1053
  precededByCustomerFlowVariantId: string | null;
1161
1054
 
1162
- /**
1163
- * The one path through the graph this variant runs, in order. Linear by
1164
- * construction, so these steps never nest.
1165
- */
1166
- steps: Array<CustomerFlowAPI.FlowStep>;
1167
-
1168
1055
  title: string;
1169
1056
 
1170
- type: 'SCRIPTED';
1057
+ type: 'VOICEMAIL';
1171
1058
 
1172
1059
  /**
1173
1060
  * Last update timestamp in ISO 8601 format
@@ -1177,7 +1064,7 @@ export namespace CustomerFlowEdgeCaseAddResponse {
1177
1064
  systemKey?: string | null;
1178
1065
  }
1179
1066
 
1180
- export namespace ScriptedFlowVariant {
1067
+ export namespace VoicemailFlowVariant {
1181
1068
  /**
1182
1069
  * One thing the agent under test is graded against.
1183
1070
  */
@@ -1459,17 +1346,30 @@ export namespace CustomerFlowEdgeCaseAddResponse {
1459
1346
  secondaryLanguage?: 'EN' | null;
1460
1347
  }
1461
1348
  }
1349
+ }
1462
1350
 
1351
+ export interface CustomerFlowEdgeCaseAddResponse {
1463
1352
  /**
1464
- * One brief to run an improv flow with.
1353
+ * One way of running a customer flow.
1465
1354
  */
1466
- export interface ImprovFlowVariant {
1355
+ data:
1356
+ | CustomerFlowEdgeCaseAddResponse.ScriptedFlowVariant
1357
+ | CustomerFlowEdgeCaseAddResponse.ImprovFlowVariant
1358
+ | CustomerFlowEdgeCaseAddResponse.VoicemailFlowVariant;
1359
+ }
1360
+
1361
+ export namespace CustomerFlowEdgeCaseAddResponse {
1362
+ /**
1363
+ * One path through a scripted flow. The path engine owns which paths exist, so
1364
+ * editing the graph is what creates and removes these.
1365
+ */
1366
+ export interface ScriptedFlowVariant {
1467
1367
  id: string;
1468
1368
 
1469
1369
  /**
1470
1370
  * Graded on top of the flow's own expectations, for this variant only.
1471
1371
  */
1472
- additionalExpectations: Array<ImprovFlowVariant.AdditionalExpectation>;
1372
+ additionalExpectations: Array<ScriptedFlowVariant.AdditionalExpectation>;
1473
1373
 
1474
1374
  /**
1475
1375
  * Creation timestamp in ISO 8601 format
@@ -1481,37 +1381,38 @@ export namespace CustomerFlowEdgeCaseAddResponse {
1481
1381
  * under. The list includes both your own and the ones Roark curates for every
1482
1382
  * project.
1483
1383
  */
1484
- environment: ImprovFlowVariant.Environment | null;
1384
+ environment: ScriptedFlowVariant.Environment | null;
1485
1385
 
1486
1386
  isGenerated: boolean;
1487
1387
 
1488
1388
  /**
1489
1389
  * The persona this runs as instead of the happy path's. Null means it inherits.
1490
1390
  */
1491
- personaOverride: ImprovFlowVariant.PersonaOverride | null;
1391
+ personaOverride: ScriptedFlowVariant.PersonaOverride | null;
1492
1392
 
1493
1393
  precededByCustomerFlowId: string | null;
1494
1394
 
1495
1395
  precededByCustomerFlowVariantId: string | null;
1496
1396
 
1397
+ /**
1398
+ * The one path through the graph this variant runs, in order. Linear by
1399
+ * construction, so these steps never nest.
1400
+ */
1401
+ steps: Array<CustomerFlowAPI.FlowStep>;
1402
+
1497
1403
  title: string;
1498
1404
 
1499
- type: 'IMPROV';
1405
+ type: 'SCRIPTED';
1500
1406
 
1501
1407
  /**
1502
1408
  * Last update timestamp in ISO 8601 format
1503
1409
  */
1504
1410
  updatedAt: string;
1505
1411
 
1506
- /**
1507
- * The brief the simulated customer improvises from.
1508
- */
1509
- prompt?: string | null;
1510
-
1511
1412
  systemKey?: string | null;
1512
1413
  }
1513
1414
 
1514
- export namespace ImprovFlowVariant {
1415
+ export namespace ScriptedFlowVariant {
1515
1416
  /**
1516
1417
  * One thing the agent under test is graded against.
1517
1418
  */
@@ -1795,15 +1696,15 @@ export namespace CustomerFlowEdgeCaseAddResponse {
1795
1696
  }
1796
1697
 
1797
1698
  /**
1798
- * One voicemail greeting.
1699
+ * One brief to run an improv flow with.
1799
1700
  */
1800
- export interface VoicemailFlowVariant {
1701
+ export interface ImprovFlowVariant {
1801
1702
  id: string;
1802
1703
 
1803
1704
  /**
1804
1705
  * Graded on top of the flow's own expectations, for this variant only.
1805
1706
  */
1806
- additionalExpectations: Array<VoicemailFlowVariant.AdditionalExpectation>;
1707
+ additionalExpectations: Array<ImprovFlowVariant.AdditionalExpectation>;
1807
1708
 
1808
1709
  /**
1809
1710
  * Creation timestamp in ISO 8601 format
@@ -1815,14 +1716,20 @@ export namespace CustomerFlowEdgeCaseAddResponse {
1815
1716
  * under. The list includes both your own and the ones Roark curates for every
1816
1717
  * project.
1817
1718
  */
1818
- environment: VoicemailFlowVariant.Environment | null;
1719
+ environment: ImprovFlowVariant.Environment | null;
1720
+
1721
+ /**
1722
+ * The personas this brief hands the phone to, in order of first mention. Empty
1723
+ * when the brief inherits the happy path's: read the happy path's list.
1724
+ */
1725
+ handoffPersonas: Array<ImprovFlowVariant.HandoffPersona>;
1819
1726
 
1820
1727
  isGenerated: boolean;
1821
1728
 
1822
1729
  /**
1823
1730
  * The persona this runs as instead of the happy path's. Null means it inherits.
1824
1731
  */
1825
- personaOverride: VoicemailFlowVariant.PersonaOverride | null;
1732
+ personaOverride: ImprovFlowVariant.PersonaOverride | null;
1826
1733
 
1827
1734
  precededByCustomerFlowId: string | null;
1828
1735
 
@@ -1830,17 +1737,24 @@ export namespace CustomerFlowEdgeCaseAddResponse {
1830
1737
 
1831
1738
  title: string;
1832
1739
 
1833
- type: 'VOICEMAIL';
1740
+ type: 'IMPROV';
1834
1741
 
1835
1742
  /**
1836
1743
  * Last update timestamp in ISO 8601 format
1837
1744
  */
1838
1745
  updatedAt: string;
1839
1746
 
1747
+ /**
1748
+ * The brief the simulated customer improvises from. A `@{persona:<id>}` mention
1749
+ * hands the phone to that persona mid-call; the sentences around the mention say
1750
+ * when.
1751
+ */
1752
+ prompt?: string | null;
1753
+
1840
1754
  systemKey?: string | null;
1841
1755
  }
1842
1756
 
1843
- export namespace VoicemailFlowVariant {
1757
+ export namespace ImprovFlowVariant {
1844
1758
  /**
1845
1759
  * One thing the agent under test is graded against.
1846
1760
  */
@@ -1892,10 +1806,7 @@ export namespace CustomerFlowEdgeCaseAddResponse {
1892
1806
  description?: string | null;
1893
1807
  }
1894
1808
 
1895
- /**
1896
- * The persona this runs as instead of the happy path's. Null means it inherits.
1897
- */
1898
- export interface PersonaOverride {
1809
+ export interface HandoffPersona {
1899
1810
  /**
1900
1811
  * Unique identifier of the persona
1901
1812
  */
@@ -2121,60 +2032,619 @@ export namespace CustomerFlowEdgeCaseAddResponse {
2121
2032
  */
2122
2033
  secondaryLanguage?: 'EN' | null;
2123
2034
  }
2124
- }
2125
- }
2126
-
2127
- export interface CustomerFlowEdgeCasePromoteResponse {
2128
- /**
2129
- * One way of running a customer flow.
2130
- */
2131
- data:
2132
- | CustomerFlowEdgeCasePromoteResponse.ScriptedFlowVariant
2133
- | CustomerFlowEdgeCasePromoteResponse.ImprovFlowVariant
2134
- | CustomerFlowEdgeCasePromoteResponse.VoicemailFlowVariant;
2135
- }
2136
-
2137
- export namespace CustomerFlowEdgeCasePromoteResponse {
2138
- /**
2139
- * One path through a scripted flow. The path engine owns which paths exist, so
2140
- * editing the graph is what creates and removes these.
2141
- */
2142
- export interface ScriptedFlowVariant {
2143
- id: string;
2144
-
2145
- /**
2146
- * Graded on top of the flow's own expectations, for this variant only.
2147
- */
2148
- additionalExpectations: Array<ScriptedFlowVariant.AdditionalExpectation>;
2149
-
2150
- /**
2151
- * Creation timestamp in ISO 8601 format
2152
- */
2153
- createdAt: string;
2154
-
2155
- /**
2156
- * A simulation environment: the ambient conditions a customer flow variant runs
2157
- * under. The list includes both your own and the ones Roark curates for every
2158
- * project.
2159
- */
2160
- environment: ScriptedFlowVariant.Environment | null;
2161
-
2162
- isGenerated: boolean;
2163
2035
 
2164
2036
  /**
2165
2037
  * The persona this runs as instead of the happy path's. Null means it inherits.
2166
2038
  */
2167
- personaOverride: ScriptedFlowVariant.PersonaOverride | null;
2168
-
2169
- precededByCustomerFlowId: string | null;
2170
-
2171
- precededByCustomerFlowVariantId: string | null;
2172
-
2173
- /**
2174
- * The one path through the graph this variant runs, in order. Linear by
2175
- * construction, so these steps never nest.
2176
- */
2177
- steps: Array<CustomerFlowAPI.FlowStep>;
2039
+ export interface PersonaOverride {
2040
+ /**
2041
+ * Unique identifier of the persona
2042
+ */
2043
+ id: string;
2044
+
2045
+ /**
2046
+ * Accent of the persona, defined using ISO 3166-1 alpha-2 country codes with
2047
+ * optional variants
2048
+ */
2049
+ accent:
2050
+ | 'US'
2051
+ | 'US_X_SOUTH'
2052
+ | 'GB'
2053
+ | 'ES'
2054
+ | 'DE'
2055
+ | 'IN'
2056
+ | 'FR'
2057
+ | 'NL'
2058
+ | 'SA'
2059
+ | 'GR'
2060
+ | 'AU'
2061
+ | 'IT'
2062
+ | 'ID'
2063
+ | 'TH'
2064
+ | 'JP'
2065
+ | 'NZ'
2066
+ | 'PH'
2067
+ | 'SG'
2068
+ | 'MY'
2069
+ | 'HK'
2070
+ | 'TR'
2071
+ | 'PT'
2072
+ | 'IL';
2073
+
2074
+ /**
2075
+ * How old the caller sounds and behaves. Only ages the persona's accent has a
2076
+ * voice for are accepted; defaults to ADULT, which every accent supports.
2077
+ */
2078
+ age: 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY';
2079
+
2080
+ /**
2081
+ * Background noise setting
2082
+ */
2083
+ backgroundNoise:
2084
+ | 'NONE'
2085
+ | 'AIRPORT'
2086
+ | 'CHILDREN_PLAYING'
2087
+ | 'CITY'
2088
+ | 'COFFEE_SHOP'
2089
+ | 'CONSTRUCTION'
2090
+ | 'CRYING_BABY'
2091
+ | 'DRIVING'
2092
+ | 'LIBRARY'
2093
+ | 'OFFICE'
2094
+ | 'THUNDERSTORM'
2095
+ | 'TRAIN';
2096
+
2097
+ /**
2098
+ * Base emotional state of the persona
2099
+ */
2100
+ baseEmotion:
2101
+ | 'NEUTRAL'
2102
+ | 'CHEERFUL'
2103
+ | 'CONFUSED'
2104
+ | 'FRUSTRATED'
2105
+ | 'SKEPTICAL'
2106
+ | 'RUSHED'
2107
+ | 'DISTRACTED'
2108
+ | 'ANGRY'
2109
+ | 'ANXIOUS'
2110
+ | 'SAD';
2111
+
2112
+ /**
2113
+ * How the persona confirms information
2114
+ */
2115
+ confirmationStyle: 'EXPLICIT' | 'VAGUE';
2116
+
2117
+ /**
2118
+ * Creation timestamp
2119
+ */
2120
+ createdAt: string;
2121
+
2122
+ /**
2123
+ * Gender of the persona
2124
+ */
2125
+ gender: 'MALE' | 'FEMALE';
2126
+
2127
+ /**
2128
+ * Whether the persona uses filler words like "um" and "uh"
2129
+ */
2130
+ hasDisfluencies: boolean;
2131
+
2132
+ /**
2133
+ * Maximum number of idle messages the persona will send before giving up
2134
+ */
2135
+ idleMessageMaxSpokenCount: number;
2136
+
2137
+ /**
2138
+ * Whether the idle message counter resets when the agent speaks
2139
+ */
2140
+ idleMessageResetCountOnUserSpeechEnabled: boolean;
2141
+
2142
+ /**
2143
+ * Messages the persona will say when the agent goes silent during a call. null =
2144
+ * "Automatic": language-appropriate defaults are used at call time.
2145
+ */
2146
+ idleMessages: Array<string> | null;
2147
+
2148
+ /**
2149
+ * Seconds of silence before the persona sends an idle message
2150
+ */
2151
+ idleTimeoutSeconds: number;
2152
+
2153
+ /**
2154
+ * How clearly the persona expresses their intentions
2155
+ */
2156
+ intentClarity: 'CLEAR' | 'INDIRECT' | 'VAGUE';
2157
+
2158
+ /**
2159
+ * Primary language ISO 639-1 code for the persona
2160
+ */
2161
+ language:
2162
+ | 'EN'
2163
+ | 'ES'
2164
+ | 'DE'
2165
+ | 'HI'
2166
+ | 'FR'
2167
+ | 'NL'
2168
+ | 'AR'
2169
+ | 'EL'
2170
+ | 'IT'
2171
+ | 'ID'
2172
+ | 'TH'
2173
+ | 'JA'
2174
+ | 'TL'
2175
+ | 'MS'
2176
+ | 'ZH'
2177
+ | 'TR'
2178
+ | 'PT'
2179
+ | 'HE';
2180
+
2181
+ /**
2182
+ * How reliable the persona's memory is
2183
+ */
2184
+ memoryReliability: 'HIGH' | 'LOW';
2185
+
2186
+ /**
2187
+ * The name the agent will identify as during conversations
2188
+ */
2189
+ name: string;
2190
+
2191
+ /**
2192
+ * Additional custom properties about the persona
2193
+ */
2194
+ properties: { [key: string]: unknown };
2195
+
2196
+ /**
2197
+ * Controls how quickly the persona responds to pauses in conversation (QUICK,
2198
+ * NORMAL, RELAXED). BARGE_IN also talks over the agent once it has held the floor
2199
+ * for several seconds.
2200
+ */
2201
+ responseTiming: 'RELAXED' | 'NORMAL' | 'QUICK' | 'BARGE_IN';
2202
+
2203
+ /**
2204
+ * Speech clarity of the persona
2205
+ */
2206
+ speechClarity: 'CLEAR' | 'VAGUE' | 'RAMBLING';
2207
+
2208
+ /**
2209
+ * Speech pace of the persona
2210
+ */
2211
+ speechPace: 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST';
2212
+
2213
+ /**
2214
+ * Languages the persona can understand. Multilingual combinations are limited by
2215
+ * multilingual speech recognition support.
2216
+ */
2217
+ understoodLanguages: Array<
2218
+ | 'EN'
2219
+ | 'ES'
2220
+ | 'DE'
2221
+ | 'HI'
2222
+ | 'FR'
2223
+ | 'NL'
2224
+ | 'AR'
2225
+ | 'EL'
2226
+ | 'IT'
2227
+ | 'ID'
2228
+ | 'TH'
2229
+ | 'JA'
2230
+ | 'TL'
2231
+ | 'MS'
2232
+ | 'ZH'
2233
+ | 'TR'
2234
+ | 'PT'
2235
+ | 'HE'
2236
+ >;
2237
+
2238
+ /**
2239
+ * Last update timestamp
2240
+ */
2241
+ updatedAt: string;
2242
+
2243
+ /**
2244
+ * Background story and behavioral patterns for the persona
2245
+ */
2246
+ backstoryPrompt?: string | null;
2247
+
2248
+ /**
2249
+ * Human-readable description of the persona
2250
+ */
2251
+ description?: string | null;
2252
+
2253
+ /**
2254
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
2255
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
2256
+ * or set null to display the name itself.
2257
+ */
2258
+ displayName?: string | null;
2259
+
2260
+ /**
2261
+ * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
2262
+ */
2263
+ secondaryLanguage?: 'EN' | null;
2264
+ }
2265
+ }
2266
+
2267
+ /**
2268
+ * One voicemail greeting.
2269
+ */
2270
+ export interface VoicemailFlowVariant {
2271
+ id: string;
2272
+
2273
+ /**
2274
+ * Graded on top of the flow's own expectations, for this variant only.
2275
+ */
2276
+ additionalExpectations: Array<VoicemailFlowVariant.AdditionalExpectation>;
2277
+
2278
+ /**
2279
+ * Creation timestamp in ISO 8601 format
2280
+ */
2281
+ createdAt: string;
2282
+
2283
+ /**
2284
+ * A simulation environment: the ambient conditions a customer flow variant runs
2285
+ * under. The list includes both your own and the ones Roark curates for every
2286
+ * project.
2287
+ */
2288
+ environment: VoicemailFlowVariant.Environment | null;
2289
+
2290
+ isGenerated: boolean;
2291
+
2292
+ /**
2293
+ * The persona this runs as instead of the happy path's. Null means it inherits.
2294
+ */
2295
+ personaOverride: VoicemailFlowVariant.PersonaOverride | null;
2296
+
2297
+ precededByCustomerFlowId: string | null;
2298
+
2299
+ precededByCustomerFlowVariantId: string | null;
2300
+
2301
+ title: string;
2302
+
2303
+ type: 'VOICEMAIL';
2304
+
2305
+ /**
2306
+ * Last update timestamp in ISO 8601 format
2307
+ */
2308
+ updatedAt: string;
2309
+
2310
+ systemKey?: string | null;
2311
+ }
2312
+
2313
+ export namespace VoicemailFlowVariant {
2314
+ /**
2315
+ * One thing the agent under test is graded against.
2316
+ */
2317
+ export interface AdditionalExpectation {
2318
+ id: string;
2319
+
2320
+ /**
2321
+ * What the agent under test is graded against.
2322
+ */
2323
+ prompt: string;
2324
+ }
2325
+
2326
+ /**
2327
+ * A simulation environment: the ambient conditions a customer flow variant runs
2328
+ * under. The list includes both your own and the ones Roark curates for every
2329
+ * project.
2330
+ */
2331
+ export interface Environment {
2332
+ id: string;
2333
+
2334
+ backgroundNoise:
2335
+ | 'NONE'
2336
+ | 'AIRPORT'
2337
+ | 'CHILDREN_PLAYING'
2338
+ | 'CITY'
2339
+ | 'COFFEE_SHOP'
2340
+ | 'CONSTRUCTION'
2341
+ | 'CRYING_BABY'
2342
+ | 'DRIVING'
2343
+ | 'LIBRARY'
2344
+ | 'OFFICE'
2345
+ | 'THUNDERSTORM'
2346
+ | 'TRAIN';
2347
+
2348
+ backgroundNoiseVolume: number;
2349
+
2350
+ /**
2351
+ * Creation timestamp in ISO 8601 format
2352
+ */
2353
+ createdAt: string;
2354
+
2355
+ name: string;
2356
+
2357
+ /**
2358
+ * Last update timestamp in ISO 8601 format
2359
+ */
2360
+ updatedAt: string;
2361
+
2362
+ description?: string | null;
2363
+ }
2364
+
2365
+ /**
2366
+ * The persona this runs as instead of the happy path's. Null means it inherits.
2367
+ */
2368
+ export interface PersonaOverride {
2369
+ /**
2370
+ * Unique identifier of the persona
2371
+ */
2372
+ id: string;
2373
+
2374
+ /**
2375
+ * Accent of the persona, defined using ISO 3166-1 alpha-2 country codes with
2376
+ * optional variants
2377
+ */
2378
+ accent:
2379
+ | 'US'
2380
+ | 'US_X_SOUTH'
2381
+ | 'GB'
2382
+ | 'ES'
2383
+ | 'DE'
2384
+ | 'IN'
2385
+ | 'FR'
2386
+ | 'NL'
2387
+ | 'SA'
2388
+ | 'GR'
2389
+ | 'AU'
2390
+ | 'IT'
2391
+ | 'ID'
2392
+ | 'TH'
2393
+ | 'JP'
2394
+ | 'NZ'
2395
+ | 'PH'
2396
+ | 'SG'
2397
+ | 'MY'
2398
+ | 'HK'
2399
+ | 'TR'
2400
+ | 'PT'
2401
+ | 'IL';
2402
+
2403
+ /**
2404
+ * How old the caller sounds and behaves. Only ages the persona's accent has a
2405
+ * voice for are accepted; defaults to ADULT, which every accent supports.
2406
+ */
2407
+ age: 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY';
2408
+
2409
+ /**
2410
+ * Background noise setting
2411
+ */
2412
+ backgroundNoise:
2413
+ | 'NONE'
2414
+ | 'AIRPORT'
2415
+ | 'CHILDREN_PLAYING'
2416
+ | 'CITY'
2417
+ | 'COFFEE_SHOP'
2418
+ | 'CONSTRUCTION'
2419
+ | 'CRYING_BABY'
2420
+ | 'DRIVING'
2421
+ | 'LIBRARY'
2422
+ | 'OFFICE'
2423
+ | 'THUNDERSTORM'
2424
+ | 'TRAIN';
2425
+
2426
+ /**
2427
+ * Base emotional state of the persona
2428
+ */
2429
+ baseEmotion:
2430
+ | 'NEUTRAL'
2431
+ | 'CHEERFUL'
2432
+ | 'CONFUSED'
2433
+ | 'FRUSTRATED'
2434
+ | 'SKEPTICAL'
2435
+ | 'RUSHED'
2436
+ | 'DISTRACTED'
2437
+ | 'ANGRY'
2438
+ | 'ANXIOUS'
2439
+ | 'SAD';
2440
+
2441
+ /**
2442
+ * How the persona confirms information
2443
+ */
2444
+ confirmationStyle: 'EXPLICIT' | 'VAGUE';
2445
+
2446
+ /**
2447
+ * Creation timestamp
2448
+ */
2449
+ createdAt: string;
2450
+
2451
+ /**
2452
+ * Gender of the persona
2453
+ */
2454
+ gender: 'MALE' | 'FEMALE';
2455
+
2456
+ /**
2457
+ * Whether the persona uses filler words like "um" and "uh"
2458
+ */
2459
+ hasDisfluencies: boolean;
2460
+
2461
+ /**
2462
+ * Maximum number of idle messages the persona will send before giving up
2463
+ */
2464
+ idleMessageMaxSpokenCount: number;
2465
+
2466
+ /**
2467
+ * Whether the idle message counter resets when the agent speaks
2468
+ */
2469
+ idleMessageResetCountOnUserSpeechEnabled: boolean;
2470
+
2471
+ /**
2472
+ * Messages the persona will say when the agent goes silent during a call. null =
2473
+ * "Automatic": language-appropriate defaults are used at call time.
2474
+ */
2475
+ idleMessages: Array<string> | null;
2476
+
2477
+ /**
2478
+ * Seconds of silence before the persona sends an idle message
2479
+ */
2480
+ idleTimeoutSeconds: number;
2481
+
2482
+ /**
2483
+ * How clearly the persona expresses their intentions
2484
+ */
2485
+ intentClarity: 'CLEAR' | 'INDIRECT' | 'VAGUE';
2486
+
2487
+ /**
2488
+ * Primary language ISO 639-1 code for the persona
2489
+ */
2490
+ language:
2491
+ | 'EN'
2492
+ | 'ES'
2493
+ | 'DE'
2494
+ | 'HI'
2495
+ | 'FR'
2496
+ | 'NL'
2497
+ | 'AR'
2498
+ | 'EL'
2499
+ | 'IT'
2500
+ | 'ID'
2501
+ | 'TH'
2502
+ | 'JA'
2503
+ | 'TL'
2504
+ | 'MS'
2505
+ | 'ZH'
2506
+ | 'TR'
2507
+ | 'PT'
2508
+ | 'HE';
2509
+
2510
+ /**
2511
+ * How reliable the persona's memory is
2512
+ */
2513
+ memoryReliability: 'HIGH' | 'LOW';
2514
+
2515
+ /**
2516
+ * The name the agent will identify as during conversations
2517
+ */
2518
+ name: string;
2519
+
2520
+ /**
2521
+ * Additional custom properties about the persona
2522
+ */
2523
+ properties: { [key: string]: unknown };
2524
+
2525
+ /**
2526
+ * Controls how quickly the persona responds to pauses in conversation (QUICK,
2527
+ * NORMAL, RELAXED). BARGE_IN also talks over the agent once it has held the floor
2528
+ * for several seconds.
2529
+ */
2530
+ responseTiming: 'RELAXED' | 'NORMAL' | 'QUICK' | 'BARGE_IN';
2531
+
2532
+ /**
2533
+ * Speech clarity of the persona
2534
+ */
2535
+ speechClarity: 'CLEAR' | 'VAGUE' | 'RAMBLING';
2536
+
2537
+ /**
2538
+ * Speech pace of the persona
2539
+ */
2540
+ speechPace: 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST';
2541
+
2542
+ /**
2543
+ * Languages the persona can understand. Multilingual combinations are limited by
2544
+ * multilingual speech recognition support.
2545
+ */
2546
+ understoodLanguages: Array<
2547
+ | 'EN'
2548
+ | 'ES'
2549
+ | 'DE'
2550
+ | 'HI'
2551
+ | 'FR'
2552
+ | 'NL'
2553
+ | 'AR'
2554
+ | 'EL'
2555
+ | 'IT'
2556
+ | 'ID'
2557
+ | 'TH'
2558
+ | 'JA'
2559
+ | 'TL'
2560
+ | 'MS'
2561
+ | 'ZH'
2562
+ | 'TR'
2563
+ | 'PT'
2564
+ | 'HE'
2565
+ >;
2566
+
2567
+ /**
2568
+ * Last update timestamp
2569
+ */
2570
+ updatedAt: string;
2571
+
2572
+ /**
2573
+ * Background story and behavioral patterns for the persona
2574
+ */
2575
+ backstoryPrompt?: string | null;
2576
+
2577
+ /**
2578
+ * Human-readable description of the persona
2579
+ */
2580
+ description?: string | null;
2581
+
2582
+ /**
2583
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
2584
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
2585
+ * or set null to display the name itself.
2586
+ */
2587
+ displayName?: string | null;
2588
+
2589
+ /**
2590
+ * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
2591
+ */
2592
+ secondaryLanguage?: 'EN' | null;
2593
+ }
2594
+ }
2595
+ }
2596
+
2597
+ export interface CustomerFlowEdgeCasePromoteResponse {
2598
+ /**
2599
+ * One way of running a customer flow.
2600
+ */
2601
+ data:
2602
+ | CustomerFlowEdgeCasePromoteResponse.ScriptedFlowVariant
2603
+ | CustomerFlowEdgeCasePromoteResponse.ImprovFlowVariant
2604
+ | CustomerFlowEdgeCasePromoteResponse.VoicemailFlowVariant;
2605
+ }
2606
+
2607
+ export namespace CustomerFlowEdgeCasePromoteResponse {
2608
+ /**
2609
+ * One path through a scripted flow. The path engine owns which paths exist, so
2610
+ * editing the graph is what creates and removes these.
2611
+ */
2612
+ export interface ScriptedFlowVariant {
2613
+ id: string;
2614
+
2615
+ /**
2616
+ * Graded on top of the flow's own expectations, for this variant only.
2617
+ */
2618
+ additionalExpectations: Array<ScriptedFlowVariant.AdditionalExpectation>;
2619
+
2620
+ /**
2621
+ * Creation timestamp in ISO 8601 format
2622
+ */
2623
+ createdAt: string;
2624
+
2625
+ /**
2626
+ * A simulation environment: the ambient conditions a customer flow variant runs
2627
+ * under. The list includes both your own and the ones Roark curates for every
2628
+ * project.
2629
+ */
2630
+ environment: ScriptedFlowVariant.Environment | null;
2631
+
2632
+ isGenerated: boolean;
2633
+
2634
+ /**
2635
+ * The persona this runs as instead of the happy path's. Null means it inherits.
2636
+ */
2637
+ personaOverride: ScriptedFlowVariant.PersonaOverride | null;
2638
+
2639
+ precededByCustomerFlowId: string | null;
2640
+
2641
+ precededByCustomerFlowVariantId: string | null;
2642
+
2643
+ /**
2644
+ * The one path through the graph this variant runs, in order. Linear by
2645
+ * construction, so these steps never nest.
2646
+ */
2647
+ steps: Array<CustomerFlowAPI.FlowStep>;
2178
2648
 
2179
2649
  title: string;
2180
2650
 
@@ -2494,6 +2964,12 @@ export namespace CustomerFlowEdgeCasePromoteResponse {
2494
2964
  */
2495
2965
  environment: ImprovFlowVariant.Environment | null;
2496
2966
 
2967
+ /**
2968
+ * The personas this brief hands the phone to, in order of first mention. Empty
2969
+ * when the brief inherits the happy path's: read the happy path's list.
2970
+ */
2971
+ handoffPersonas: Array<ImprovFlowVariant.HandoffPersona>;
2972
+
2497
2973
  isGenerated: boolean;
2498
2974
 
2499
2975
  /**
@@ -2515,7 +2991,9 @@ export namespace CustomerFlowEdgeCasePromoteResponse {
2515
2991
  updatedAt: string;
2516
2992
 
2517
2993
  /**
2518
- * The brief the simulated customer improvises from.
2994
+ * The brief the simulated customer improvises from. A `@{persona:<id>}` mention
2995
+ * hands the phone to that persona mid-call; the sentences around the mention say
2996
+ * when.
2519
2997
  */
2520
2998
  prompt?: string | null;
2521
2999
 
@@ -2574,6 +3052,233 @@ export namespace CustomerFlowEdgeCasePromoteResponse {
2574
3052
  description?: string | null;
2575
3053
  }
2576
3054
 
3055
+ export interface HandoffPersona {
3056
+ /**
3057
+ * Unique identifier of the persona
3058
+ */
3059
+ id: string;
3060
+
3061
+ /**
3062
+ * Accent of the persona, defined using ISO 3166-1 alpha-2 country codes with
3063
+ * optional variants
3064
+ */
3065
+ accent:
3066
+ | 'US'
3067
+ | 'US_X_SOUTH'
3068
+ | 'GB'
3069
+ | 'ES'
3070
+ | 'DE'
3071
+ | 'IN'
3072
+ | 'FR'
3073
+ | 'NL'
3074
+ | 'SA'
3075
+ | 'GR'
3076
+ | 'AU'
3077
+ | 'IT'
3078
+ | 'ID'
3079
+ | 'TH'
3080
+ | 'JP'
3081
+ | 'NZ'
3082
+ | 'PH'
3083
+ | 'SG'
3084
+ | 'MY'
3085
+ | 'HK'
3086
+ | 'TR'
3087
+ | 'PT'
3088
+ | 'IL';
3089
+
3090
+ /**
3091
+ * How old the caller sounds and behaves. Only ages the persona's accent has a
3092
+ * voice for are accepted; defaults to ADULT, which every accent supports.
3093
+ */
3094
+ age: 'CHILD' | 'TEENAGER' | 'ADULT' | 'ELDERLY';
3095
+
3096
+ /**
3097
+ * Background noise setting
3098
+ */
3099
+ backgroundNoise:
3100
+ | 'NONE'
3101
+ | 'AIRPORT'
3102
+ | 'CHILDREN_PLAYING'
3103
+ | 'CITY'
3104
+ | 'COFFEE_SHOP'
3105
+ | 'CONSTRUCTION'
3106
+ | 'CRYING_BABY'
3107
+ | 'DRIVING'
3108
+ | 'LIBRARY'
3109
+ | 'OFFICE'
3110
+ | 'THUNDERSTORM'
3111
+ | 'TRAIN';
3112
+
3113
+ /**
3114
+ * Base emotional state of the persona
3115
+ */
3116
+ baseEmotion:
3117
+ | 'NEUTRAL'
3118
+ | 'CHEERFUL'
3119
+ | 'CONFUSED'
3120
+ | 'FRUSTRATED'
3121
+ | 'SKEPTICAL'
3122
+ | 'RUSHED'
3123
+ | 'DISTRACTED'
3124
+ | 'ANGRY'
3125
+ | 'ANXIOUS'
3126
+ | 'SAD';
3127
+
3128
+ /**
3129
+ * How the persona confirms information
3130
+ */
3131
+ confirmationStyle: 'EXPLICIT' | 'VAGUE';
3132
+
3133
+ /**
3134
+ * Creation timestamp
3135
+ */
3136
+ createdAt: string;
3137
+
3138
+ /**
3139
+ * Gender of the persona
3140
+ */
3141
+ gender: 'MALE' | 'FEMALE';
3142
+
3143
+ /**
3144
+ * Whether the persona uses filler words like "um" and "uh"
3145
+ */
3146
+ hasDisfluencies: boolean;
3147
+
3148
+ /**
3149
+ * Maximum number of idle messages the persona will send before giving up
3150
+ */
3151
+ idleMessageMaxSpokenCount: number;
3152
+
3153
+ /**
3154
+ * Whether the idle message counter resets when the agent speaks
3155
+ */
3156
+ idleMessageResetCountOnUserSpeechEnabled: boolean;
3157
+
3158
+ /**
3159
+ * Messages the persona will say when the agent goes silent during a call. null =
3160
+ * "Automatic": language-appropriate defaults are used at call time.
3161
+ */
3162
+ idleMessages: Array<string> | null;
3163
+
3164
+ /**
3165
+ * Seconds of silence before the persona sends an idle message
3166
+ */
3167
+ idleTimeoutSeconds: number;
3168
+
3169
+ /**
3170
+ * How clearly the persona expresses their intentions
3171
+ */
3172
+ intentClarity: 'CLEAR' | 'INDIRECT' | 'VAGUE';
3173
+
3174
+ /**
3175
+ * Primary language ISO 639-1 code for the persona
3176
+ */
3177
+ language:
3178
+ | 'EN'
3179
+ | 'ES'
3180
+ | 'DE'
3181
+ | 'HI'
3182
+ | 'FR'
3183
+ | 'NL'
3184
+ | 'AR'
3185
+ | 'EL'
3186
+ | 'IT'
3187
+ | 'ID'
3188
+ | 'TH'
3189
+ | 'JA'
3190
+ | 'TL'
3191
+ | 'MS'
3192
+ | 'ZH'
3193
+ | 'TR'
3194
+ | 'PT'
3195
+ | 'HE';
3196
+
3197
+ /**
3198
+ * How reliable the persona's memory is
3199
+ */
3200
+ memoryReliability: 'HIGH' | 'LOW';
3201
+
3202
+ /**
3203
+ * The name the agent will identify as during conversations
3204
+ */
3205
+ name: string;
3206
+
3207
+ /**
3208
+ * Additional custom properties about the persona
3209
+ */
3210
+ properties: { [key: string]: unknown };
3211
+
3212
+ /**
3213
+ * Controls how quickly the persona responds to pauses in conversation (QUICK,
3214
+ * NORMAL, RELAXED). BARGE_IN also talks over the agent once it has held the floor
3215
+ * for several seconds.
3216
+ */
3217
+ responseTiming: 'RELAXED' | 'NORMAL' | 'QUICK' | 'BARGE_IN';
3218
+
3219
+ /**
3220
+ * Speech clarity of the persona
3221
+ */
3222
+ speechClarity: 'CLEAR' | 'VAGUE' | 'RAMBLING';
3223
+
3224
+ /**
3225
+ * Speech pace of the persona
3226
+ */
3227
+ speechPace: 'SUPER_SLOW' | 'SLOW' | 'NORMAL' | 'FAST' | 'SUPER_FAST';
3228
+
3229
+ /**
3230
+ * Languages the persona can understand. Multilingual combinations are limited by
3231
+ * multilingual speech recognition support.
3232
+ */
3233
+ understoodLanguages: Array<
3234
+ | 'EN'
3235
+ | 'ES'
3236
+ | 'DE'
3237
+ | 'HI'
3238
+ | 'FR'
3239
+ | 'NL'
3240
+ | 'AR'
3241
+ | 'EL'
3242
+ | 'IT'
3243
+ | 'ID'
3244
+ | 'TH'
3245
+ | 'JA'
3246
+ | 'TL'
3247
+ | 'MS'
3248
+ | 'ZH'
3249
+ | 'TR'
3250
+ | 'PT'
3251
+ | 'HE'
3252
+ >;
3253
+
3254
+ /**
3255
+ * Last update timestamp
3256
+ */
3257
+ updatedAt: string;
3258
+
3259
+ /**
3260
+ * Background story and behavioral patterns for the persona
3261
+ */
3262
+ backstoryPrompt?: string | null;
3263
+
3264
+ /**
3265
+ * Human-readable description of the persona
3266
+ */
3267
+ description?: string | null;
3268
+
3269
+ /**
3270
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
3271
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
3272
+ * or set null to display the name itself.
3273
+ */
3274
+ displayName?: string | null;
3275
+
3276
+ /**
3277
+ * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
3278
+ */
3279
+ secondaryLanguage?: 'EN' | null;
3280
+ }
3281
+
2577
3282
  /**
2578
3283
  * The persona this runs as instead of the happy path's. Null means it inherits.
2579
3284
  */