@opencx/mcp 1.15.30 → 1.15.32
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 +19 -0
- package/dist/campaign-tools.spec.js.map +1 -1
- package/dist/inbox-view-tools.spec.d.ts +2 -0
- package/dist/inbox-view-tools.spec.d.ts.map +1 -0
- package/dist/inbox-view-tools.spec.js +152 -0
- package/dist/inbox-view-tools.spec.js.map +1 -0
- package/dist/schema.d.ts +575 -10
- package/dist/schema.d.ts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/audit-logs.d.ts.map +1 -1
- package/dist/tools/audit-logs.js +1 -0
- package/dist/tools/audit-logs.js.map +1 -1
- package/dist/tools/campaign-spine.d.ts.map +1 -1
- package/dist/tools/campaign-spine.js +50 -0
- package/dist/tools/campaign-spine.js.map +1 -1
- package/dist/tools/inbox-views.d.ts +4 -0
- package/dist/tools/inbox-views.d.ts.map +1 -0
- package/dist/tools/inbox-views.js +146 -0
- package/dist/tools/inbox-views.js.map +1 -0
- package/dist/tools/outbound-blocklist.d.ts +4 -0
- package/dist/tools/outbound-blocklist.d.ts.map +1 -0
- package/dist/tools/outbound-blocklist.js +101 -0
- package/dist/tools/outbound-blocklist.js.map +1 -0
- package/package.json +1 -1
package/dist/schema.d.ts
CHANGED
|
@@ -2433,6 +2433,54 @@ export interface paths {
|
|
|
2433
2433
|
patch: operations["updateCustomStatus"];
|
|
2434
2434
|
trace?: never;
|
|
2435
2435
|
};
|
|
2436
|
+
"/inbox-views": {
|
|
2437
|
+
parameters: {
|
|
2438
|
+
query?: never;
|
|
2439
|
+
header?: never;
|
|
2440
|
+
path?: never;
|
|
2441
|
+
cookie?: never;
|
|
2442
|
+
};
|
|
2443
|
+
/**
|
|
2444
|
+
* List saved inbox views
|
|
2445
|
+
* @description List the saved inbox views the calling user can see: their own, the ones shared with them or their teams, and the organization-wide ones. A saved view is a named session filter set that agents pick from the inbox sidebar.
|
|
2446
|
+
*/
|
|
2447
|
+
get: operations["listInboxViews"];
|
|
2448
|
+
put?: never;
|
|
2449
|
+
/**
|
|
2450
|
+
* Create a saved inbox view
|
|
2451
|
+
* @description Create a named, filtered view of the inbox and share it with the organization, named teams, or named users. The view is evaluated fresh every time it is opened, so `$current_user` assignees and `date.preset` windows stay dynamic. Leave both share lists empty to share the view with the whole organization. Name users and/or teams to restrict it to them, or pass only your own user id to keep it private. Sharing requires the `sessions-shared-views:write` permission — without it a created view is locked to its creator and the share lists on an update are ignored.
|
|
2452
|
+
*/
|
|
2453
|
+
post: operations["createInboxView"];
|
|
2454
|
+
delete?: never;
|
|
2455
|
+
options?: never;
|
|
2456
|
+
head?: never;
|
|
2457
|
+
patch?: never;
|
|
2458
|
+
trace?: never;
|
|
2459
|
+
};
|
|
2460
|
+
"/inbox-views/{id}": {
|
|
2461
|
+
parameters: {
|
|
2462
|
+
query?: never;
|
|
2463
|
+
header?: never;
|
|
2464
|
+
path?: never;
|
|
2465
|
+
cookie?: never;
|
|
2466
|
+
};
|
|
2467
|
+
get?: never;
|
|
2468
|
+
put?: never;
|
|
2469
|
+
post?: never;
|
|
2470
|
+
/**
|
|
2471
|
+
* Delete a saved inbox view
|
|
2472
|
+
* @description Delete a saved view. It disappears from the sidebar for everyone it was shared with; the sessions it matched are untouched. Requires the same permission as updating it (see `can_delete`).
|
|
2473
|
+
*/
|
|
2474
|
+
delete: operations["deleteInboxView"];
|
|
2475
|
+
options?: never;
|
|
2476
|
+
head?: never;
|
|
2477
|
+
/**
|
|
2478
|
+
* Update a saved inbox view
|
|
2479
|
+
* @description Update any subset of a saved view. Omitted fields are left unchanged; sending `filters` replaces the saved query outright. Only the view's creator, or someone with the `sessions-shared-views:write` permission editing a shared view, may update it (see `can_edit`).
|
|
2480
|
+
*/
|
|
2481
|
+
patch: operations["updateInboxView"];
|
|
2482
|
+
trace?: never;
|
|
2483
|
+
};
|
|
2436
2484
|
"/workflows/definitions": {
|
|
2437
2485
|
parameters: {
|
|
2438
2486
|
query?: never;
|
|
@@ -3534,6 +3582,48 @@ export interface paths {
|
|
|
3534
3582
|
patch?: never;
|
|
3535
3583
|
trace?: never;
|
|
3536
3584
|
};
|
|
3585
|
+
"/sequences/{sequenceId}/contacts/{contactId}/continue": {
|
|
3586
|
+
parameters: {
|
|
3587
|
+
query?: never;
|
|
3588
|
+
header?: never;
|
|
3589
|
+
path?: never;
|
|
3590
|
+
cookie?: never;
|
|
3591
|
+
};
|
|
3592
|
+
get?: never;
|
|
3593
|
+
put?: never;
|
|
3594
|
+
/**
|
|
3595
|
+
* Continue the sequence for a person a reply took out of it
|
|
3596
|
+
* @description A reply concludes a journey — the person exits as "replied" and receives no further steps. When that reply was not real engagement (an out-of-office, a "who is this?"), this puts them back in: active at the NEXT step, with that step's wait counted from now. The step they answered is never re-sent.
|
|
3597
|
+
*
|
|
3598
|
+
* Never an error for "cannot continue": `nothing_to_continue` when they replied on the last step or the journey already completed; `not_resumable` when the journey is still in play or ended by suppression (consent is not overridden here); `contact_not_found` when there is no live enrollment.
|
|
3599
|
+
*/
|
|
3600
|
+
post: operations["continueSequenceContact"];
|
|
3601
|
+
delete?: never;
|
|
3602
|
+
options?: never;
|
|
3603
|
+
head?: never;
|
|
3604
|
+
patch?: never;
|
|
3605
|
+
trace?: never;
|
|
3606
|
+
};
|
|
3607
|
+
"/sequences/contacts/{contactId}/sequences": {
|
|
3608
|
+
parameters: {
|
|
3609
|
+
query?: never;
|
|
3610
|
+
header?: never;
|
|
3611
|
+
path?: never;
|
|
3612
|
+
cookie?: never;
|
|
3613
|
+
};
|
|
3614
|
+
/**
|
|
3615
|
+
* Every sequence a contact is in, across the workspace
|
|
3616
|
+
* @description The cross-sequence read: which sequences hold this contact, their status in each (candidate, active, parked, exited, completed), why they left or parked, and the step they are on. Live enrollments only — a removed person is off the list. Use it before enrolling someone, or when a message arrives and you need to know whether they are mid-sequence.
|
|
3617
|
+
*/
|
|
3618
|
+
get: operations["listContactSequences"];
|
|
3619
|
+
put?: never;
|
|
3620
|
+
post?: never;
|
|
3621
|
+
delete?: never;
|
|
3622
|
+
options?: never;
|
|
3623
|
+
head?: never;
|
|
3624
|
+
patch?: never;
|
|
3625
|
+
trace?: never;
|
|
3626
|
+
};
|
|
3537
3627
|
"/sequences/{sequenceId}/contacts/exit": {
|
|
3538
3628
|
parameters: {
|
|
3539
3629
|
query?: never;
|
|
@@ -6546,6 +6636,10 @@ export interface components {
|
|
|
6546
6636
|
extra_data?: {
|
|
6547
6637
|
[key: string]: unknown;
|
|
6548
6638
|
} | null;
|
|
6639
|
+
/** @description Attributes to stamp on every session this sequence opens for the person — the call session at dial, the reply session when they answer an email or WhatsApp step — as `custom_data`, so workflows that fire on those sessions (Call Finished, Ticket Created) read them straight off the session. Same contract as `sessionCustomData` on the outbound-call endpoint: flat string / number / boolean values, at most 50 keys and 8,000 characters of JSON, no key-name rules. Not for what you know ABOUT the person — that is `extra_data`. Re-enrolling merges per key while they are a candidate or parked (an active or completed person is unchanged, like every other field); rejected per person (`session_custom_data_too_large`) when the bag, or the merge with what they already hold, exceeds the caps — nothing written, trim and retry just that person. Write-only: read it back on the session. */
|
|
6640
|
+
session_custom_data?: {
|
|
6641
|
+
[key: string]: string | number | boolean;
|
|
6642
|
+
} | null;
|
|
6549
6643
|
}[];
|
|
6550
6644
|
/** @enum {string} */
|
|
6551
6645
|
source?: "companion" | "workflow" | "api" | "manual" | "csv";
|
|
@@ -7429,6 +7523,11 @@ export interface components {
|
|
|
7429
7523
|
channel: "web" | "email" | "phone" | "whatsapp" | "slack" | "sms" | "instagram" | "messenger" | "api" | "web_voice";
|
|
7430
7524
|
/** @description Set true to enable autopilot, false to disable */
|
|
7431
7525
|
autopilot_enabled: boolean;
|
|
7526
|
+
/**
|
|
7527
|
+
* @description AI agent version to use for this channel
|
|
7528
|
+
* @enum {string}
|
|
7529
|
+
*/
|
|
7530
|
+
ai_agent_version?: "v1" | "v2";
|
|
7432
7531
|
};
|
|
7433
7532
|
UpdateProhibitedTopicsInputDto: {
|
|
7434
7533
|
/** @description Full replacement list of prohibited topics. Each entry is either a name string or an object with a name and an optional description. A name-only entry keeps whatever description that topic already has. Empty array clears all topics. Duplicates and blank entries are removed. */
|
|
@@ -7534,6 +7633,162 @@ export interface components {
|
|
|
7534
7633
|
/** @description Inline SVG markup for the badge icon. null restores the default icon; omit to leave unchanged. */
|
|
7535
7634
|
icon?: string | null;
|
|
7536
7635
|
};
|
|
7636
|
+
CreateInboxViewDto: {
|
|
7637
|
+
/** @description Name shown in the inbox view picker */
|
|
7638
|
+
name: string;
|
|
7639
|
+
/**
|
|
7640
|
+
* @description Filters the view applies, ANDed together. Omit for a view over every session. Same vocabulary as POST /chat/sessions/filter, plus the saved-view-only `$current_user` assignee token and rolling `date.preset`.
|
|
7641
|
+
* @default {}
|
|
7642
|
+
*/
|
|
7643
|
+
filters: {
|
|
7644
|
+
/** @description Date range filter on session creation time */
|
|
7645
|
+
date?: {
|
|
7646
|
+
/**
|
|
7647
|
+
* Format: date-time
|
|
7648
|
+
* @description Start date (ISO 8601)
|
|
7649
|
+
*/
|
|
7650
|
+
from?: string;
|
|
7651
|
+
/**
|
|
7652
|
+
* Format: date-time
|
|
7653
|
+
* @description End date (ISO 8601)
|
|
7654
|
+
*/
|
|
7655
|
+
to?: string;
|
|
7656
|
+
/**
|
|
7657
|
+
* @description Rolling window resolved every time the view is opened: "today", "last_3_days" or "last_7_days". Mutually exclusive with from/to.
|
|
7658
|
+
* @enum {string}
|
|
7659
|
+
*/
|
|
7660
|
+
preset?: "today" | "last_3_days" | "last_7_days";
|
|
7661
|
+
};
|
|
7662
|
+
/** @description Filter by channels (web, email, whatsapp, phone_voice, sms, slack, etc.) */
|
|
7663
|
+
channels?: components["schemas"]["SessionChannel"][];
|
|
7664
|
+
/** @description Filter by built-in status codes (0 = open, 1 = closed_resolved, 2 = closed_unresolved) */
|
|
7665
|
+
status?: number[];
|
|
7666
|
+
/** @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. */
|
|
7667
|
+
sub_status_ids?: string[];
|
|
7668
|
+
/** @description Filter by AI closure type (e.g. "handed_off", "resolved", "no_resolution") */
|
|
7669
|
+
ai_closure?: ("assumed_resolved" | "handed_off" | "resolved")[];
|
|
7670
|
+
/** @description Filter by customer sentiment (angry, happy, neutral) */
|
|
7671
|
+
sentiment?: ("angry" | "happy" | "neutral")[];
|
|
7672
|
+
/** @description Filter by assignee user IDs (empty array = unassigned). The "$current_user" token resolves to whoever opens the view, so one shared view can mean "assigned to me" for every teammate. */
|
|
7673
|
+
assignees?: (number | "$current_user")[];
|
|
7674
|
+
/** @description Filter by team/group IDs */
|
|
7675
|
+
team_ids?: string[];
|
|
7676
|
+
/** @description Filter by contact IDs */
|
|
7677
|
+
contact_ids?: string[];
|
|
7678
|
+
/** @description Filter by exact ticket number */
|
|
7679
|
+
ticket_number?: number;
|
|
7680
|
+
/** @description Filter by session language codes */
|
|
7681
|
+
language?: string[];
|
|
7682
|
+
/** @description Filter by tag names (sessions must have ALL specified tags) */
|
|
7683
|
+
tags?: string[];
|
|
7684
|
+
/**
|
|
7685
|
+
* @description Filter by who the session is waiting on
|
|
7686
|
+
* @enum {string}
|
|
7687
|
+
*/
|
|
7688
|
+
waiting_on?: "customers" | "human_agents";
|
|
7689
|
+
/** @description Filter by session custom data (OR between objects, AND within each object) */
|
|
7690
|
+
custom_data?: {
|
|
7691
|
+
[key: string]: string;
|
|
7692
|
+
}[];
|
|
7693
|
+
};
|
|
7694
|
+
/**
|
|
7695
|
+
* @description Sort field (default: last_message_at)
|
|
7696
|
+
* @enum {string}
|
|
7697
|
+
*/
|
|
7698
|
+
sort_by?: "last_message_at" | "created_at" | "sla_urgency";
|
|
7699
|
+
/**
|
|
7700
|
+
* @description Sort direction (default: desc)
|
|
7701
|
+
* @enum {string}
|
|
7702
|
+
*/
|
|
7703
|
+
sort_order?: "asc" | "desc";
|
|
7704
|
+
/**
|
|
7705
|
+
* @description Group the session list by this field. Omit for a flat list.
|
|
7706
|
+
* @enum {string}
|
|
7707
|
+
*/
|
|
7708
|
+
group_by?: "channel" | "assignee_id" | "status" | "ai_closure_type" | "language" | "inbox_id";
|
|
7709
|
+
/**
|
|
7710
|
+
* @description User ids the view is shared with. Leave both share lists empty to share the view with the whole organization. Name users and/or teams to restrict it to them, or pass only your own user id to keep it private. Sharing requires the `sessions-shared-views:write` permission — without it a created view is locked to its creator and the share lists on an update are ignored.
|
|
7711
|
+
* @default []
|
|
7712
|
+
*/
|
|
7713
|
+
shared_with_user_ids: number[];
|
|
7714
|
+
/**
|
|
7715
|
+
* @description Team ids (from GET /teams) whose members can see the view.
|
|
7716
|
+
* @default []
|
|
7717
|
+
*/
|
|
7718
|
+
shared_with_team_ids: string[];
|
|
7719
|
+
};
|
|
7720
|
+
UpdateInboxViewDto: {
|
|
7721
|
+
/** @description New name for the view */
|
|
7722
|
+
name?: string;
|
|
7723
|
+
/** @description Replaces the entire saved filter set — including the OR/exclude groups of an `advanced` view. Omit to leave the query untouched. */
|
|
7724
|
+
filters?: {
|
|
7725
|
+
/** @description Date range filter on session creation time */
|
|
7726
|
+
date?: {
|
|
7727
|
+
/**
|
|
7728
|
+
* Format: date-time
|
|
7729
|
+
* @description Start date (ISO 8601)
|
|
7730
|
+
*/
|
|
7731
|
+
from?: string;
|
|
7732
|
+
/**
|
|
7733
|
+
* Format: date-time
|
|
7734
|
+
* @description End date (ISO 8601)
|
|
7735
|
+
*/
|
|
7736
|
+
to?: string;
|
|
7737
|
+
/**
|
|
7738
|
+
* @description Rolling window resolved every time the view is opened: "today", "last_3_days" or "last_7_days". Mutually exclusive with from/to.
|
|
7739
|
+
* @enum {string}
|
|
7740
|
+
*/
|
|
7741
|
+
preset?: "today" | "last_3_days" | "last_7_days";
|
|
7742
|
+
};
|
|
7743
|
+
/** @description Filter by channels (web, email, whatsapp, phone_voice, sms, slack, etc.) */
|
|
7744
|
+
channels?: components["schemas"]["SessionChannel"][];
|
|
7745
|
+
/** @description Filter by built-in status codes (0 = open, 1 = closed_resolved, 2 = closed_unresolved) */
|
|
7746
|
+
status?: number[];
|
|
7747
|
+
/** @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. */
|
|
7748
|
+
sub_status_ids?: string[];
|
|
7749
|
+
/** @description Filter by AI closure type (e.g. "handed_off", "resolved", "no_resolution") */
|
|
7750
|
+
ai_closure?: ("assumed_resolved" | "handed_off" | "resolved")[];
|
|
7751
|
+
/** @description Filter by customer sentiment (angry, happy, neutral) */
|
|
7752
|
+
sentiment?: ("angry" | "happy" | "neutral")[];
|
|
7753
|
+
/** @description Filter by assignee user IDs (empty array = unassigned). The "$current_user" token resolves to whoever opens the view, so one shared view can mean "assigned to me" for every teammate. */
|
|
7754
|
+
assignees?: (number | "$current_user")[];
|
|
7755
|
+
/** @description Filter by team/group IDs */
|
|
7756
|
+
team_ids?: string[];
|
|
7757
|
+
/** @description Filter by contact IDs */
|
|
7758
|
+
contact_ids?: string[];
|
|
7759
|
+
/** @description Filter by exact ticket number */
|
|
7760
|
+
ticket_number?: number;
|
|
7761
|
+
/** @description Filter by session language codes */
|
|
7762
|
+
language?: string[];
|
|
7763
|
+
/** @description Filter by tag names (sessions must have ALL specified tags) */
|
|
7764
|
+
tags?: string[];
|
|
7765
|
+
/**
|
|
7766
|
+
* @description Filter by who the session is waiting on
|
|
7767
|
+
* @enum {string}
|
|
7768
|
+
*/
|
|
7769
|
+
waiting_on?: "customers" | "human_agents";
|
|
7770
|
+
/** @description Filter by session custom data (OR between objects, AND within each object) */
|
|
7771
|
+
custom_data?: {
|
|
7772
|
+
[key: string]: string;
|
|
7773
|
+
}[];
|
|
7774
|
+
};
|
|
7775
|
+
/**
|
|
7776
|
+
* @description New sort field
|
|
7777
|
+
* @enum {string}
|
|
7778
|
+
*/
|
|
7779
|
+
sort_by?: "last_message_at" | "created_at" | "sla_urgency";
|
|
7780
|
+
/**
|
|
7781
|
+
* @description New sort direction
|
|
7782
|
+
* @enum {string}
|
|
7783
|
+
*/
|
|
7784
|
+
sort_order?: "asc" | "desc";
|
|
7785
|
+
/** @description New grouping field; null removes grouping. Omit to leave it unchanged. */
|
|
7786
|
+
group_by?: ("channel" | "assignee_id" | "status" | "ai_closure_type" | "language" | "inbox_id") | null;
|
|
7787
|
+
/** @description User ids the view is shared with. Leave both share lists empty to share the view with the whole organization. Name users and/or teams to restrict it to them, or pass only your own user id to keep it private. Sharing requires the `sessions-shared-views:write` permission — without it a created view is locked to its creator and the share lists on an update are ignored. */
|
|
7788
|
+
shared_with_user_ids?: number[];
|
|
7789
|
+
/** @description Team ids (from GET /teams) whose members can see the view. */
|
|
7790
|
+
shared_with_team_ids?: string[];
|
|
7791
|
+
};
|
|
7537
7792
|
CreateWorkflowPublicInput: {
|
|
7538
7793
|
/** @description Workflow name */
|
|
7539
7794
|
name: string;
|
|
@@ -7543,7 +7798,7 @@ export interface components {
|
|
|
7543
7798
|
* @description What starts the workflow. Use "manual-trigger" for on-demand execution, "ai-trigger" for AI-initiated, "webhook" for external HTTP triggers, "cron-trigger" for scheduled runs, or event-based triggers like "ticket-created", "contact-created", etc.
|
|
7544
7799
|
* @enum {string}
|
|
7545
7800
|
*/
|
|
7546
|
-
trigger_type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "
|
|
7801
|
+
trigger_type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated" | "sequence-contact-replied" | "sequence-contact-completed" | "sequence-contact-parked" | "sequence-step-failed" | "sequence-contact-suppressed";
|
|
7547
7802
|
/** @description Trigger-specific configuration (e.g. cron expression for cron-trigger) */
|
|
7548
7803
|
trigger_configuration?: unknown | null;
|
|
7549
7804
|
/** @description Array of workflow steps and control-flow blocks. Each step is an object with { "$kind": "Action", "id": "<unique-step-id>", "type": "<action-type>", "name": "<display-name>", "input": { ... } }. Control-flow blocks use { "$kind": "Block", "type": "if-else", "id": "<unique-id>", "inputs": { "condition": { "operatorName": "equals", "left": "{{step_id.field}}", "right": "value" } }, "branches": { "then": [...steps], "else": [...steps] } }. Use {{step_id.field}} to reference outputs from previous steps (no `.output.` segment — the field sits directly under the step id). */
|
|
@@ -7560,7 +7815,7 @@ export interface components {
|
|
|
7560
7815
|
* @description New trigger type
|
|
7561
7816
|
* @enum {string}
|
|
7562
7817
|
*/
|
|
7563
|
-
trigger_type?: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "
|
|
7818
|
+
trigger_type?: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated" | "sequence-contact-replied" | "sequence-contact-completed" | "sequence-contact-parked" | "sequence-step-failed" | "sequence-contact-suppressed";
|
|
7564
7819
|
/** @description New trigger configuration */
|
|
7565
7820
|
trigger_configuration?: unknown | null;
|
|
7566
7821
|
/** @description New workflow step/block definitions (replaces existing blocks) */
|
|
@@ -7573,7 +7828,7 @@ export interface components {
|
|
|
7573
7828
|
* @description Trigger type to validate against
|
|
7574
7829
|
* @enum {string}
|
|
7575
7830
|
*/
|
|
7576
|
-
trigger_type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "
|
|
7831
|
+
trigger_type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated" | "sequence-contact-replied" | "sequence-contact-completed" | "sequence-contact-parked" | "sequence-step-failed" | "sequence-contact-suppressed";
|
|
7577
7832
|
/** @description Trigger configuration to validate against the trigger's configuration_def. When omitted, the trigger is validated as if unconfigured — triggers with required configuration (e.g. cron-trigger, ai-trigger) will report errors. */
|
|
7578
7833
|
trigger_configuration?: unknown | null;
|
|
7579
7834
|
/** @description Workflow blocks to validate */
|
|
@@ -7586,7 +7841,7 @@ export interface components {
|
|
|
7586
7841
|
* @description Trigger type whose payload shape this synthetic payload should match
|
|
7587
7842
|
* @enum {string}
|
|
7588
7843
|
*/
|
|
7589
|
-
type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "
|
|
7844
|
+
type: "manual-trigger" | "ai-trigger" | "cron-trigger" | "form-trigger" | "webhook" | "contact-created" | "contact-updated" | "phone-call-started" | "phone-call-finished" | "ticket-created" | "ticket-reassigned" | "ticket-resolved" | "ticket-handoff" | "pre-ticket-handoff" | "ticket-tag-added" | "ticket-inactive" | "agent-inactive" | "csat-score-submit" | "prohibited-topic-detected" | "sla-first-reply-breached" | "sla-next-reply-breached" | "sla-resolution-breached" | "voice-call-transferred" | "pre-voice-call-transfer" | "pre-phone-call-finished" | "manual-ticket-trigger" | "contact-message-received" | "first-contact-message-received" | "macro-called" | "ai-response-completed" | "agent-availability-changed" | "agent-avail-in-team-changed" | "ai-response-requested" | "ticket-reopened" | "agent-mentioned" | "agent-message-posted" | "ticket-team-changed" | "session-updated" | "sequence-contact-replied" | "sequence-contact-completed" | "sequence-contact-parked" | "sequence-step-failed" | "sequence-contact-suppressed";
|
|
7590
7845
|
payload: unknown;
|
|
7591
7846
|
};
|
|
7592
7847
|
};
|
|
@@ -8359,7 +8614,7 @@ export interface components {
|
|
|
8359
8614
|
/** @constant */
|
|
8360
8615
|
type: "response_skipped";
|
|
8361
8616
|
/** @enum {string} */
|
|
8362
|
-
reason?: "empty_response" | "potential_answers_dead_end" | "silent_handoff" | "assist_human_handling_recommended" | "superseded_by_newer_run" | "interrupted" | "flagged_as_spam";
|
|
8617
|
+
reason?: "empty_response" | "potential_answers_dead_end" | "silent_handoff" | "assist_human_handling_recommended" | "superseded_by_newer_run" | "interrupted" | "answered_in_narration" | "steered_into_live_turn" | "session_busy" | "flagged_as_spam";
|
|
8363
8618
|
reasoning?: ({
|
|
8364
8619
|
/** @constant */
|
|
8365
8620
|
type: "reasoning";
|
|
@@ -8662,7 +8917,7 @@ export interface components {
|
|
|
8662
8917
|
}) | null;
|
|
8663
8918
|
knowledgebase_called?: boolean | null;
|
|
8664
8919
|
/** @enum {string} */
|
|
8665
|
-
type: "agent_assigned_by_integration" | "agent_assigned_by_system" | "agent_assigned_by_user" | "agent_changed" | "agent_comment" | "agent_initiated_session" | "agent_joined" | "agent_message" | "agent_reopened_session" | "agent_took_session_from_ai" | "agent_unassigned_by_integration" | "agent_unassigned_by_system" | "agent_unassigned_by_user" | "ai_assumed_the_session_resolved" | "ai_decided_to_not_reply" | "ai_decided_to_resolve_the_issue" | "ai_reopened_session" | "ai_response_cancelled" | "ai_resumed_by_system" | "ai_suggestion" | "call_history" | "call_transferred" | "closed_resolved_by_agent" | "closed_resolved_by_api" | "closed_resolved_by_contact" | "closed_resolved_by_integration" | "closed_resolved_by_system" | "closed_unresolved_by_agent" | "closed_unresolved_by_api" | "closed_unresolved_by_system" | "contact_data_updated" | "csat_request_cancelled" | "csat_requested" | "csat_submitted" | "email_draft_message" | "handoff" | "handoff_to_salesforce_miaw" | "handoff_to_zendesk" | "integration_reopened_session" | "message" | "pii_attachment_removed" | "prohibited_topic_detected" | "quoted_content_modified" | "salesforce_fields_updated" | "sequence_message" | "session_forwarded" | "session_language_changed_by_agent" | "session_language_changed_by_api" | "session_language_changed_by_integration" | "session_language_changed_by_system" | "skills_added_by_system" | "sla_applied_by_agent" | "sla_applied_by_system" | "sla_first_reply_breached" | "sla_first_reply_completed_after_breach" | "sla_first_reply_fulfilled" | "sla_first_reply_metric_started" | "sla_freezed_office_hours_ended" | "sla_freezed_snoozed" | "sla_next_reply_breached" | "sla_next_reply_completed_after_breach" | "sla_next_reply_fulfilled" | "sla_next_reply_metric_started" | "sla_removed_by_agent" | "sla_removed_by_system" | "sla_resolution_breached" | "sla_resolution_completed_after_breach" | "sla_resolution_fulfilled" | "sla_resolution_metric_started" | "sla_resolution_paused_resolved" | "sla_resolution_paused_waiting_on_customer" | "sla_resolution_resumed_customer_replied" | "sla_resolution_resumed_reopened" | "sla_resumed_office_hours_started" | "sla_resumed_snooze_cancelled" | "sla_resumed_snooze_expired" | "state_checkpoint" | "sub_session_created" | "sub_session_linked_by_agent" | "sub_session_linked_by_api" | "sub_session_linked_by_integration" | "sub_session_linked_by_system" | "sub_session_unlinked_by_agent" | "sub_session_unlinked_by_api" | "sub_session_unlinked_by_integration" | "sub_session_unlinked_by_system" | "sub_status_removed_by_agent" | "sub_status_removed_by_api" | "sub_status_removed_by_integration" | "sub_status_removed_by_system" | "sub_status_set_by_agent" | "sub_status_set_by_api" | "sub_status_set_by_integration" | "sub_status_set_by_system" | "system_reopened_session" | "tag_added_by_agent" | "tag_added_by_api" | "tag_added_by_integration" | "tag_added_by_system" | "tag_removed_by_agent" | "tag_removed_by_api" | "tag_removed_by_integration" | "tag_removed_by_system" | "team_assigned_by_integration" | "team_assigned_by_system" | "team_assigned_by_user" | "team_unassigned_by_integration" | "team_unassigned_by_system" | "team_unassigned_by_user" | "user_confirmed_the_session_resolved" | "workflow_message" | "workflow_note" | "workflow_triggered";
|
|
8920
|
+
type: "agent_assigned_by_integration" | "agent_assigned_by_system" | "agent_assigned_by_user" | "agent_changed" | "agent_comment" | "agent_initiated_session" | "agent_joined" | "agent_message" | "agent_reopened_session" | "agent_took_session_from_ai" | "agent_unassigned_by_integration" | "agent_unassigned_by_system" | "agent_unassigned_by_user" | "ai_assumed_the_session_resolved" | "ai_decided_to_not_reply" | "ai_decided_to_resolve_the_issue" | "ai_follow_up_cancelled" | "ai_follow_up_fired" | "ai_follow_up_scheduled" | "ai_reopened_session" | "ai_response_cancelled" | "ai_resumed_by_system" | "ai_suggestion" | "call_history" | "call_transferred" | "closed_resolved_by_agent" | "closed_resolved_by_api" | "closed_resolved_by_contact" | "closed_resolved_by_integration" | "closed_resolved_by_system" | "closed_unresolved_by_agent" | "closed_unresolved_by_api" | "closed_unresolved_by_system" | "contact_data_updated" | "csat_request_cancelled" | "csat_requested" | "csat_submitted" | "email_draft_message" | "handoff" | "handoff_to_salesforce_miaw" | "handoff_to_third_party_failed" | "handoff_to_zendesk" | "integration_reopened_session" | "message" | "pii_attachment_removed" | "prohibited_topic_detected" | "quoted_content_modified" | "salesforce_fields_updated" | "sequence_message" | "session_forwarded" | "session_language_changed_by_agent" | "session_language_changed_by_api" | "session_language_changed_by_integration" | "session_language_changed_by_system" | "skills_added_by_system" | "sla_applied_by_agent" | "sla_applied_by_system" | "sla_first_reply_breached" | "sla_first_reply_completed_after_breach" | "sla_first_reply_fulfilled" | "sla_first_reply_metric_started" | "sla_freezed_office_hours_ended" | "sla_freezed_snoozed" | "sla_next_reply_breached" | "sla_next_reply_completed_after_breach" | "sla_next_reply_fulfilled" | "sla_next_reply_metric_started" | "sla_removed_by_agent" | "sla_removed_by_system" | "sla_resolution_breached" | "sla_resolution_completed_after_breach" | "sla_resolution_fulfilled" | "sla_resolution_metric_started" | "sla_resolution_paused_resolved" | "sla_resolution_paused_waiting_on_customer" | "sla_resolution_resumed_customer_replied" | "sla_resolution_resumed_reopened" | "sla_resumed_office_hours_started" | "sla_resumed_snooze_cancelled" | "sla_resumed_snooze_expired" | "state_checkpoint" | "sub_session_created" | "sub_session_linked_by_agent" | "sub_session_linked_by_api" | "sub_session_linked_by_integration" | "sub_session_linked_by_system" | "sub_session_unlinked_by_agent" | "sub_session_unlinked_by_api" | "sub_session_unlinked_by_integration" | "sub_session_unlinked_by_system" | "sub_status_removed_by_agent" | "sub_status_removed_by_api" | "sub_status_removed_by_integration" | "sub_status_removed_by_system" | "sub_status_set_by_agent" | "sub_status_set_by_api" | "sub_status_set_by_integration" | "sub_status_set_by_system" | "system_reopened_session" | "tag_added_by_agent" | "tag_added_by_api" | "tag_added_by_integration" | "tag_added_by_system" | "tag_removed_by_agent" | "tag_removed_by_api" | "tag_removed_by_integration" | "tag_removed_by_system" | "team_assigned_by_integration" | "team_assigned_by_system" | "team_assigned_by_user" | "team_unassigned_by_integration" | "team_unassigned_by_system" | "team_unassigned_by_user" | "user_confirmed_the_session_resolved" | "workflow_message" | "workflow_note" | "workflow_triggered";
|
|
8666
8921
|
extra_params?: {
|
|
8667
8922
|
[key: string]: unknown;
|
|
8668
8923
|
} | null;
|
|
@@ -9949,6 +10204,28 @@ export interface components {
|
|
|
9949
10204
|
fit: null;
|
|
9950
10205
|
previous_fit: number | null;
|
|
9951
10206
|
};
|
|
10207
|
+
ContinueSequenceContactOutputDto: {
|
|
10208
|
+
/** @enum {string} */
|
|
10209
|
+
outcome: "resumed" | "nothing_to_continue" | "not_resumable" | "contact_not_found";
|
|
10210
|
+
contact_id: string | null;
|
|
10211
|
+
next_step_index: number | null;
|
|
10212
|
+
};
|
|
10213
|
+
ContactSequencesDto: {
|
|
10214
|
+
sequences: {
|
|
10215
|
+
/** Format: uuid */
|
|
10216
|
+
sequence_id: string;
|
|
10217
|
+
sequence_name: string;
|
|
10218
|
+
/** @enum {string} */
|
|
10219
|
+
sequence_status: "draft" | "active" | "paused";
|
|
10220
|
+
/** @enum {string} */
|
|
10221
|
+
status: "candidate" | "active" | "parked" | "exited" | "completed";
|
|
10222
|
+
exit_reason: ("replied" | "suppressed") | null;
|
|
10223
|
+
park_reason: ("needs_data" | "unsendable_person" | "template_broken") | null;
|
|
10224
|
+
next_step_index: number;
|
|
10225
|
+
/** Format: date-time */
|
|
10226
|
+
enrolled_at: string;
|
|
10227
|
+
}[];
|
|
10228
|
+
};
|
|
9952
10229
|
MailboxHealthDto: {
|
|
9953
10230
|
warmupStatus: string | null;
|
|
9954
10231
|
inboxRate: number | null;
|
|
@@ -10466,16 +10743,16 @@ export interface components {
|
|
|
10466
10743
|
AddSequenceContactsOutputDto: {
|
|
10467
10744
|
results: {
|
|
10468
10745
|
/**
|
|
10469
|
-
* @description enrolled: new row created · updated: existing candidate refreshed — or a parked person given new data,
|
|
10746
|
+
* @description enrolled: new row created · updated: existing candidate refreshed — or a parked person given new data, who resumes their step: armed immediately on a live sequence, back to candidate on a draft or when their judged fit is below the cutoff; a parked person given ONLY session_custom_data keeps it merged and stays parked · already_enrolled: already active/completed here (or parked with nothing new supplied), no-op · skipped_previously_exited: exited here — an exit is terminal, enrolling never restarts a concluded journey · skipped_suppressed: on the do-not-contact list · skipped_active_elsewhere: active in another campaign (block-toggle) · skipped_contacted_before: some campaign already messaged them (block-toggle) · no_identity: no valid phone, email, or whatsapp_user_id after normalization · extra_data_too_large: the extra_data bag exceeds its budget (detail carries size and budget), nothing written — trim and retry just this person · session_custom_data_too_large: the session bag — or its per-key merge with what the person already holds (detail.merged=true) — exceeds 50 keys / 8,000 characters (detail carries keys, size and the caps), nothing written — trim and retry just this person · conflict: handles match two different existing people (detail.matches carries their contact ids), nothing written · error: this row failed unexpectedly, retry just this person
|
|
10470
10747
|
* @enum {string}
|
|
10471
10748
|
*/
|
|
10472
|
-
outcome: "enrolled" | "updated" | "already_enrolled" | "skipped_previously_exited" | "skipped_suppressed" | "skipped_active_elsewhere" | "skipped_contacted_before" | "no_identity" | "extra_data_too_large" | "conflict" | "error";
|
|
10749
|
+
outcome: "enrolled" | "updated" | "already_enrolled" | "skipped_previously_exited" | "skipped_suppressed" | "skipped_active_elsewhere" | "skipped_contacted_before" | "no_identity" | "extra_data_too_large" | "session_custom_data_too_large" | "conflict" | "error";
|
|
10473
10750
|
/**
|
|
10474
10751
|
* Format: uuid
|
|
10475
10752
|
* @description The person's CRM contact — the identifier every person-scoped op takes. Present whenever a row exists (enrolled, updated, already_enrolled, skipped_previously_exited, and suppressed people who already held a row); absent for outcomes that never touched a row.
|
|
10476
10753
|
*/
|
|
10477
10754
|
contact_id?: string;
|
|
10478
|
-
/** @description Machine-readable context: dropped=[fields rejected by normalization] · in_batch=true (duplicate within this call) · matches=[contact ids] on conflict · per-channel suppressed addresses · size/budget (and merged=true when the stored bag would overflow) on extra_data_too_large */
|
|
10755
|
+
/** @description Machine-readable context: dropped=[fields rejected by normalization] · in_batch=true (duplicate within this call) · matches=[contact ids] on conflict · per-channel suppressed addresses · size/budget (and merged=true when the stored bag would overflow) on extra_data_too_large · keys/max_keys/size/max_size (and merged=true) on session_custom_data_too_large */
|
|
10479
10756
|
detail?: {
|
|
10480
10757
|
[key: string]: unknown;
|
|
10481
10758
|
};
|
|
@@ -11626,7 +11903,7 @@ export interface components {
|
|
|
11626
11903
|
} | ({
|
|
11627
11904
|
/** @constant */
|
|
11628
11905
|
success: true;
|
|
11629
|
-
code?: string | "session_assigned_to_human_agent" | "response_cancelled" | "skipping_unuseful_response" | "duplicate_message_ignored" | "ai_response_skipped_by_workflow" | "ai_skipped_spam";
|
|
11906
|
+
code?: string | "session_assigned_to_human_agent" | "response_cancelled" | "skipping_unuseful_response" | "duplicate_message_ignored" | "ai_response_skipped_by_workflow" | "ai_skipped_spam" | "steered_into_live_turn" | "session_busy";
|
|
11630
11907
|
autopilotResponse?: {
|
|
11631
11908
|
/** @constant */
|
|
11632
11909
|
type: "text";
|
|
@@ -11779,6 +12056,7 @@ export interface components {
|
|
|
11779
12056
|
mightSolveUserIssue: boolean;
|
|
11780
12057
|
};
|
|
11781
12058
|
sessionIsHandedOff?: boolean;
|
|
12059
|
+
steeredIntoTurnId?: string;
|
|
11782
12060
|
resolveArgs?: {
|
|
11783
12061
|
/** @description Summary of the conversation with the user to be viewed by a human agent. */
|
|
11784
12062
|
summary: string;
|
|
@@ -12083,6 +12361,10 @@ export interface components {
|
|
|
12083
12361
|
* @description When the follow-up fires (UTC)
|
|
12084
12362
|
*/
|
|
12085
12363
|
fire_at: string;
|
|
12364
|
+
repeat: {
|
|
12365
|
+
every_minutes: number;
|
|
12366
|
+
times: number;
|
|
12367
|
+
} | null;
|
|
12086
12368
|
is_active: boolean;
|
|
12087
12369
|
/** Format: date-time */
|
|
12088
12370
|
created_at: string;
|
|
@@ -12340,6 +12622,11 @@ export interface components {
|
|
|
12340
12622
|
channel: string;
|
|
12341
12623
|
/** @description Whether the AI autopilot is enabled on this channel */
|
|
12342
12624
|
autopilot_enabled: boolean;
|
|
12625
|
+
/**
|
|
12626
|
+
* @description AI agent version used on this channel
|
|
12627
|
+
* @enum {string}
|
|
12628
|
+
*/
|
|
12629
|
+
ai_agent_version: "v1" | "v2";
|
|
12343
12630
|
}[];
|
|
12344
12631
|
};
|
|
12345
12632
|
ProhibitedTopicsResponseDto: {
|
|
@@ -12525,6 +12812,87 @@ export interface components {
|
|
|
12525
12812
|
/** Format: date-time */
|
|
12526
12813
|
updated_at: string;
|
|
12527
12814
|
};
|
|
12815
|
+
InboxViewDto: {
|
|
12816
|
+
/** Format: uuid */
|
|
12817
|
+
id: string;
|
|
12818
|
+
/** @description Name shown in the inbox view picker */
|
|
12819
|
+
name: string;
|
|
12820
|
+
/** @description The saved filter set. `null` when `advanced` is true — the view uses filters this API cannot express. */
|
|
12821
|
+
filters: {
|
|
12822
|
+
/** @description Date range filter on session creation time */
|
|
12823
|
+
date?: {
|
|
12824
|
+
/**
|
|
12825
|
+
* Format: date-time
|
|
12826
|
+
* @description Start date (ISO 8601)
|
|
12827
|
+
*/
|
|
12828
|
+
from?: string;
|
|
12829
|
+
/**
|
|
12830
|
+
* Format: date-time
|
|
12831
|
+
* @description End date (ISO 8601)
|
|
12832
|
+
*/
|
|
12833
|
+
to?: string;
|
|
12834
|
+
/**
|
|
12835
|
+
* @description Rolling window resolved every time the view is opened: "today", "last_3_days" or "last_7_days". Mutually exclusive with from/to.
|
|
12836
|
+
* @enum {string}
|
|
12837
|
+
*/
|
|
12838
|
+
preset?: "today" | "last_3_days" | "last_7_days";
|
|
12839
|
+
};
|
|
12840
|
+
/** @description Filter by channels (web, email, whatsapp, phone_voice, sms, slack, etc.) */
|
|
12841
|
+
channels?: components["schemas"]["SessionChannel"][];
|
|
12842
|
+
/** @description Filter by built-in status codes (0 = open, 1 = closed_resolved, 2 = closed_unresolved) */
|
|
12843
|
+
status?: number[];
|
|
12844
|
+
/** @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. */
|
|
12845
|
+
sub_status_ids?: string[];
|
|
12846
|
+
/** @description Filter by AI closure type (e.g. "handed_off", "resolved", "no_resolution") */
|
|
12847
|
+
ai_closure?: ("assumed_resolved" | "handed_off" | "resolved")[];
|
|
12848
|
+
/** @description Filter by customer sentiment (angry, happy, neutral) */
|
|
12849
|
+
sentiment?: ("angry" | "happy" | "neutral")[];
|
|
12850
|
+
/** @description Filter by assignee user IDs (empty array = unassigned). The "$current_user" token resolves to whoever opens the view, so one shared view can mean "assigned to me" for every teammate. */
|
|
12851
|
+
assignees?: (number | "$current_user")[];
|
|
12852
|
+
/** @description Filter by team/group IDs */
|
|
12853
|
+
team_ids?: string[];
|
|
12854
|
+
/** @description Filter by contact IDs */
|
|
12855
|
+
contact_ids?: string[];
|
|
12856
|
+
/** @description Filter by exact ticket number */
|
|
12857
|
+
ticket_number?: number;
|
|
12858
|
+
/** @description Filter by session language codes */
|
|
12859
|
+
language?: string[];
|
|
12860
|
+
/** @description Filter by tag names (sessions must have ALL specified tags) */
|
|
12861
|
+
tags?: string[];
|
|
12862
|
+
/**
|
|
12863
|
+
* @description Filter by who the session is waiting on
|
|
12864
|
+
* @enum {string}
|
|
12865
|
+
*/
|
|
12866
|
+
waiting_on?: "customers" | "human_agents";
|
|
12867
|
+
/** @description Filter by session custom data (OR between objects, AND within each object) */
|
|
12868
|
+
custom_data?: {
|
|
12869
|
+
[key: string]: string;
|
|
12870
|
+
}[];
|
|
12871
|
+
} | null;
|
|
12872
|
+
/** @description True when the view was built in the dashboard with OR/exclude groups or filters outside this API's vocabulary. Its `filters` read back as null, and updating `filters` on it REPLACES the whole saved query with the simple set you send. */
|
|
12873
|
+
advanced: boolean;
|
|
12874
|
+
/** @description Sort field the view opens with */
|
|
12875
|
+
sort_by: ("last_message_at" | "created_at" | "sla_urgency") | null;
|
|
12876
|
+
/** @description Sort direction the view opens with */
|
|
12877
|
+
sort_order: ("asc" | "desc") | null;
|
|
12878
|
+
/** @description Field sessions are grouped by in the list, when the view groups them */
|
|
12879
|
+
group_by: ("channel" | "assignee_id" | "status" | "ai_closure_type" | "language" | "inbox_id") | null;
|
|
12880
|
+
/** @description User ids the view is shared with. Empty (with no teams) means the whole org. */
|
|
12881
|
+
shared_with_user_ids: number[];
|
|
12882
|
+
/** @description Team ids the view is shared with. Empty (with no users) means the whole org. */
|
|
12883
|
+
shared_with_team_ids: string[];
|
|
12884
|
+
/** @enum {string} */
|
|
12885
|
+
visibility: "organization" | "personal" | "restricted";
|
|
12886
|
+
created_by_user_id: number;
|
|
12887
|
+
/** @description Whether the calling user may update this view */
|
|
12888
|
+
can_edit: boolean;
|
|
12889
|
+
/** @description Whether the calling user may delete this view */
|
|
12890
|
+
can_delete: boolean;
|
|
12891
|
+
/** Format: date-time */
|
|
12892
|
+
created_at: string;
|
|
12893
|
+
/** Format: date-time */
|
|
12894
|
+
updated_at: string;
|
|
12895
|
+
};
|
|
12528
12896
|
WorkflowPublicResponseDto: {
|
|
12529
12897
|
/** @description Version serial ID */
|
|
12530
12898
|
id: number;
|
|
@@ -13395,6 +13763,7 @@ export interface components {
|
|
|
13395
13763
|
DeleteCustomStatusOutput: {
|
|
13396
13764
|
message: string;
|
|
13397
13765
|
};
|
|
13766
|
+
ListInboxViewsOutput: components["schemas"]["InboxViewDto"][];
|
|
13398
13767
|
ListWorkflowsOutput: components["schemas"]["WorkflowPublicResponseDto"][];
|
|
13399
13768
|
DeleteWorkflowOutput: {
|
|
13400
13769
|
success: boolean;
|
|
@@ -18959,6 +19328,136 @@ export interface operations {
|
|
|
18959
19328
|
};
|
|
18960
19329
|
};
|
|
18961
19330
|
};
|
|
19331
|
+
listInboxViews: {
|
|
19332
|
+
parameters: {
|
|
19333
|
+
query?: never;
|
|
19334
|
+
header?: never;
|
|
19335
|
+
path?: never;
|
|
19336
|
+
cookie?: never;
|
|
19337
|
+
};
|
|
19338
|
+
requestBody?: never;
|
|
19339
|
+
responses: {
|
|
19340
|
+
/** @description Default Response */
|
|
19341
|
+
200: {
|
|
19342
|
+
headers: {
|
|
19343
|
+
[name: string]: unknown;
|
|
19344
|
+
};
|
|
19345
|
+
content: {
|
|
19346
|
+
"application/json": components["schemas"]["ListInboxViewsOutput"];
|
|
19347
|
+
};
|
|
19348
|
+
};
|
|
19349
|
+
/** @description Internal Server Error */
|
|
19350
|
+
500: {
|
|
19351
|
+
headers: {
|
|
19352
|
+
[name: string]: unknown;
|
|
19353
|
+
};
|
|
19354
|
+
content: {
|
|
19355
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
19356
|
+
};
|
|
19357
|
+
};
|
|
19358
|
+
};
|
|
19359
|
+
};
|
|
19360
|
+
createInboxView: {
|
|
19361
|
+
parameters: {
|
|
19362
|
+
query?: never;
|
|
19363
|
+
header?: never;
|
|
19364
|
+
path?: never;
|
|
19365
|
+
cookie?: never;
|
|
19366
|
+
};
|
|
19367
|
+
requestBody: {
|
|
19368
|
+
content: {
|
|
19369
|
+
"application/json": components["schemas"]["CreateInboxViewDto"];
|
|
19370
|
+
};
|
|
19371
|
+
};
|
|
19372
|
+
responses: {
|
|
19373
|
+
/** @description Default Response */
|
|
19374
|
+
201: {
|
|
19375
|
+
headers: {
|
|
19376
|
+
[name: string]: unknown;
|
|
19377
|
+
};
|
|
19378
|
+
content: {
|
|
19379
|
+
"application/json": components["schemas"]["InboxViewDto"];
|
|
19380
|
+
};
|
|
19381
|
+
};
|
|
19382
|
+
/** @description Internal Server Error */
|
|
19383
|
+
500: {
|
|
19384
|
+
headers: {
|
|
19385
|
+
[name: string]: unknown;
|
|
19386
|
+
};
|
|
19387
|
+
content: {
|
|
19388
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
19389
|
+
};
|
|
19390
|
+
};
|
|
19391
|
+
};
|
|
19392
|
+
};
|
|
19393
|
+
deleteInboxView: {
|
|
19394
|
+
parameters: {
|
|
19395
|
+
query?: never;
|
|
19396
|
+
header?: never;
|
|
19397
|
+
path: {
|
|
19398
|
+
/** @description The inbox view id */
|
|
19399
|
+
id: string;
|
|
19400
|
+
};
|
|
19401
|
+
cookie?: never;
|
|
19402
|
+
};
|
|
19403
|
+
requestBody?: never;
|
|
19404
|
+
responses: {
|
|
19405
|
+
/** @description Default Response */
|
|
19406
|
+
200: {
|
|
19407
|
+
headers: {
|
|
19408
|
+
[name: string]: unknown;
|
|
19409
|
+
};
|
|
19410
|
+
content: {
|
|
19411
|
+
"application/json": components["schemas"]["GenericResponseDto"];
|
|
19412
|
+
};
|
|
19413
|
+
};
|
|
19414
|
+
/** @description Internal Server Error */
|
|
19415
|
+
500: {
|
|
19416
|
+
headers: {
|
|
19417
|
+
[name: string]: unknown;
|
|
19418
|
+
};
|
|
19419
|
+
content: {
|
|
19420
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
19421
|
+
};
|
|
19422
|
+
};
|
|
19423
|
+
};
|
|
19424
|
+
};
|
|
19425
|
+
updateInboxView: {
|
|
19426
|
+
parameters: {
|
|
19427
|
+
query?: never;
|
|
19428
|
+
header?: never;
|
|
19429
|
+
path: {
|
|
19430
|
+
/** @description The inbox view id */
|
|
19431
|
+
id: string;
|
|
19432
|
+
};
|
|
19433
|
+
cookie?: never;
|
|
19434
|
+
};
|
|
19435
|
+
requestBody: {
|
|
19436
|
+
content: {
|
|
19437
|
+
"application/json": components["schemas"]["UpdateInboxViewDto"];
|
|
19438
|
+
};
|
|
19439
|
+
};
|
|
19440
|
+
responses: {
|
|
19441
|
+
/** @description Default Response */
|
|
19442
|
+
200: {
|
|
19443
|
+
headers: {
|
|
19444
|
+
[name: string]: unknown;
|
|
19445
|
+
};
|
|
19446
|
+
content: {
|
|
19447
|
+
"application/json": components["schemas"]["InboxViewDto"];
|
|
19448
|
+
};
|
|
19449
|
+
};
|
|
19450
|
+
/** @description Internal Server Error */
|
|
19451
|
+
500: {
|
|
19452
|
+
headers: {
|
|
19453
|
+
[name: string]: unknown;
|
|
19454
|
+
};
|
|
19455
|
+
content: {
|
|
19456
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
19457
|
+
};
|
|
19458
|
+
};
|
|
19459
|
+
};
|
|
19460
|
+
};
|
|
18962
19461
|
listWorkflowDefinitions: {
|
|
18963
19462
|
parameters: {
|
|
18964
19463
|
query?: never;
|
|
@@ -21338,6 +21837,72 @@ export interface operations {
|
|
|
21338
21837
|
};
|
|
21339
21838
|
};
|
|
21340
21839
|
};
|
|
21840
|
+
continueSequenceContact: {
|
|
21841
|
+
parameters: {
|
|
21842
|
+
query?: never;
|
|
21843
|
+
header?: never;
|
|
21844
|
+
path: {
|
|
21845
|
+
/** @description The unique identifier of the sequence */
|
|
21846
|
+
sequenceId: string;
|
|
21847
|
+
/** @description The person's contact id (from enroll results or the people list) */
|
|
21848
|
+
contactId: string;
|
|
21849
|
+
};
|
|
21850
|
+
cookie?: never;
|
|
21851
|
+
};
|
|
21852
|
+
requestBody?: never;
|
|
21853
|
+
responses: {
|
|
21854
|
+
/** @description Default Response */
|
|
21855
|
+
201: {
|
|
21856
|
+
headers: {
|
|
21857
|
+
[name: string]: unknown;
|
|
21858
|
+
};
|
|
21859
|
+
content: {
|
|
21860
|
+
"application/json": components["schemas"]["ContinueSequenceContactOutputDto"];
|
|
21861
|
+
};
|
|
21862
|
+
};
|
|
21863
|
+
/** @description Internal Server Error */
|
|
21864
|
+
500: {
|
|
21865
|
+
headers: {
|
|
21866
|
+
[name: string]: unknown;
|
|
21867
|
+
};
|
|
21868
|
+
content: {
|
|
21869
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
21870
|
+
};
|
|
21871
|
+
};
|
|
21872
|
+
};
|
|
21873
|
+
};
|
|
21874
|
+
listContactSequences: {
|
|
21875
|
+
parameters: {
|
|
21876
|
+
query?: never;
|
|
21877
|
+
header?: never;
|
|
21878
|
+
path: {
|
|
21879
|
+
/** @description The person's contact id */
|
|
21880
|
+
contactId: string;
|
|
21881
|
+
};
|
|
21882
|
+
cookie?: never;
|
|
21883
|
+
};
|
|
21884
|
+
requestBody?: never;
|
|
21885
|
+
responses: {
|
|
21886
|
+
/** @description Default Response */
|
|
21887
|
+
200: {
|
|
21888
|
+
headers: {
|
|
21889
|
+
[name: string]: unknown;
|
|
21890
|
+
};
|
|
21891
|
+
content: {
|
|
21892
|
+
"application/json": components["schemas"]["ContactSequencesDto"];
|
|
21893
|
+
};
|
|
21894
|
+
};
|
|
21895
|
+
/** @description Internal Server Error */
|
|
21896
|
+
500: {
|
|
21897
|
+
headers: {
|
|
21898
|
+
[name: string]: unknown;
|
|
21899
|
+
};
|
|
21900
|
+
content: {
|
|
21901
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
21902
|
+
};
|
|
21903
|
+
};
|
|
21904
|
+
};
|
|
21905
|
+
};
|
|
21341
21906
|
exitSequenceContact: {
|
|
21342
21907
|
parameters: {
|
|
21343
21908
|
query?: never;
|