@opencx/mcp 1.15.24 → 1.15.26
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.
- package/dist/campaign-tools.spec.js +2 -0
- package/dist/campaign-tools.spec.js.map +1 -1
- package/dist/salesforce-ai-reply-templates.spec.js +58 -0
- package/dist/salesforce-ai-reply-templates.spec.js.map +1 -1
- package/dist/schema.d.ts +727 -129
- package/dist/schema.d.ts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/campaign-spine.d.ts.map +1 -1
- package/dist/tools/campaign-spine.js +58 -0
- package/dist/tools/campaign-spine.js.map +1 -1
- package/dist/tools/custom-statuses.d.ts +4 -0
- package/dist/tools/custom-statuses.d.ts.map +1 -0
- package/dist/tools/custom-statuses.js +107 -0
- package/dist/tools/custom-statuses.js.map +1 -0
- package/dist/tools/salesforce-ai-reply-templates.d.ts.map +1 -1
- package/dist/tools/salesforce-ai-reply-templates.js +19 -5
- package/dist/tools/salesforce-ai-reply-templates.js.map +1 -1
- package/dist/tools/sessions.d.ts.map +1 -1
- package/dist/tools/sessions.js +31 -0
- package/dist/tools/sessions.js.map +1 -1
- package/package.json +1 -1
package/dist/schema.d.ts
CHANGED
|
@@ -471,6 +471,30 @@ export interface paths {
|
|
|
471
471
|
patch?: never;
|
|
472
472
|
trace?: never;
|
|
473
473
|
};
|
|
474
|
+
"/chat/sessions/{session_id}/sub-status": {
|
|
475
|
+
parameters: {
|
|
476
|
+
query?: never;
|
|
477
|
+
header?: never;
|
|
478
|
+
path?: never;
|
|
479
|
+
cookie?: never;
|
|
480
|
+
};
|
|
481
|
+
get?: never;
|
|
482
|
+
/**
|
|
483
|
+
* Set the custom status of a chat session
|
|
484
|
+
* @description Apply a custom status (see GET /custom-statuses) to the session. The session moves to the custom status's built-in parent: an open-parented status reopens a closed session, a closed-parented one closes it, with the same side effects as the dashboard (timeline events, ticketing-system sync, workflow triggers). Replaces any custom status already on the session.
|
|
485
|
+
*/
|
|
486
|
+
put: operations["setChatSessionSubStatus"];
|
|
487
|
+
post?: never;
|
|
488
|
+
/**
|
|
489
|
+
* Clear the custom status of a chat session
|
|
490
|
+
* @description Remove the custom status from the session. The built-in status (open / closed_resolved / closed_unresolved) is left exactly as it is, so clearing on a closed session does not reopen or re-close it. To change the built-in status use PATCH /chat/sessions/{session_id}.
|
|
491
|
+
*/
|
|
492
|
+
delete: operations["clearChatSessionSubStatus"];
|
|
493
|
+
options?: never;
|
|
494
|
+
head?: never;
|
|
495
|
+
patch?: never;
|
|
496
|
+
trace?: never;
|
|
497
|
+
};
|
|
474
498
|
"/chat/sessions/{session_id}/send": {
|
|
475
499
|
parameters: {
|
|
476
500
|
query?: never;
|
|
@@ -2237,6 +2261,58 @@ export interface paths {
|
|
|
2237
2261
|
patch?: never;
|
|
2238
2262
|
trace?: never;
|
|
2239
2263
|
};
|
|
2264
|
+
"/custom-statuses": {
|
|
2265
|
+
parameters: {
|
|
2266
|
+
query?: never;
|
|
2267
|
+
header?: never;
|
|
2268
|
+
path?: never;
|
|
2269
|
+
cookie?: never;
|
|
2270
|
+
};
|
|
2271
|
+
/**
|
|
2272
|
+
* List custom statuses
|
|
2273
|
+
* @description List every custom session status defined for your organization. A custom status refines one of the built-in statuses (open, closed_resolved, closed_unresolved) with an agent-facing name and optional customer-facing label, color, and icon. A session carries at most one custom status in its `sub_status_id`; use this list to resolve that id to a name.
|
|
2274
|
+
*/
|
|
2275
|
+
get: operations["listCustomStatuses"];
|
|
2276
|
+
put?: never;
|
|
2277
|
+
/**
|
|
2278
|
+
* Create a custom status
|
|
2279
|
+
* @description Create a custom session status under one of the built-in statuses. Names are unique per organization. Once created, apply it to a session with `PUT /chat/sessions/{session_id}/sub-status`.
|
|
2280
|
+
*/
|
|
2281
|
+
post: operations["createCustomStatus"];
|
|
2282
|
+
delete?: never;
|
|
2283
|
+
options?: never;
|
|
2284
|
+
head?: never;
|
|
2285
|
+
patch?: never;
|
|
2286
|
+
trace?: never;
|
|
2287
|
+
};
|
|
2288
|
+
"/custom-statuses/{id}": {
|
|
2289
|
+
parameters: {
|
|
2290
|
+
query?: never;
|
|
2291
|
+
header?: never;
|
|
2292
|
+
path?: never;
|
|
2293
|
+
cookie?: never;
|
|
2294
|
+
};
|
|
2295
|
+
/**
|
|
2296
|
+
* Get a custom status
|
|
2297
|
+
* @description Fetch one custom session status by id.
|
|
2298
|
+
*/
|
|
2299
|
+
get: operations["getCustomStatus"];
|
|
2300
|
+
put?: never;
|
|
2301
|
+
post?: never;
|
|
2302
|
+
/**
|
|
2303
|
+
* Delete a custom status
|
|
2304
|
+
* @description Delete a custom status. Sessions that carried it fall back to their built-in status (`sub_status_id` becomes null); their timeline history keeps the id.
|
|
2305
|
+
*/
|
|
2306
|
+
delete: operations["deleteCustomStatus"];
|
|
2307
|
+
options?: never;
|
|
2308
|
+
head?: never;
|
|
2309
|
+
/**
|
|
2310
|
+
* Update a custom status
|
|
2311
|
+
* @description Update any subset of a custom status. Omitted fields are left unchanged; the nullable display fields accept null to clear them. Sessions already carrying this status keep it.
|
|
2312
|
+
*/
|
|
2313
|
+
patch: operations["updateCustomStatus"];
|
|
2314
|
+
trace?: never;
|
|
2315
|
+
};
|
|
2240
2316
|
"/workflows/definitions": {
|
|
2241
2317
|
parameters: {
|
|
2242
2318
|
query?: never;
|
|
@@ -3016,6 +3092,46 @@ export interface paths {
|
|
|
3016
3092
|
patch: operations["updateSequence"];
|
|
3017
3093
|
trace?: never;
|
|
3018
3094
|
};
|
|
3095
|
+
"/sequences/{sequenceId}/replies": {
|
|
3096
|
+
parameters: {
|
|
3097
|
+
query?: never;
|
|
3098
|
+
header?: never;
|
|
3099
|
+
path?: never;
|
|
3100
|
+
cookie?: never;
|
|
3101
|
+
};
|
|
3102
|
+
/**
|
|
3103
|
+
* List the most recent replies to a sequence
|
|
3104
|
+
* @description Who answered, newest first, with the inbox session each reply started. Each reply carries a short preview of what the contact said — but only for a key that may read conversations (chat-sessions:read); without it the preview is null.
|
|
3105
|
+
*/
|
|
3106
|
+
get: operations["listSequenceReplies"];
|
|
3107
|
+
put?: never;
|
|
3108
|
+
post?: never;
|
|
3109
|
+
delete?: never;
|
|
3110
|
+
options?: never;
|
|
3111
|
+
head?: never;
|
|
3112
|
+
patch?: never;
|
|
3113
|
+
trace?: never;
|
|
3114
|
+
};
|
|
3115
|
+
"/sequences/{sequenceId}/stats": {
|
|
3116
|
+
parameters: {
|
|
3117
|
+
query?: never;
|
|
3118
|
+
header?: never;
|
|
3119
|
+
path?: never;
|
|
3120
|
+
cookie?: never;
|
|
3121
|
+
};
|
|
3122
|
+
/**
|
|
3123
|
+
* Get an outbound sequence's numbers
|
|
3124
|
+
* @description How many people are enrolled, how many a launch would reach, how many have been contacted, how many answered, how many will never be reached, and how many are waiting on a human. The last two also name the people themselves, so the caller can act on them. The same rollup the list rows carry, addressed singly — every surface reads these through one implementation.
|
|
3125
|
+
*/
|
|
3126
|
+
get: operations["getSequenceStats"];
|
|
3127
|
+
put?: never;
|
|
3128
|
+
post?: never;
|
|
3129
|
+
delete?: never;
|
|
3130
|
+
options?: never;
|
|
3131
|
+
head?: never;
|
|
3132
|
+
patch?: never;
|
|
3133
|
+
trace?: never;
|
|
3134
|
+
};
|
|
3019
3135
|
"/sequences/{sequenceId}/steps": {
|
|
3020
3136
|
parameters: {
|
|
3021
3137
|
query?: never;
|
|
@@ -5279,7 +5395,7 @@ export interface paths {
|
|
|
5279
5395
|
};
|
|
5280
5396
|
/**
|
|
5281
5397
|
* Search connected orgs with health signals (paginated)
|
|
5282
|
-
* @description Find, filter, sort and page through the calling partner's connected orgs (its customers), each with the health signals the Partner Admin console shows: `health.status` — `new` (connected < 7 days, no sessions yet), `setup_incomplete` (no knowledge sources and no actions), `inactive` (no session in the last 30 days), `healthy` (everything else) — plus `members`, `data_sources`, `has_ai_training`, `has_actions`, `sessions_30d`, `total_sessions`, `last_session_at`, and per-channel connected flags (`chat`, `email`, `whatsapp`, `voice`). `q` matches name or external_id; `status`, `tags` and `
|
|
5398
|
+
* @description Find, filter, sort and page through the calling partner's connected orgs (its customers), each with the health signals the Partner Admin console shows: `health.status` — `new` (connected < 7 days, no sessions yet), `setup_incomplete` (no knowledge sources and no actions), `inactive` (no session in the last 30 days), `healthy` (everything else) — plus `members`, `data_sources`, `has_ai_training`, `has_actions`, `sessions_30d`, `total_sessions`, `last_session_at`, and per-channel connected flags (`chat`, `email`, `whatsapp`, `instagram`, `messenger`, `sms`, `voice`). `q` matches name or external_id; `status`, `tags`, `channels` and `addons` are comma-separated (tags match ANY, channels and add-ons match ALL; add-ons are `fareharbor`, `shopify`, `jira`); `has_ai` / `has_actions` are 'true' / 'false'; `archived=only` lists the partner's archived orgs, which are hidden unless asked for. Max 100 rows per page (`limit`/`offset`); `total` is the filtered count. For volume, quality and behaviour beyond these signals use `runPartnerAnalyticsQuery`; for the full id → name roster use `listPartnerOrgs`. Only available to partner admin organizations (403 otherwise).
|
|
5283
5399
|
*/
|
|
5284
5400
|
get: operations["searchPartnerOrgs"];
|
|
5285
5401
|
put?: never;
|
|
@@ -5453,7 +5569,7 @@ export interface paths {
|
|
|
5453
5569
|
put?: never;
|
|
5454
5570
|
/**
|
|
5455
5571
|
* Create an AI reply template
|
|
5456
|
-
* @description Create a reply template (Salesforce v2 integration only). The organization's first template becomes the default automatically; `is_default: true` on a later one moves the default atomically. Template HTML. Put {{content}} where the AI agent's reply goes (anything above is the greeting, anything below the signature); without it the template is appended below the reply. Variables: system objects {{contact.full_name}} / {{contact.first_name}} / {{contact.email}} / {{session.number}} / {{session.language}} / {{org.name}} (HTML-escaped) and any session attribute such as {{sf_case_Regards__c}} (inserted raw — Salesforce formula fields hold HTML fragments — then sanitized). {{#if sf_case_Language__c == "de"}}…{{else}}…{{/if}} conditions are supported. Scripts, handlers and non-https images are stripped; {{content}} may appear at most once. Optional `rules` (ANDed attribute/tag conditions) make the template pick itself for matching sessions; the first matching rule-bearing template in creation order wins, otherwise the default.
|
|
5572
|
+
* @description Create a reply template (Salesforce v2 integration only). The organization's first template becomes the default automatically; `is_default: true` on a later one moves the default atomically. Template HTML. Put {{content}} where the AI agent's reply goes (anything above is the greeting, anything below the signature); without it the template is appended below the reply. Variables: system objects {{contact.full_name}} / {{contact.first_name}} / {{contact.email}} / {{session.number}} / {{session.language}} / {{org.name}} (HTML-escaped) and any session attribute such as {{sf_case_Regards__c}} (inserted raw — Salesforce formula fields hold HTML fragments — then sanitized). {{#if sf_case_Language__c == "de"}}…{{else}}…{{/if}} conditions are supported. Scripts, handlers and non-https images are stripped; {{content}} may appear at most once. Optional `rules` (ANDed attribute/tag conditions) make the template pick itself for matching sessions; the first matching rule-bearing template in creation order wins, otherwise the default. Optional `from_address` / `to_address` set the From and To of the autopilot email per session: a literal address, a {{session attribute}} (e.g. {{sf_case_LatestPOSEmail__c}} as From, {{reservation_email}} as To) or an {{#if …}} branch. Each is used only when it resolves to an email address on that session; otherwise the From stays Salesforce's default sender and the To stays the Case contact. A literal that is not an email address is rejected with 400. Combine with `rules` to use different addresses for different sessions.
|
|
5457
5573
|
*/
|
|
5458
5574
|
post: operations["createSalesforceAiReplyTemplate"];
|
|
5459
5575
|
delete?: never;
|
|
@@ -5481,7 +5597,7 @@ export interface paths {
|
|
|
5481
5597
|
head?: never;
|
|
5482
5598
|
/**
|
|
5483
5599
|
* Update an AI reply template
|
|
5484
|
-
* @description Partially update a reply template: name, template_html, is_default (true moves the default onto it), rules (null clears them). Template HTML. Put {{content}} where the AI agent's reply goes (anything above is the greeting, anything below the signature); without it the template is appended below the reply. Variables: system objects {{contact.full_name}} / {{contact.first_name}} / {{contact.email}} / {{session.number}} / {{session.language}} / {{org.name}} (HTML-escaped) and any session attribute such as {{sf_case_Regards__c}} (inserted raw — Salesforce formula fields hold HTML fragments — then sanitized). {{#if sf_case_Language__c == "de"}}…{{else}}…{{/if}} conditions are supported. Scripts, handlers and non-https images are stripped; {{content}} may appear at most once.
|
|
5600
|
+
* @description Partially update a reply template: name, template_html, is_default (true moves the default onto it), rules (null clears them), from_address / to_address (null clears them). Template HTML. Put {{content}} where the AI agent's reply goes (anything above is the greeting, anything below the signature); without it the template is appended below the reply. Variables: system objects {{contact.full_name}} / {{contact.first_name}} / {{contact.email}} / {{session.number}} / {{session.language}} / {{org.name}} (HTML-escaped) and any session attribute such as {{sf_case_Regards__c}} (inserted raw — Salesforce formula fields hold HTML fragments — then sanitized). {{#if sf_case_Language__c == "de"}}…{{else}}…{{/if}} conditions are supported. Scripts, handlers and non-https images are stripped; {{content}} may appear at most once. Optional `from_address` / `to_address` set the From and To of the autopilot email per session: a literal address, a {{session attribute}} (e.g. {{sf_case_LatestPOSEmail__c}} as From, {{reservation_email}} as To) or an {{#if …}} branch. Each is used only when it resolves to an email address on that session; otherwise the From stays Salesforce's default sender and the To stays the Case contact. A literal that is not an email address is rejected with 400. Combine with `rules` to use different addresses for different sessions.
|
|
5485
5601
|
*/
|
|
5486
5602
|
patch: operations["updateSalesforceAiReplyTemplate"];
|
|
5487
5603
|
trace?: never;
|
|
@@ -5497,7 +5613,7 @@ export interface paths {
|
|
|
5497
5613
|
put?: never;
|
|
5498
5614
|
/**
|
|
5499
5615
|
* Preview an AI reply template
|
|
5500
|
-
* @description Render a template (saved or not) exactly as the AI agent would send it, against a real session of the organization: the session with `session_number`, else the most recent Salesforce-linked session, else an empty context. Returns the rendered HTML and text, the session used,
|
|
5616
|
+
* @description Render a template (saved or not) exactly as the AI agent would send it, against a real session of the organization: the session with `session_number`, else the most recent Salesforce-linked session, else an empty context. Returns the rendered HTML and text, the session used, the variables that came out empty, and — when `from_address` / `to_address` are passed — the From and To the AI would use on that session (null = the default applies). Requires the write scope because it resolves real contact data.
|
|
5501
5617
|
*/
|
|
5502
5618
|
post: operations["previewSalesforceAiReplyTemplate"];
|
|
5503
5619
|
delete?: never;
|
|
@@ -5781,16 +5897,28 @@ export interface components {
|
|
|
5781
5897
|
template_html: string;
|
|
5782
5898
|
is_default?: boolean;
|
|
5783
5899
|
rules?: components["schemas"]["SalesforceReplyTemplateRules"] | null;
|
|
5900
|
+
/** @description From address of the AI agent's autopilot Case email: a literal address, a {{session attribute}} such as {{sf_case_LatestPOSEmail__c}}, or an {{#if …}} branch, resolved per session. Used only when it resolves to an email address; otherwise Salesforce's default sender applies. Empty or null clears it. */
|
|
5901
|
+
from_address?: string | null;
|
|
5902
|
+
/** @description To address of the AI agent's autopilot Case email: a literal address, a {{session attribute}} such as {{reservation_email}}, or an {{#if …}} branch, resolved per session. Used only when it resolves to an email address; otherwise the Case contact's address applies. Empty or null clears it. */
|
|
5903
|
+
to_address?: string | null;
|
|
5784
5904
|
};
|
|
5785
5905
|
UpdateSalesforceAiReplyTemplateDto: {
|
|
5786
5906
|
name?: string;
|
|
5787
5907
|
template_html?: string;
|
|
5788
5908
|
is_default?: boolean;
|
|
5789
5909
|
rules?: components["schemas"]["SalesforceReplyTemplateRules"] | null;
|
|
5910
|
+
/** @description From address of the AI agent's autopilot Case email: a literal address, a {{session attribute}} such as {{sf_case_LatestPOSEmail__c}}, or an {{#if …}} branch, resolved per session. Used only when it resolves to an email address; otherwise Salesforce's default sender applies. Empty or null clears it. */
|
|
5911
|
+
from_address?: string | null;
|
|
5912
|
+
/** @description To address of the AI agent's autopilot Case email: a literal address, a {{session attribute}} such as {{reservation_email}}, or an {{#if …}} branch, resolved per session. Used only when it resolves to an email address; otherwise the Case contact's address applies. Empty or null clears it. */
|
|
5913
|
+
to_address?: string | null;
|
|
5790
5914
|
};
|
|
5791
5915
|
PreviewSalesforceAiReplyTemplateDto: {
|
|
5792
5916
|
template_html: string;
|
|
5793
5917
|
session_number?: number;
|
|
5918
|
+
/** @description From address of the AI agent's autopilot Case email: a literal address, a {{session attribute}} such as {{sf_case_LatestPOSEmail__c}}, or an {{#if …}} branch, resolved per session. Used only when it resolves to an email address; otherwise Salesforce's default sender applies. Empty or null clears it. */
|
|
5919
|
+
from_address?: string | null;
|
|
5920
|
+
/** @description To address of the AI agent's autopilot Case email: a literal address, a {{session attribute}} such as {{reservation_email}}, or an {{#if …}} branch, resolved per session. Used only when it resolves to an email address; otherwise the Case contact's address applies. Empty or null clears it. */
|
|
5921
|
+
to_address?: string | null;
|
|
5794
5922
|
};
|
|
5795
5923
|
CreateSlaPolicyDto: {
|
|
5796
5924
|
name: string;
|
|
@@ -5818,6 +5946,31 @@ export interface components {
|
|
|
5818
5946
|
/** Format: binary */
|
|
5819
5947
|
file: string;
|
|
5820
5948
|
} | null;
|
|
5949
|
+
/** @enum {string} */
|
|
5950
|
+
PhoneHandoffReason: "ai_initiated" | "no_agent_assigned" | "agent_unavailable" | "caller_requested" | "timeout" | "unknown";
|
|
5951
|
+
/** @enum {string} */
|
|
5952
|
+
StructuredFieldTypeDto: "enum" | "text" | "number" | "boolean" | "date" | "user" | "team" | "tag";
|
|
5953
|
+
CreateStructuredFieldDto: {
|
|
5954
|
+
key: string;
|
|
5955
|
+
name: string;
|
|
5956
|
+
description: string;
|
|
5957
|
+
type?: components["schemas"]["StructuredFieldTypeDto"];
|
|
5958
|
+
};
|
|
5959
|
+
UpdateStructuredFieldDto: {
|
|
5960
|
+
name?: string;
|
|
5961
|
+
description?: string;
|
|
5962
|
+
};
|
|
5963
|
+
CreateStructuredFieldVariantDto: {
|
|
5964
|
+
value: string;
|
|
5965
|
+
variant_display_name: string;
|
|
5966
|
+
variant_description: string;
|
|
5967
|
+
parent_id?: string | null;
|
|
5968
|
+
};
|
|
5969
|
+
UpdateStructuredFieldVariantDto: {
|
|
5970
|
+
variant_display_name?: string;
|
|
5971
|
+
variant_description?: string;
|
|
5972
|
+
parent_id?: string | null;
|
|
5973
|
+
};
|
|
5821
5974
|
CompanyOwnerInput: {
|
|
5822
5975
|
/** @description OpenCX user id of the owning teammate */
|
|
5823
5976
|
id?: number;
|
|
@@ -5921,29 +6074,6 @@ export interface components {
|
|
|
5921
6074
|
/** @description Subject line for the custom CSAT request email. Null falls back to the default. */
|
|
5922
6075
|
email_template_subject?: string | null;
|
|
5923
6076
|
};
|
|
5924
|
-
/** @enum {string} */
|
|
5925
|
-
StructuredFieldTypeDto: "enum" | "text" | "number" | "boolean" | "date" | "user" | "team" | "tag";
|
|
5926
|
-
CreateStructuredFieldDto: {
|
|
5927
|
-
key: string;
|
|
5928
|
-
name: string;
|
|
5929
|
-
description: string;
|
|
5930
|
-
type?: components["schemas"]["StructuredFieldTypeDto"];
|
|
5931
|
-
};
|
|
5932
|
-
UpdateStructuredFieldDto: {
|
|
5933
|
-
name?: string;
|
|
5934
|
-
description?: string;
|
|
5935
|
-
};
|
|
5936
|
-
CreateStructuredFieldVariantDto: {
|
|
5937
|
-
value: string;
|
|
5938
|
-
variant_display_name: string;
|
|
5939
|
-
variant_description: string;
|
|
5940
|
-
parent_id?: string | null;
|
|
5941
|
-
};
|
|
5942
|
-
UpdateStructuredFieldVariantDto: {
|
|
5943
|
-
variant_display_name?: string;
|
|
5944
|
-
variant_description?: string;
|
|
5945
|
-
parent_id?: string | null;
|
|
5946
|
-
};
|
|
5947
6077
|
CreateEmailTemplateBodyDto: {
|
|
5948
6078
|
body: string;
|
|
5949
6079
|
name: string;
|
|
@@ -6023,8 +6153,6 @@ export interface components {
|
|
|
6023
6153
|
/** @description Extra instructions for the AI agent, scoped to this call only. Appended to the agent instructions in a clearly-scoped block — they complement, never replace, the agent prompt. */
|
|
6024
6154
|
extraInstructions?: string;
|
|
6025
6155
|
};
|
|
6026
|
-
/** @enum {string} */
|
|
6027
|
-
PhoneHandoffReason: "ai_initiated" | "no_agent_assigned" | "agent_unavailable" | "caller_requested" | "timeout" | "unknown";
|
|
6028
6156
|
RedactMessageDto: {
|
|
6029
6157
|
/** @description The message UUID to be redacted */
|
|
6030
6158
|
messageId: string;
|
|
@@ -6789,6 +6917,56 @@ export interface components {
|
|
|
6789
6917
|
/** @description MIME type of the file (e.g., "image/png", "application/pdf"). Optional if using data URL format or if type can be detected from file content. */
|
|
6790
6918
|
mime_type?: string;
|
|
6791
6919
|
};
|
|
6920
|
+
PublicContactsFilter: {
|
|
6921
|
+
/** @constant */
|
|
6922
|
+
type: "all_contacts";
|
|
6923
|
+
} | {
|
|
6924
|
+
/** @constant */
|
|
6925
|
+
type: "contact_id_in";
|
|
6926
|
+
contact_ids: string[];
|
|
6927
|
+
} | {
|
|
6928
|
+
/** @constant */
|
|
6929
|
+
type: "contacts_created_at_between";
|
|
6930
|
+
after?: unknown;
|
|
6931
|
+
before?: unknown;
|
|
6932
|
+
} | {
|
|
6933
|
+
/** @constant */
|
|
6934
|
+
type: "contacts_email_domain_name_in";
|
|
6935
|
+
domain_name_in: string[];
|
|
6936
|
+
} | {
|
|
6937
|
+
/** @constant */
|
|
6938
|
+
type: "contacts_name_in";
|
|
6939
|
+
name_in: string[];
|
|
6940
|
+
} | {
|
|
6941
|
+
/** @constant */
|
|
6942
|
+
type: "contacts_phone_number_in";
|
|
6943
|
+
/** @description Full phone numbers, matched exactly on digits (formatting like +, spaces, and dashes is ignored). Use * inside an entry for partial/substring matching. */
|
|
6944
|
+
phone_number_in: string[];
|
|
6945
|
+
} | {
|
|
6946
|
+
/** @constant */
|
|
6947
|
+
type: "contacts_email_in";
|
|
6948
|
+
email_in: string[];
|
|
6949
|
+
} | {
|
|
6950
|
+
/** @constant */
|
|
6951
|
+
type: "contacts_attributes_in";
|
|
6952
|
+
attributes?: {
|
|
6953
|
+
[key: string]: string;
|
|
6954
|
+
}[];
|
|
6955
|
+
} | {
|
|
6956
|
+
/** @constant */
|
|
6957
|
+
type: "contacts_affected_by_sequence";
|
|
6958
|
+
sequence_id: string;
|
|
6959
|
+
} | {
|
|
6960
|
+
/** @constant */
|
|
6961
|
+
type: "last_contacted_at_between";
|
|
6962
|
+
after?: unknown;
|
|
6963
|
+
before?: unknown;
|
|
6964
|
+
};
|
|
6965
|
+
PublicContactsCompositeFilter: {
|
|
6966
|
+
or: {
|
|
6967
|
+
and: components["schemas"]["PublicContactsFilter"][];
|
|
6968
|
+
}[];
|
|
6969
|
+
};
|
|
6792
6970
|
PublicAPIHttpOverrides: {
|
|
6793
6971
|
query_params?: {
|
|
6794
6972
|
[key: string]: string;
|
|
@@ -6842,56 +7020,6 @@ export interface components {
|
|
|
6842
7020
|
http_action_overrides?: components["schemas"]["PublicAPIHttpOverrides"];
|
|
6843
7021
|
};
|
|
6844
7022
|
};
|
|
6845
|
-
PublicContactsFilter: {
|
|
6846
|
-
/** @constant */
|
|
6847
|
-
type: "all_contacts";
|
|
6848
|
-
} | {
|
|
6849
|
-
/** @constant */
|
|
6850
|
-
type: "contact_id_in";
|
|
6851
|
-
contact_ids: string[];
|
|
6852
|
-
} | {
|
|
6853
|
-
/** @constant */
|
|
6854
|
-
type: "contacts_created_at_between";
|
|
6855
|
-
after?: unknown;
|
|
6856
|
-
before?: unknown;
|
|
6857
|
-
} | {
|
|
6858
|
-
/** @constant */
|
|
6859
|
-
type: "contacts_email_domain_name_in";
|
|
6860
|
-
domain_name_in: string[];
|
|
6861
|
-
} | {
|
|
6862
|
-
/** @constant */
|
|
6863
|
-
type: "contacts_name_in";
|
|
6864
|
-
name_in: string[];
|
|
6865
|
-
} | {
|
|
6866
|
-
/** @constant */
|
|
6867
|
-
type: "contacts_phone_number_in";
|
|
6868
|
-
/** @description Full phone numbers, matched exactly on digits (formatting like +, spaces, and dashes is ignored). Use * inside an entry for partial/substring matching. */
|
|
6869
|
-
phone_number_in: string[];
|
|
6870
|
-
} | {
|
|
6871
|
-
/** @constant */
|
|
6872
|
-
type: "contacts_email_in";
|
|
6873
|
-
email_in: string[];
|
|
6874
|
-
} | {
|
|
6875
|
-
/** @constant */
|
|
6876
|
-
type: "contacts_attributes_in";
|
|
6877
|
-
attributes?: {
|
|
6878
|
-
[key: string]: string;
|
|
6879
|
-
}[];
|
|
6880
|
-
} | {
|
|
6881
|
-
/** @constant */
|
|
6882
|
-
type: "contacts_affected_by_sequence";
|
|
6883
|
-
sequence_id: string;
|
|
6884
|
-
} | {
|
|
6885
|
-
/** @constant */
|
|
6886
|
-
type: "last_contacted_at_between";
|
|
6887
|
-
after?: unknown;
|
|
6888
|
-
before?: unknown;
|
|
6889
|
-
};
|
|
6890
|
-
PublicContactsCompositeFilter: {
|
|
6891
|
-
or: {
|
|
6892
|
-
and: components["schemas"]["PublicContactsFilter"][];
|
|
6893
|
-
}[];
|
|
6894
|
-
};
|
|
6895
7023
|
SearchContactsInput: {
|
|
6896
7024
|
filter: components["schemas"]["PublicContactsCompositeFilter"];
|
|
6897
7025
|
/** @description Pagination cursor to fetch the next set of results */
|
|
@@ -7015,8 +7143,10 @@ export interface components {
|
|
|
7015
7143
|
};
|
|
7016
7144
|
/** @description Filter by channels (web, email, whatsapp, phone_voice, sms, slack, etc.) */
|
|
7017
7145
|
channels?: components["schemas"]["SessionChannel"][];
|
|
7018
|
-
/** @description Filter by status codes (0 = open, 1 = closed_resolved, 2 = closed_unresolved
|
|
7146
|
+
/** @description Filter by built-in status codes (0 = open, 1 = closed_resolved, 2 = closed_unresolved) */
|
|
7019
7147
|
status?: number[];
|
|
7148
|
+
/** @description Filter by custom status ids (sessions whose `sub_status_id` is any of these). Ids come from GET /custom-statuses. An empty array applies no filter, like the other array filters here. */
|
|
7149
|
+
sub_status_ids?: string[];
|
|
7020
7150
|
/** @description Filter by AI closure type (e.g. "handed_off", "resolved", "no_resolution") */
|
|
7021
7151
|
ai_closure?: ("assumed_resolved" | "handed_off" | "resolved")[];
|
|
7022
7152
|
/** @description Filter by customer sentiment (angry, happy, neutral) */
|
|
@@ -7157,6 +7287,44 @@ export interface components {
|
|
|
7157
7287
|
end_time: string;
|
|
7158
7288
|
}[];
|
|
7159
7289
|
};
|
|
7290
|
+
CreateCustomStatusDto: {
|
|
7291
|
+
/** @description Internal name shown to agents in the inbox (unique per organization, 1-100 chars) */
|
|
7292
|
+
name: string;
|
|
7293
|
+
/** @description Internal note for agents on when to use this status. Never shown to customers. */
|
|
7294
|
+
description?: string;
|
|
7295
|
+
/**
|
|
7296
|
+
* @description Built-in status this custom status refines: "open", "closed_resolved", or "closed_unresolved". Applying the custom status to a session moves the session to this built-in status, so an "open"-parented status reopens a closed session and a "closed_*"-parented one closes it.
|
|
7297
|
+
* @enum {string}
|
|
7298
|
+
*/
|
|
7299
|
+
parent_status: "closed_resolved" | "closed_unresolved" | "open";
|
|
7300
|
+
/** @description Customer-facing label (max 100 chars). Falls back to `name` when omitted. */
|
|
7301
|
+
display_name?: string;
|
|
7302
|
+
/** @description Customer-facing explanation. No fallback: when omitted, customers see no description. */
|
|
7303
|
+
display_description?: string;
|
|
7304
|
+
/** @description Badge color as #RRGGBB. Omit to inherit the parent status color. */
|
|
7305
|
+
color?: string;
|
|
7306
|
+
/** @description Inline SVG markup for the badge icon (sanitized server-side, max 10,000 chars). Omit for the default icon. */
|
|
7307
|
+
icon?: string;
|
|
7308
|
+
};
|
|
7309
|
+
UpdateCustomStatusPublicDto: {
|
|
7310
|
+
/** @description Internal name shown to agents (unique per organization, 1-100 chars) */
|
|
7311
|
+
name?: string;
|
|
7312
|
+
/** @description Internal note for agents on when to use this status */
|
|
7313
|
+
description?: string;
|
|
7314
|
+
/**
|
|
7315
|
+
* @description Built-in status this custom status refines: "open", "closed_resolved", or "closed_unresolved". Applying the custom status to a session moves the session to this built-in status, so an "open"-parented status reopens a closed session and a "closed_*"-parented one closes it. Moving a status across the open/closed boundary drops its ticketing-system stage mappings.
|
|
7316
|
+
* @enum {string}
|
|
7317
|
+
*/
|
|
7318
|
+
parent_status?: "closed_resolved" | "closed_unresolved" | "open";
|
|
7319
|
+
/** @description Customer-facing label (max 100 chars). null clears it back to `name`; omit to leave unchanged. */
|
|
7320
|
+
display_name?: string | null;
|
|
7321
|
+
/** @description Customer-facing explanation. null clears it; omit to leave unchanged. */
|
|
7322
|
+
display_description?: string | null;
|
|
7323
|
+
/** @description Badge color as #RRGGBB. null restores the parent status color; omit to leave unchanged. */
|
|
7324
|
+
color?: string | null;
|
|
7325
|
+
/** @description Inline SVG markup for the badge icon. null restores the default icon; omit to leave unchanged. */
|
|
7326
|
+
icon?: string | null;
|
|
7327
|
+
};
|
|
7160
7328
|
CreateWorkflowPublicInput: {
|
|
7161
7329
|
/** @description Workflow name */
|
|
7162
7330
|
name: string;
|
|
@@ -7227,6 +7395,11 @@ export interface components {
|
|
|
7227
7395
|
type?: "inbound" | "outbound";
|
|
7228
7396
|
/** @description Voice ID from the /phone/voices endpoint. Omit for default voice. */
|
|
7229
7397
|
voice_id?: string | null;
|
|
7398
|
+
/**
|
|
7399
|
+
* @description Voice provider returned by the /phone/voices endpoint. It is inferred from voice_id when omitted.
|
|
7400
|
+
* @enum {string}
|
|
7401
|
+
*/
|
|
7402
|
+
tts_provider?: "elevenlabs" | "cartesia";
|
|
7230
7403
|
/** @description ISO-639-1 language codes the agent should speak. A subset of {en, es, fr, de, hi, ru, pt, ja, it, nl} can be combined freely. Any other code (e.g. "ar", "tr", "zh") must be the only entry; Arabic accepts dialect tags such as "ar-SA". */
|
|
7231
7404
|
language?: string[];
|
|
7232
7405
|
/** @description What the agent says when it picks up (default: "Hello?") */
|
|
@@ -7256,6 +7429,11 @@ export interface components {
|
|
|
7256
7429
|
type?: "inbound" | "outbound";
|
|
7257
7430
|
/** @description Voice ID from the /phone/voices endpoint. Omit for default voice. */
|
|
7258
7431
|
voice_id?: string | null;
|
|
7432
|
+
/**
|
|
7433
|
+
* @description Voice provider returned by the /phone/voices endpoint. It is inferred from voice_id when omitted.
|
|
7434
|
+
* @enum {string}
|
|
7435
|
+
*/
|
|
7436
|
+
tts_provider?: "elevenlabs" | "cartesia";
|
|
7259
7437
|
/** @description ISO-639-1 language codes the agent should speak. A subset of {en, es, fr, de, hi, ru, pt, ja, it, nl} can be combined freely. Any other code (e.g. "ar", "tr", "zh") must be the only entry; Arabic accepts dialect tags such as "ar-SA". */
|
|
7260
7438
|
language?: string[];
|
|
7261
7439
|
/** @description What the agent says when it picks up (default: "Hello?") */
|
|
@@ -7516,12 +7694,19 @@ export interface components {
|
|
|
7516
7694
|
/** @description Additional context about the situation */
|
|
7517
7695
|
context?: string;
|
|
7518
7696
|
};
|
|
7519
|
-
|
|
7697
|
+
SetChatSessionSubStatusInput: {
|
|
7520
7698
|
/**
|
|
7521
7699
|
* Format: uuid
|
|
7522
|
-
* @description
|
|
7700
|
+
* @description Id of the custom status to apply, from GET /custom-statuses
|
|
7523
7701
|
*/
|
|
7524
|
-
|
|
7702
|
+
sub_status_id: string;
|
|
7703
|
+
};
|
|
7704
|
+
InvestigateSessionDebugInput: {
|
|
7705
|
+
/**
|
|
7706
|
+
* Format: uuid
|
|
7707
|
+
* @description Customer support / inbox session UUID (from chat_sessions table). NOT the coworker chat session ID.
|
|
7708
|
+
*/
|
|
7709
|
+
session_id?: string;
|
|
7525
7710
|
/** @description Ticket number to resolve to a session */
|
|
7526
7711
|
ticket_number?: string;
|
|
7527
7712
|
/**
|
|
@@ -8311,6 +8496,10 @@ export interface components {
|
|
|
8311
8496
|
template_html: string;
|
|
8312
8497
|
is_default: boolean;
|
|
8313
8498
|
rules: components["schemas"]["SalesforceReplyTemplateRules"] | null;
|
|
8499
|
+
/** @description From address of the AI agent's autopilot Case email: a literal address, a {{session attribute}} such as {{sf_case_LatestPOSEmail__c}}, or an {{#if …}} branch, resolved per session. Used only when it resolves to an email address; otherwise Salesforce's default sender applies. Empty or null clears it. */
|
|
8500
|
+
from_address: string | null;
|
|
8501
|
+
/** @description To address of the AI agent's autopilot Case email: a literal address, a {{session attribute}} such as {{reservation_email}}, or an {{#if …}} branch, resolved per session. Used only when it resolves to an email address; otherwise the Case contact's address applies. Empty or null clears it. */
|
|
8502
|
+
to_address: string | null;
|
|
8314
8503
|
/** Format: date-time */
|
|
8315
8504
|
created_at: string;
|
|
8316
8505
|
/** Format: date-time */
|
|
@@ -8324,6 +8513,8 @@ export interface components {
|
|
|
8324
8513
|
text: string;
|
|
8325
8514
|
session_number: number | null;
|
|
8326
8515
|
missing_variables: string[];
|
|
8516
|
+
from_address: string | null;
|
|
8517
|
+
to_address: string | null;
|
|
8327
8518
|
};
|
|
8328
8519
|
ContactsFilter: {
|
|
8329
8520
|
/** @constant */
|
|
@@ -8498,6 +8689,64 @@ export interface components {
|
|
|
8498
8689
|
customDataKeys?: string[];
|
|
8499
8690
|
}[];
|
|
8500
8691
|
};
|
|
8692
|
+
CustomSessionStatusDto: {
|
|
8693
|
+
id: string;
|
|
8694
|
+
org_id: string;
|
|
8695
|
+
name: string;
|
|
8696
|
+
description: string | null;
|
|
8697
|
+
display_name: string | null;
|
|
8698
|
+
display_description: string | null;
|
|
8699
|
+
color: string | null;
|
|
8700
|
+
icon: string | null;
|
|
8701
|
+
/** @enum {string} */
|
|
8702
|
+
parent_status: "closed_resolved" | "closed_unresolved" | "open";
|
|
8703
|
+
/** Format: date-time */
|
|
8704
|
+
created_at: string;
|
|
8705
|
+
/** Format: date-time */
|
|
8706
|
+
updated_at: string;
|
|
8707
|
+
};
|
|
8708
|
+
StructuredFieldSystemOptionDto: {
|
|
8709
|
+
value: string;
|
|
8710
|
+
label: string;
|
|
8711
|
+
description: string | null;
|
|
8712
|
+
};
|
|
8713
|
+
StructuredFieldVariantTreeDto: {
|
|
8714
|
+
/** Format: uuid */
|
|
8715
|
+
id: string;
|
|
8716
|
+
org_id: string;
|
|
8717
|
+
/** Format: uuid */
|
|
8718
|
+
field_id: string;
|
|
8719
|
+
parent_id: string | null;
|
|
8720
|
+
value: string;
|
|
8721
|
+
variant_display_name: string;
|
|
8722
|
+
variant_description: string;
|
|
8723
|
+
position: number;
|
|
8724
|
+
archived_at: string | null;
|
|
8725
|
+
/** Format: date-time */
|
|
8726
|
+
created_at: string;
|
|
8727
|
+
/** Format: date-time */
|
|
8728
|
+
updated_at: string;
|
|
8729
|
+
children: components["schemas"]["StructuredFieldVariantTreeDto"][];
|
|
8730
|
+
};
|
|
8731
|
+
StructuredFieldTreeDto: {
|
|
8732
|
+
/** Format: uuid */
|
|
8733
|
+
id: string;
|
|
8734
|
+
org_id: string;
|
|
8735
|
+
key: string;
|
|
8736
|
+
name: string;
|
|
8737
|
+
description: string;
|
|
8738
|
+
type: components["schemas"]["StructuredFieldTypeDto"];
|
|
8739
|
+
value: string | null;
|
|
8740
|
+
position: number;
|
|
8741
|
+
archived_at: string | null;
|
|
8742
|
+
/** Format: date-time */
|
|
8743
|
+
created_at: string;
|
|
8744
|
+
/** Format: date-time */
|
|
8745
|
+
updated_at: string;
|
|
8746
|
+
variants: components["schemas"]["StructuredFieldVariantTreeDto"][];
|
|
8747
|
+
system_options: components["schemas"]["StructuredFieldSystemOptionDto"][];
|
|
8748
|
+
};
|
|
8749
|
+
StructuredFieldListDto: components["schemas"]["StructuredFieldTreeDto"][];
|
|
8501
8750
|
GenericResponseDto: {
|
|
8502
8751
|
data?: {
|
|
8503
8752
|
success: boolean;
|
|
@@ -8646,48 +8895,6 @@ export interface components {
|
|
|
8646
8895
|
*/
|
|
8647
8896
|
updated_at: string;
|
|
8648
8897
|
};
|
|
8649
|
-
StructuredFieldSystemOptionDto: {
|
|
8650
|
-
value: string;
|
|
8651
|
-
label: string;
|
|
8652
|
-
description: string | null;
|
|
8653
|
-
};
|
|
8654
|
-
StructuredFieldVariantTreeDto: {
|
|
8655
|
-
/** Format: uuid */
|
|
8656
|
-
id: string;
|
|
8657
|
-
org_id: string;
|
|
8658
|
-
/** Format: uuid */
|
|
8659
|
-
field_id: string;
|
|
8660
|
-
parent_id: string | null;
|
|
8661
|
-
value: string;
|
|
8662
|
-
variant_display_name: string;
|
|
8663
|
-
variant_description: string;
|
|
8664
|
-
position: number;
|
|
8665
|
-
archived_at: string | null;
|
|
8666
|
-
/** Format: date-time */
|
|
8667
|
-
created_at: string;
|
|
8668
|
-
/** Format: date-time */
|
|
8669
|
-
updated_at: string;
|
|
8670
|
-
children: components["schemas"]["StructuredFieldVariantTreeDto"][];
|
|
8671
|
-
};
|
|
8672
|
-
StructuredFieldTreeDto: {
|
|
8673
|
-
/** Format: uuid */
|
|
8674
|
-
id: string;
|
|
8675
|
-
org_id: string;
|
|
8676
|
-
key: string;
|
|
8677
|
-
name: string;
|
|
8678
|
-
description: string;
|
|
8679
|
-
type: components["schemas"]["StructuredFieldTypeDto"];
|
|
8680
|
-
value: string | null;
|
|
8681
|
-
position: number;
|
|
8682
|
-
archived_at: string | null;
|
|
8683
|
-
/** Format: date-time */
|
|
8684
|
-
created_at: string;
|
|
8685
|
-
/** Format: date-time */
|
|
8686
|
-
updated_at: string;
|
|
8687
|
-
variants: components["schemas"]["StructuredFieldVariantTreeDto"][];
|
|
8688
|
-
system_options: components["schemas"]["StructuredFieldSystemOptionDto"][];
|
|
8689
|
-
};
|
|
8690
|
-
StructuredFieldListDto: components["schemas"]["StructuredFieldTreeDto"][];
|
|
8691
8898
|
CustomDomainMutationOutputDto: {
|
|
8692
8899
|
/** @constant */
|
|
8693
8900
|
success: true;
|
|
@@ -8878,11 +9085,15 @@ export interface components {
|
|
|
8878
9085
|
stt_keyterms: string[];
|
|
8879
9086
|
stt_model: ("deepgram/flux-general" | "deepgram/nova-3" | "deepgram/nova-3-medical" | "cartesia/ink-whisper" | "elevenlabs/scribe_v2_realtime" | "xai/stt-1" | "assemblyai/universal-3-5-pro" | "speechmatics/enhanced" | "google/gemini-3.5-transcribe-live" | "soniox/stt-rt-v5") | null;
|
|
8880
9087
|
tts_speed_pct: number | null;
|
|
9088
|
+
/** @enum {string} */
|
|
9089
|
+
tts_provider: "elevenlabs" | "cartesia";
|
|
8881
9090
|
failover_transfer_destination_id: string | null;
|
|
8882
9091
|
/** @description Transfer destinations the agent may transfer to (`transfer_call` targets). */
|
|
8883
9092
|
transfer_destination_ids: string[];
|
|
8884
9093
|
};
|
|
8885
9094
|
PhoneAgentVoiceDto: {
|
|
9095
|
+
/** @enum {string} */
|
|
9096
|
+
provider: "elevenlabs" | "cartesia";
|
|
8886
9097
|
voice_id: string;
|
|
8887
9098
|
name: string;
|
|
8888
9099
|
labels: {
|
|
@@ -9697,15 +9908,25 @@ export interface components {
|
|
|
9697
9908
|
updated_at: string;
|
|
9698
9909
|
deleted_at: string | null;
|
|
9699
9910
|
stats: {
|
|
9700
|
-
/** @description Everyone enrolled
|
|
9911
|
+
/** @description Everyone this sequence is for: enrolled minus the people the judge turned down. Not scoped to a status — someone who replied, finished or opted out was still part of the audience. Always equals will_send + might_send. */
|
|
9701
9912
|
people: number;
|
|
9702
|
-
/** @description
|
|
9913
|
+
/** @description The JUDGED half of `people`, not "everyone here passed": those who cleared the arming floor, plus anyone a later run scored below it after we had already armed or messaged them — a verdict cannot un-send a message. Before launch the two readings coincide, which is the only place this is shown as "will send to"; afterwards read `in_flight` for what can still happen. */
|
|
9703
9914
|
will_send: number;
|
|
9704
|
-
/** @description Never judged. These arm too — an unjudged list is user authority
|
|
9915
|
+
/** @description Never judged. These arm too — an unjudged list is user authority. For a sequence that has not launched, the audience it would send to is will_send + might_send; once it has, some of those people are already done and `in_flight` is the forward-looking number. */
|
|
9705
9916
|
might_send: number;
|
|
9917
|
+
/** @description Judged and turned down BEFORE anything was sent — the exact complement of `people`, so the two are `enrolled`. Someone already armed when a later run failed them is not here; they stay in the audience. */
|
|
9918
|
+
rejected: number;
|
|
9919
|
+
/** @description The whole list, judged-down included — people + rejected. */
|
|
9920
|
+
enrolled: number;
|
|
9921
|
+
/** @description Whether there is anything for the judge to work against. Decides whether the audience has a split worth showing at all. */
|
|
9922
|
+
has_criteria: boolean;
|
|
9706
9923
|
sent: number;
|
|
9707
9924
|
replied: number;
|
|
9708
|
-
/** @description
|
|
9925
|
+
/** @description Concluded without ever being reached — journey over, nothing sent. Terminal only: parked people and deferrals are excluded, since neither is a conclusion. people = sent + wont_reach + (in flight and never contacted) — someone mid-sequence has been contacted AND is still in flight, so the plain three-term form double counts them. */
|
|
9926
|
+
wont_reach: number;
|
|
9927
|
+
/** @description Parked: waiting on a human to fix something, after which the journey resumes where it stopped. Kept apart from wont_reach because it is a call to action, not attrition. A SLICE of the still-in-flight people, not a fourth bucket beside them — someone parked after step 0 is counted here and in `sent`, so do not add this to the others. */
|
|
9928
|
+
needs_you: number;
|
|
9929
|
+
/** @description Nothing left in flight and something already went out. Derived, never stored — the status stays `active`, so enrolling more people revives the sequence on its own. */
|
|
9709
9930
|
finished: boolean;
|
|
9710
9931
|
/** @description An enrich or judge run is in flight for this sequence. */
|
|
9711
9932
|
busy: boolean;
|
|
@@ -9714,6 +9935,72 @@ export interface components {
|
|
|
9714
9935
|
ListSequencesDto: {
|
|
9715
9936
|
sequences: components["schemas"]["SequenceListItemDto"][];
|
|
9716
9937
|
};
|
|
9938
|
+
SequenceRepliesDto: {
|
|
9939
|
+
replies: {
|
|
9940
|
+
/** @description The inbox session this reply started. */
|
|
9941
|
+
session_id: string;
|
|
9942
|
+
/** @description What the inbox routes on. */
|
|
9943
|
+
ticket_number: number;
|
|
9944
|
+
contact_id: string | null;
|
|
9945
|
+
/** @description Null when the contact row is gone or simply unnamed. */
|
|
9946
|
+
contact_name: string | null;
|
|
9947
|
+
contact_avatar_url: string | null;
|
|
9948
|
+
/** @description Which step they answered; null when the stamp carried no usable one. */
|
|
9949
|
+
step_index: number | null;
|
|
9950
|
+
/** @description The opening line of what they said, truncated. Null when the caller may not read transcripts (needs the sessions capability / chat-sessions scope), or when the reply carried no text at all. */
|
|
9951
|
+
preview: string | null;
|
|
9952
|
+
/** @description When they answered (ISO 8601). */
|
|
9953
|
+
at: string;
|
|
9954
|
+
}[];
|
|
9955
|
+
};
|
|
9956
|
+
SequenceStatsDto: {
|
|
9957
|
+
/** @description Everyone this sequence is for: enrolled minus the people the judge turned down. Not scoped to a status — someone who replied, finished or opted out was still part of the audience. Always equals will_send + might_send. */
|
|
9958
|
+
people: number;
|
|
9959
|
+
/** @description The JUDGED half of `people`, not "everyone here passed": those who cleared the arming floor, plus anyone a later run scored below it after we had already armed or messaged them — a verdict cannot un-send a message. Before launch the two readings coincide, which is the only place this is shown as "will send to"; afterwards read `in_flight` for what can still happen. */
|
|
9960
|
+
will_send: number;
|
|
9961
|
+
/** @description Never judged. These arm too — an unjudged list is user authority. For a sequence that has not launched, the audience it would send to is will_send + might_send; once it has, some of those people are already done and `in_flight` is the forward-looking number. */
|
|
9962
|
+
might_send: number;
|
|
9963
|
+
/** @description Judged and turned down BEFORE anything was sent — the exact complement of `people`, so the two are `enrolled`. Someone already armed when a later run failed them is not here; they stay in the audience. */
|
|
9964
|
+
rejected: number;
|
|
9965
|
+
/** @description The whole list, judged-down included — people + rejected. */
|
|
9966
|
+
enrolled: number;
|
|
9967
|
+
/** @description Whether there is anything for the judge to work against. Decides whether the audience has a split worth showing at all. */
|
|
9968
|
+
has_criteria: boolean;
|
|
9969
|
+
sent: number;
|
|
9970
|
+
replied: number;
|
|
9971
|
+
/** @description Concluded without ever being reached — journey over, nothing sent. Terminal only: parked people and deferrals are excluded, since neither is a conclusion. people = sent + wont_reach + (in flight and never contacted) — someone mid-sequence has been contacted AND is still in flight, so the plain three-term form double counts them. */
|
|
9972
|
+
wont_reach: number;
|
|
9973
|
+
/** @description Parked: waiting on a human to fix something, after which the journey resumes where it stopped. Kept apart from wont_reach because it is a call to action, not attrition. A SLICE of the still-in-flight people, not a fourth bucket beside them — someone parked after step 0 is counted here and in `sent`, so do not add this to the others. */
|
|
9974
|
+
needs_you: number;
|
|
9975
|
+
/** @description Nothing left in flight and something already went out. Derived, never stored — the status stays `active`, so enrolling more people revives the sequence on its own. */
|
|
9976
|
+
finished: boolean;
|
|
9977
|
+
/** @description An enrich or judge run is in flight for this sequence. */
|
|
9978
|
+
busy: boolean;
|
|
9979
|
+
/** @description Who we will never reach, newest first. Capped — the count is on `wont_reach`. */
|
|
9980
|
+
unreachable: {
|
|
9981
|
+
contact_id: string | null;
|
|
9982
|
+
display_name: string | null;
|
|
9983
|
+
phone: string | null;
|
|
9984
|
+
email: string | null;
|
|
9985
|
+
whatsapp_user_id: string | null;
|
|
9986
|
+
avatar_url: string | null;
|
|
9987
|
+
reason: string | null;
|
|
9988
|
+
event: string | null;
|
|
9989
|
+
step_index: number | null;
|
|
9990
|
+
}[];
|
|
9991
|
+
/** @description Who is waiting on a human, newest first. Capped — the count is on `needs_you`. */
|
|
9992
|
+
blocked: {
|
|
9993
|
+
contact_id: string | null;
|
|
9994
|
+
display_name: string | null;
|
|
9995
|
+
phone: string | null;
|
|
9996
|
+
email: string | null;
|
|
9997
|
+
whatsapp_user_id: string | null;
|
|
9998
|
+
avatar_url: string | null;
|
|
9999
|
+
reason: string | null;
|
|
10000
|
+
event: string | null;
|
|
10001
|
+
step_index: number | null;
|
|
10002
|
+
}[];
|
|
10003
|
+
};
|
|
9717
10004
|
LaunchSequenceOutputDto: {
|
|
9718
10005
|
/** @constant */
|
|
9719
10006
|
status: "active";
|
|
@@ -10533,6 +10820,8 @@ export interface components {
|
|
|
10533
10820
|
updated_at: string;
|
|
10534
10821
|
call_available: boolean;
|
|
10535
10822
|
call_locked: boolean;
|
|
10823
|
+
call_wrap_up_until: string | null;
|
|
10824
|
+
call_wrap_up_phone_call_id: string | null;
|
|
10536
10825
|
availability_status_id: string | null;
|
|
10537
10826
|
};
|
|
10538
10827
|
AuditLogPublicDto: {
|
|
@@ -10651,6 +10940,8 @@ export interface components {
|
|
|
10651
10940
|
updated_at: string;
|
|
10652
10941
|
call_available: boolean;
|
|
10653
10942
|
call_locked: boolean;
|
|
10943
|
+
call_wrap_up_until: string | null;
|
|
10944
|
+
call_wrap_up_phone_call_id: string | null;
|
|
10654
10945
|
availability_status_id: string | null;
|
|
10655
10946
|
};
|
|
10656
10947
|
resolved_status: components["schemas"]["ResolvedAvailabilityStatusDto"];
|
|
@@ -10825,6 +11116,8 @@ export interface components {
|
|
|
10825
11116
|
id: string;
|
|
10826
11117
|
/** @enum {string} */
|
|
10827
11118
|
status: "open" | "closed_resolved" | "closed_unresolved";
|
|
11119
|
+
/** @description Id of the custom status refining `status`, or null when only the built-in status applies. Resolve it with GET /custom-statuses. */
|
|
11120
|
+
sub_status_id: string | null;
|
|
10828
11121
|
ai_closure_type: ("assumed_resolved" | "handed_off" | "resolved") | null;
|
|
10829
11122
|
sentiment: ("angry" | "happy" | "neutral") | null;
|
|
10830
11123
|
/** @description AI-generated summary of the conversation. Populated for both AI-resolved and handed-off sessions once the session has been summarized; null otherwise. */
|
|
@@ -12376,6 +12669,9 @@ export interface components {
|
|
|
12376
12669
|
chat: boolean;
|
|
12377
12670
|
email: boolean;
|
|
12378
12671
|
whatsapp: boolean;
|
|
12672
|
+
instagram: boolean;
|
|
12673
|
+
messenger: boolean;
|
|
12674
|
+
sms: boolean;
|
|
12379
12675
|
voice: boolean;
|
|
12380
12676
|
};
|
|
12381
12677
|
};
|
|
@@ -12646,6 +12942,10 @@ export interface components {
|
|
|
12646
12942
|
enabled: boolean;
|
|
12647
12943
|
};
|
|
12648
12944
|
ListTagCategoriesOutput: components["schemas"]["TagCategoryPublicResponseDto"][];
|
|
12945
|
+
ListCustomStatusesOutput: components["schemas"]["CustomSessionStatusDto"][];
|
|
12946
|
+
DeleteCustomStatusOutput: {
|
|
12947
|
+
message: string;
|
|
12948
|
+
};
|
|
12649
12949
|
ListWorkflowsOutput: components["schemas"]["WorkflowPublicResponseDto"][];
|
|
12650
12950
|
DeleteWorkflowOutput: {
|
|
12651
12951
|
success: boolean;
|
|
@@ -13734,6 +14034,74 @@ export interface operations {
|
|
|
13734
14034
|
};
|
|
13735
14035
|
};
|
|
13736
14036
|
};
|
|
14037
|
+
setChatSessionSubStatus: {
|
|
14038
|
+
parameters: {
|
|
14039
|
+
query?: never;
|
|
14040
|
+
header?: never;
|
|
14041
|
+
path: {
|
|
14042
|
+
/** @description The unique identifier of the chat session */
|
|
14043
|
+
session_id: string;
|
|
14044
|
+
};
|
|
14045
|
+
cookie?: never;
|
|
14046
|
+
};
|
|
14047
|
+
requestBody: {
|
|
14048
|
+
content: {
|
|
14049
|
+
"application/json": components["schemas"]["SetChatSessionSubStatusInput"];
|
|
14050
|
+
};
|
|
14051
|
+
};
|
|
14052
|
+
responses: {
|
|
14053
|
+
/** @description Default Response */
|
|
14054
|
+
200: {
|
|
14055
|
+
headers: {
|
|
14056
|
+
[name: string]: unknown;
|
|
14057
|
+
};
|
|
14058
|
+
content: {
|
|
14059
|
+
"application/json": components["schemas"]["GetChatSessionOutput"];
|
|
14060
|
+
};
|
|
14061
|
+
};
|
|
14062
|
+
/** @description Internal Server Error */
|
|
14063
|
+
500: {
|
|
14064
|
+
headers: {
|
|
14065
|
+
[name: string]: unknown;
|
|
14066
|
+
};
|
|
14067
|
+
content: {
|
|
14068
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
14069
|
+
};
|
|
14070
|
+
};
|
|
14071
|
+
};
|
|
14072
|
+
};
|
|
14073
|
+
clearChatSessionSubStatus: {
|
|
14074
|
+
parameters: {
|
|
14075
|
+
query?: never;
|
|
14076
|
+
header?: never;
|
|
14077
|
+
path: {
|
|
14078
|
+
/** @description The unique identifier of the chat session */
|
|
14079
|
+
session_id: string;
|
|
14080
|
+
};
|
|
14081
|
+
cookie?: never;
|
|
14082
|
+
};
|
|
14083
|
+
requestBody?: never;
|
|
14084
|
+
responses: {
|
|
14085
|
+
/** @description Default Response */
|
|
14086
|
+
200: {
|
|
14087
|
+
headers: {
|
|
14088
|
+
[name: string]: unknown;
|
|
14089
|
+
};
|
|
14090
|
+
content: {
|
|
14091
|
+
"application/json": components["schemas"]["GetChatSessionOutput"];
|
|
14092
|
+
};
|
|
14093
|
+
};
|
|
14094
|
+
/** @description Internal Server Error */
|
|
14095
|
+
500: {
|
|
14096
|
+
headers: {
|
|
14097
|
+
[name: string]: unknown;
|
|
14098
|
+
};
|
|
14099
|
+
content: {
|
|
14100
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
14101
|
+
};
|
|
14102
|
+
};
|
|
14103
|
+
};
|
|
14104
|
+
};
|
|
13737
14105
|
sendMessage: {
|
|
13738
14106
|
parameters: {
|
|
13739
14107
|
query?: never;
|
|
@@ -17650,6 +18018,168 @@ export interface operations {
|
|
|
17650
18018
|
};
|
|
17651
18019
|
};
|
|
17652
18020
|
};
|
|
18021
|
+
listCustomStatuses: {
|
|
18022
|
+
parameters: {
|
|
18023
|
+
query?: never;
|
|
18024
|
+
header?: never;
|
|
18025
|
+
path?: never;
|
|
18026
|
+
cookie?: never;
|
|
18027
|
+
};
|
|
18028
|
+
requestBody?: never;
|
|
18029
|
+
responses: {
|
|
18030
|
+
/** @description Default Response */
|
|
18031
|
+
200: {
|
|
18032
|
+
headers: {
|
|
18033
|
+
[name: string]: unknown;
|
|
18034
|
+
};
|
|
18035
|
+
content: {
|
|
18036
|
+
"application/json": components["schemas"]["ListCustomStatusesOutput"];
|
|
18037
|
+
};
|
|
18038
|
+
};
|
|
18039
|
+
/** @description Internal Server Error */
|
|
18040
|
+
500: {
|
|
18041
|
+
headers: {
|
|
18042
|
+
[name: string]: unknown;
|
|
18043
|
+
};
|
|
18044
|
+
content: {
|
|
18045
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
18046
|
+
};
|
|
18047
|
+
};
|
|
18048
|
+
};
|
|
18049
|
+
};
|
|
18050
|
+
createCustomStatus: {
|
|
18051
|
+
parameters: {
|
|
18052
|
+
query?: never;
|
|
18053
|
+
header?: never;
|
|
18054
|
+
path?: never;
|
|
18055
|
+
cookie?: never;
|
|
18056
|
+
};
|
|
18057
|
+
requestBody: {
|
|
18058
|
+
content: {
|
|
18059
|
+
"application/json": components["schemas"]["CreateCustomStatusDto"];
|
|
18060
|
+
};
|
|
18061
|
+
};
|
|
18062
|
+
responses: {
|
|
18063
|
+
/** @description Default Response */
|
|
18064
|
+
201: {
|
|
18065
|
+
headers: {
|
|
18066
|
+
[name: string]: unknown;
|
|
18067
|
+
};
|
|
18068
|
+
content: {
|
|
18069
|
+
"application/json": components["schemas"]["CustomSessionStatusDto"];
|
|
18070
|
+
};
|
|
18071
|
+
};
|
|
18072
|
+
/** @description Internal Server Error */
|
|
18073
|
+
500: {
|
|
18074
|
+
headers: {
|
|
18075
|
+
[name: string]: unknown;
|
|
18076
|
+
};
|
|
18077
|
+
content: {
|
|
18078
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
18079
|
+
};
|
|
18080
|
+
};
|
|
18081
|
+
};
|
|
18082
|
+
};
|
|
18083
|
+
getCustomStatus: {
|
|
18084
|
+
parameters: {
|
|
18085
|
+
query?: never;
|
|
18086
|
+
header?: never;
|
|
18087
|
+
path: {
|
|
18088
|
+
/** @description The custom status id */
|
|
18089
|
+
id: string;
|
|
18090
|
+
};
|
|
18091
|
+
cookie?: never;
|
|
18092
|
+
};
|
|
18093
|
+
requestBody?: never;
|
|
18094
|
+
responses: {
|
|
18095
|
+
/** @description Default Response */
|
|
18096
|
+
200: {
|
|
18097
|
+
headers: {
|
|
18098
|
+
[name: string]: unknown;
|
|
18099
|
+
};
|
|
18100
|
+
content: {
|
|
18101
|
+
"application/json": components["schemas"]["CustomSessionStatusDto"];
|
|
18102
|
+
};
|
|
18103
|
+
};
|
|
18104
|
+
/** @description Internal Server Error */
|
|
18105
|
+
500: {
|
|
18106
|
+
headers: {
|
|
18107
|
+
[name: string]: unknown;
|
|
18108
|
+
};
|
|
18109
|
+
content: {
|
|
18110
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
18111
|
+
};
|
|
18112
|
+
};
|
|
18113
|
+
};
|
|
18114
|
+
};
|
|
18115
|
+
deleteCustomStatus: {
|
|
18116
|
+
parameters: {
|
|
18117
|
+
query?: never;
|
|
18118
|
+
header?: never;
|
|
18119
|
+
path: {
|
|
18120
|
+
/** @description The custom status id */
|
|
18121
|
+
id: string;
|
|
18122
|
+
};
|
|
18123
|
+
cookie?: never;
|
|
18124
|
+
};
|
|
18125
|
+
requestBody?: never;
|
|
18126
|
+
responses: {
|
|
18127
|
+
/** @description Default Response */
|
|
18128
|
+
200: {
|
|
18129
|
+
headers: {
|
|
18130
|
+
[name: string]: unknown;
|
|
18131
|
+
};
|
|
18132
|
+
content: {
|
|
18133
|
+
"application/json": components["schemas"]["DeleteCustomStatusOutput"];
|
|
18134
|
+
};
|
|
18135
|
+
};
|
|
18136
|
+
/** @description Internal Server Error */
|
|
18137
|
+
500: {
|
|
18138
|
+
headers: {
|
|
18139
|
+
[name: string]: unknown;
|
|
18140
|
+
};
|
|
18141
|
+
content: {
|
|
18142
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
18143
|
+
};
|
|
18144
|
+
};
|
|
18145
|
+
};
|
|
18146
|
+
};
|
|
18147
|
+
updateCustomStatus: {
|
|
18148
|
+
parameters: {
|
|
18149
|
+
query?: never;
|
|
18150
|
+
header?: never;
|
|
18151
|
+
path: {
|
|
18152
|
+
/** @description The custom status id */
|
|
18153
|
+
id: string;
|
|
18154
|
+
};
|
|
18155
|
+
cookie?: never;
|
|
18156
|
+
};
|
|
18157
|
+
requestBody: {
|
|
18158
|
+
content: {
|
|
18159
|
+
"application/json": components["schemas"]["UpdateCustomStatusPublicDto"];
|
|
18160
|
+
};
|
|
18161
|
+
};
|
|
18162
|
+
responses: {
|
|
18163
|
+
/** @description Default Response */
|
|
18164
|
+
200: {
|
|
18165
|
+
headers: {
|
|
18166
|
+
[name: string]: unknown;
|
|
18167
|
+
};
|
|
18168
|
+
content: {
|
|
18169
|
+
"application/json": components["schemas"]["CustomSessionStatusDto"];
|
|
18170
|
+
};
|
|
18171
|
+
};
|
|
18172
|
+
/** @description Internal Server Error */
|
|
18173
|
+
500: {
|
|
18174
|
+
headers: {
|
|
18175
|
+
[name: string]: unknown;
|
|
18176
|
+
};
|
|
18177
|
+
content: {
|
|
18178
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
18179
|
+
};
|
|
18180
|
+
};
|
|
18181
|
+
};
|
|
18182
|
+
};
|
|
17653
18183
|
listWorkflowDefinitions: {
|
|
17654
18184
|
parameters: {
|
|
17655
18185
|
query?: never;
|
|
@@ -19291,6 +19821,72 @@ export interface operations {
|
|
|
19291
19821
|
};
|
|
19292
19822
|
};
|
|
19293
19823
|
};
|
|
19824
|
+
listSequenceReplies: {
|
|
19825
|
+
parameters: {
|
|
19826
|
+
query?: {
|
|
19827
|
+
limit?: number;
|
|
19828
|
+
};
|
|
19829
|
+
header?: never;
|
|
19830
|
+
path: {
|
|
19831
|
+
/** @description The unique identifier of the sequence */
|
|
19832
|
+
sequenceId: string;
|
|
19833
|
+
};
|
|
19834
|
+
cookie?: never;
|
|
19835
|
+
};
|
|
19836
|
+
requestBody?: never;
|
|
19837
|
+
responses: {
|
|
19838
|
+
/** @description Default Response */
|
|
19839
|
+
200: {
|
|
19840
|
+
headers: {
|
|
19841
|
+
[name: string]: unknown;
|
|
19842
|
+
};
|
|
19843
|
+
content: {
|
|
19844
|
+
"application/json": components["schemas"]["SequenceRepliesDto"];
|
|
19845
|
+
};
|
|
19846
|
+
};
|
|
19847
|
+
/** @description Internal Server Error */
|
|
19848
|
+
500: {
|
|
19849
|
+
headers: {
|
|
19850
|
+
[name: string]: unknown;
|
|
19851
|
+
};
|
|
19852
|
+
content: {
|
|
19853
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
19854
|
+
};
|
|
19855
|
+
};
|
|
19856
|
+
};
|
|
19857
|
+
};
|
|
19858
|
+
getSequenceStats: {
|
|
19859
|
+
parameters: {
|
|
19860
|
+
query?: never;
|
|
19861
|
+
header?: never;
|
|
19862
|
+
path: {
|
|
19863
|
+
/** @description The unique identifier of the sequence */
|
|
19864
|
+
sequenceId: string;
|
|
19865
|
+
};
|
|
19866
|
+
cookie?: never;
|
|
19867
|
+
};
|
|
19868
|
+
requestBody?: never;
|
|
19869
|
+
responses: {
|
|
19870
|
+
/** @description Default Response */
|
|
19871
|
+
200: {
|
|
19872
|
+
headers: {
|
|
19873
|
+
[name: string]: unknown;
|
|
19874
|
+
};
|
|
19875
|
+
content: {
|
|
19876
|
+
"application/json": components["schemas"]["SequenceStatsDto"];
|
|
19877
|
+
};
|
|
19878
|
+
};
|
|
19879
|
+
/** @description Internal Server Error */
|
|
19880
|
+
500: {
|
|
19881
|
+
headers: {
|
|
19882
|
+
[name: string]: unknown;
|
|
19883
|
+
};
|
|
19884
|
+
content: {
|
|
19885
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
19886
|
+
};
|
|
19887
|
+
};
|
|
19888
|
+
};
|
|
19889
|
+
};
|
|
19294
19890
|
setSequenceSteps: {
|
|
19295
19891
|
parameters: {
|
|
19296
19892
|
query?: never;
|
|
@@ -23469,6 +24065,8 @@ export interface operations {
|
|
|
23469
24065
|
has_actions?: "true" | "false";
|
|
23470
24066
|
tags?: string;
|
|
23471
24067
|
channels?: string;
|
|
24068
|
+
addons?: string;
|
|
24069
|
+
archived?: "only";
|
|
23472
24070
|
sort_by?: "created_at" | "name" | "members" | "data_sources" | "sessions_30d" | "total_sessions" | "last_session_at";
|
|
23473
24071
|
sort_dir?: "asc" | "desc";
|
|
23474
24072
|
};
|