@opencx/mcp 1.15.15 → 1.15.16
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/companies.spec.d.ts +2 -0
- package/dist/companies.spec.d.ts.map +1 -0
- package/dist/companies.spec.js +191 -0
- package/dist/companies.spec.js.map +1 -0
- package/dist/schema.d.ts +436 -9
- 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/companies.d.ts +4 -0
- package/dist/tools/companies.d.ts.map +1 -0
- package/dist/tools/companies.js +127 -0
- package/dist/tools/companies.js.map +1 -0
- package/dist/utils/session-channel.d.ts +2 -2
- package/dist/utils/session-channel.d.ts.map +1 -1
- package/dist/utils/session-channel.js +1 -0
- package/dist/utils/session-channel.js.map +1 -1
- package/package.json +1 -1
package/dist/schema.d.ts
CHANGED
|
@@ -653,6 +653,26 @@ export interface paths {
|
|
|
653
653
|
patch?: never;
|
|
654
654
|
trace?: never;
|
|
655
655
|
};
|
|
656
|
+
"/companies/{external_id}/owner": {
|
|
657
|
+
parameters: {
|
|
658
|
+
query?: never;
|
|
659
|
+
header?: never;
|
|
660
|
+
path?: never;
|
|
661
|
+
cookie?: never;
|
|
662
|
+
};
|
|
663
|
+
get?: never;
|
|
664
|
+
/**
|
|
665
|
+
* Set a company's owning teammate
|
|
666
|
+
* @description Assigns the teammate who owns this account, named either by `agent_owner_id` or by `agent_owner_email` — exactly one. The email is matched case-insensitively against this organization's members, so a sync can assign straight from the address it already holds. Send either field as null to clear the owner. A teammate who is not a member of this organization is rejected, as is the AI user.
|
|
667
|
+
*/
|
|
668
|
+
put: operations["setCompanyOwner"];
|
|
669
|
+
post?: never;
|
|
670
|
+
delete?: never;
|
|
671
|
+
options?: never;
|
|
672
|
+
head?: never;
|
|
673
|
+
patch?: never;
|
|
674
|
+
trace?: never;
|
|
675
|
+
};
|
|
656
676
|
"/contacts": {
|
|
657
677
|
parameters: {
|
|
658
678
|
query?: never;
|
|
@@ -1496,6 +1516,62 @@ export interface paths {
|
|
|
1496
1516
|
patch?: never;
|
|
1497
1517
|
trace?: never;
|
|
1498
1518
|
};
|
|
1519
|
+
"/outbound/blocklist": {
|
|
1520
|
+
parameters: {
|
|
1521
|
+
query?: never;
|
|
1522
|
+
header?: never;
|
|
1523
|
+
path?: never;
|
|
1524
|
+
cookie?: never;
|
|
1525
|
+
};
|
|
1526
|
+
/**
|
|
1527
|
+
* List blocked addresses
|
|
1528
|
+
* @description Lists the do-not-contact list, newest first. Includes both entries you added and entries recorded when people opted out themselves — check `source` to tell them apart.
|
|
1529
|
+
*/
|
|
1530
|
+
get: operations["listOutboundBlocklist"];
|
|
1531
|
+
put?: never;
|
|
1532
|
+
/**
|
|
1533
|
+
* Block an address from outbound contact
|
|
1534
|
+
* @description Adds a phone number, email address, or WhatsApp user id to the do-not-contact list. Sequences will not contact a blocked address on any channel.
|
|
1535
|
+
*
|
|
1536
|
+
* Safe to call repeatedly — blocking an address that is already blocked updates the existing entry instead of failing, so retrying a queued job is harmless.
|
|
1537
|
+
*
|
|
1538
|
+
* Blocking only ever strengthens: re-blocking an address never shortens an existing expiry and never makes a permanent block temporary. Use the unblock endpoint to lift a block.
|
|
1539
|
+
*/
|
|
1540
|
+
post: operations["addToOutboundBlocklist"];
|
|
1541
|
+
/**
|
|
1542
|
+
* Unblock an address
|
|
1543
|
+
* @description Removes an address from the do-not-contact list so it can be contacted again.
|
|
1544
|
+
*
|
|
1545
|
+
* By default this only removes entries added through this API. Two kinds are left in place: entries created when someone opted out themselves, and entries that cover a single channel. Both are reported as `skipped` — pass `include_provider_entries=true` to remove them too.
|
|
1546
|
+
*/
|
|
1547
|
+
delete: operations["removeFromOutboundBlocklist"];
|
|
1548
|
+
options?: never;
|
|
1549
|
+
head?: never;
|
|
1550
|
+
patch?: never;
|
|
1551
|
+
trace?: never;
|
|
1552
|
+
};
|
|
1553
|
+
"/outbound/blocklist/check": {
|
|
1554
|
+
parameters: {
|
|
1555
|
+
query?: never;
|
|
1556
|
+
header?: never;
|
|
1557
|
+
path?: never;
|
|
1558
|
+
cookie?: never;
|
|
1559
|
+
};
|
|
1560
|
+
/**
|
|
1561
|
+
* Check whether an address is blocked
|
|
1562
|
+
* @description Tells you whether an address is currently on the do-not-contact list. Expired entries do not count as blocked.
|
|
1563
|
+
*
|
|
1564
|
+
* `blocked` means the address is suppressed on at least one channel — check the `channel` on each returned entry to see which. Note this answers for the address you ask about: someone reachable on WhatsApp without a known phone number is a separate identity, so block the WhatsApp user id too if you have it.
|
|
1565
|
+
*/
|
|
1566
|
+
get: operations["checkOutboundBlocklist"];
|
|
1567
|
+
put?: never;
|
|
1568
|
+
post?: never;
|
|
1569
|
+
delete?: never;
|
|
1570
|
+
options?: never;
|
|
1571
|
+
head?: never;
|
|
1572
|
+
patch?: never;
|
|
1573
|
+
trace?: never;
|
|
1574
|
+
};
|
|
1499
1575
|
"/email": {
|
|
1500
1576
|
parameters: {
|
|
1501
1577
|
query?: never;
|
|
@@ -2803,6 +2879,51 @@ export interface paths {
|
|
|
2803
2879
|
patch?: never;
|
|
2804
2880
|
trace?: never;
|
|
2805
2881
|
};
|
|
2882
|
+
"/sequences/{sequence_id}/contacts/exit": {
|
|
2883
|
+
parameters: {
|
|
2884
|
+
query?: never;
|
|
2885
|
+
header?: never;
|
|
2886
|
+
path?: never;
|
|
2887
|
+
cookie?: never;
|
|
2888
|
+
};
|
|
2889
|
+
get?: never;
|
|
2890
|
+
put?: never;
|
|
2891
|
+
/**
|
|
2892
|
+
* Remove a contact from a sequence
|
|
2893
|
+
* @description
|
|
2894
|
+
* Stop a sequence for one contact. No further steps are scheduled for them; the rest of the sequence
|
|
2895
|
+
* carries on for everyone else.
|
|
2896
|
+
*
|
|
2897
|
+
* One caveat worth building around: a step whose batch has already been picked up for sending may
|
|
2898
|
+
* still go out, and batches can sit waiting for the sequence's send window to open. So a message sent
|
|
2899
|
+
* within minutes of the removal — or the next morning, if the window closed overnight — is possible.
|
|
2900
|
+
* Everything after that stops.
|
|
2901
|
+
*
|
|
2902
|
+
* Identify the person by `contact_id`, `email`, or `phone_number` — whichever your system holds.
|
|
2903
|
+
* Send exactly one. Phone numbers match regardless of formatting.
|
|
2904
|
+
*
|
|
2905
|
+
* Removal works on the person, not on one record. Whichever identifier you send, any other contact
|
|
2906
|
+
* record sharing that person's phone number is removed too — duplicates are common and leaving one
|
|
2907
|
+
* behind would keep calling them. The flip side: if two people genuinely share a line, such as a
|
|
2908
|
+
* switchboard or a family phone, both are removed. `contact_ids` in the response lists exactly which
|
|
2909
|
+
* records were affected, so check it if that matters to you.
|
|
2910
|
+
*
|
|
2911
|
+
* Removal ends their current enrollment. Adding the same contact to the sequence again later enrolls
|
|
2912
|
+
* them afresh, starting from the first step — it does not resume where they stopped. It applies only
|
|
2913
|
+
* to this sequence, so to stop contacting someone everywhere, add them to the outbound blocklist
|
|
2914
|
+
* instead.
|
|
2915
|
+
*
|
|
2916
|
+
* Safe to retry: a contact who is already out of the sequence comes back as `not_enrolled` rather
|
|
2917
|
+
* than an error.
|
|
2918
|
+
*
|
|
2919
|
+
*/
|
|
2920
|
+
post: operations["exitContactFromSequence"];
|
|
2921
|
+
delete?: never;
|
|
2922
|
+
options?: never;
|
|
2923
|
+
head?: never;
|
|
2924
|
+
patch?: never;
|
|
2925
|
+
trace?: never;
|
|
2926
|
+
};
|
|
2806
2927
|
"/teams": {
|
|
2807
2928
|
parameters: {
|
|
2808
2929
|
query?: never;
|
|
@@ -4997,7 +5118,7 @@ export type webhooks = Record<string, never>;
|
|
|
4997
5118
|
export interface components {
|
|
4998
5119
|
schemas: {
|
|
4999
5120
|
/** @enum {string} */
|
|
5000
|
-
SessionChannel: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
|
|
5121
|
+
SessionChannel: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
|
|
5001
5122
|
DefaultOfficeHoursInputDto: {
|
|
5002
5123
|
/** @description IANA timezone for the default schedule (e.g. "America/New_York", "Europe/London", "Asia/Tokyo") */
|
|
5003
5124
|
iana_timezone: string;
|
|
@@ -5318,12 +5439,23 @@ export interface components {
|
|
|
5318
5439
|
}[];
|
|
5319
5440
|
})[];
|
|
5320
5441
|
};
|
|
5442
|
+
CompanyOwnerInput: {
|
|
5443
|
+
/** @description OpenCX user id of the owning teammate */
|
|
5444
|
+
id?: number;
|
|
5445
|
+
/**
|
|
5446
|
+
* Format: email
|
|
5447
|
+
* @description Email of the owning teammate, matched case-insensitively against this organization’s members
|
|
5448
|
+
*/
|
|
5449
|
+
email?: string;
|
|
5450
|
+
};
|
|
5321
5451
|
UpsertCompanyDto: {
|
|
5322
5452
|
external_id: string;
|
|
5323
5453
|
name?: string;
|
|
5324
5454
|
custom_data?: {
|
|
5325
5455
|
[key: string]: string | number | boolean | null;
|
|
5326
5456
|
};
|
|
5457
|
+
/** @description Set the owning teammate while creating or updating. Omit to leave ownership unchanged; null clears it. */
|
|
5458
|
+
owner?: components["schemas"]["CompanyOwnerInput"] | null;
|
|
5327
5459
|
};
|
|
5328
5460
|
BulkLinkContactsDto: {
|
|
5329
5461
|
links: {
|
|
@@ -5346,6 +5478,10 @@ export interface components {
|
|
|
5346
5478
|
LinkContactCompanyDto: {
|
|
5347
5479
|
external_id: string;
|
|
5348
5480
|
};
|
|
5481
|
+
SetCompanyOwnerDto: {
|
|
5482
|
+
/** @description The teammate who owns this account. Null leaves the company unowned. */
|
|
5483
|
+
owner: components["schemas"]["CompanyOwnerInput"] | null;
|
|
5484
|
+
};
|
|
5349
5485
|
MakeOutboundCallDto: {
|
|
5350
5486
|
phoneAgentId: string;
|
|
5351
5487
|
contact: {
|
|
@@ -6269,6 +6405,22 @@ export interface components {
|
|
|
6269
6405
|
phone_number: string;
|
|
6270
6406
|
})[];
|
|
6271
6407
|
};
|
|
6408
|
+
ExitContactFromSequenceDto: {
|
|
6409
|
+
/**
|
|
6410
|
+
* Format: uuid
|
|
6411
|
+
* @description The contact to remove.
|
|
6412
|
+
*/
|
|
6413
|
+
contact_id?: string;
|
|
6414
|
+
/**
|
|
6415
|
+
* Format: email
|
|
6416
|
+
* @description Email address of the contact to remove.
|
|
6417
|
+
*/
|
|
6418
|
+
email?: string;
|
|
6419
|
+
/** @description Phone number of the contact to remove. Formatting does not matter. */
|
|
6420
|
+
phone_number?: string;
|
|
6421
|
+
/** @description Why they are being removed. Recorded against the removal for your own records. */
|
|
6422
|
+
reason?: string;
|
|
6423
|
+
};
|
|
6272
6424
|
CreateTrainingPublicDto: {
|
|
6273
6425
|
/** @description The scenario title or trigger phrase */
|
|
6274
6426
|
title: string;
|
|
@@ -6366,7 +6518,7 @@ export interface components {
|
|
|
6366
6518
|
* @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.
|
|
6367
6519
|
* @enum {string}
|
|
6368
6520
|
*/
|
|
6369
|
-
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" | "sequence-completed" | "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" | "ticket-team-changed" | "session-updated"
|
|
6521
|
+
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" | "sequence-completed" | "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" | "ticket-team-changed" | "session-updated";
|
|
6370
6522
|
/** @description Trigger-specific configuration (e.g. cron expression for cron-trigger) */
|
|
6371
6523
|
trigger_configuration?: unknown | null;
|
|
6372
6524
|
/** @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). */
|
|
@@ -6383,7 +6535,7 @@ export interface components {
|
|
|
6383
6535
|
* @description New trigger type
|
|
6384
6536
|
* @enum {string}
|
|
6385
6537
|
*/
|
|
6386
|
-
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" | "sequence-completed" | "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" | "ticket-team-changed" | "session-updated"
|
|
6538
|
+
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" | "sequence-completed" | "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" | "ticket-team-changed" | "session-updated";
|
|
6387
6539
|
/** @description New trigger configuration */
|
|
6388
6540
|
trigger_configuration?: unknown | null;
|
|
6389
6541
|
/** @description New workflow step/block definitions (replaces existing blocks) */
|
|
@@ -6396,7 +6548,7 @@ export interface components {
|
|
|
6396
6548
|
* @description Trigger type to validate against
|
|
6397
6549
|
* @enum {string}
|
|
6398
6550
|
*/
|
|
6399
|
-
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" | "sequence-completed" | "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" | "ticket-team-changed" | "session-updated"
|
|
6551
|
+
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" | "sequence-completed" | "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" | "ticket-team-changed" | "session-updated";
|
|
6400
6552
|
/** @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. */
|
|
6401
6553
|
trigger_configuration?: unknown | null;
|
|
6402
6554
|
/** @description Workflow blocks to validate */
|
|
@@ -6409,7 +6561,7 @@ export interface components {
|
|
|
6409
6561
|
* @description Trigger type whose payload shape this synthetic payload should match
|
|
6410
6562
|
* @enum {string}
|
|
6411
6563
|
*/
|
|
6412
|
-
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" | "sequence-completed" | "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" | "ticket-team-changed" | "session-updated"
|
|
6564
|
+
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" | "sequence-completed" | "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" | "ticket-team-changed" | "session-updated";
|
|
6413
6565
|
payload: unknown;
|
|
6414
6566
|
};
|
|
6415
6567
|
};
|
|
@@ -6568,6 +6720,19 @@ export interface components {
|
|
|
6568
6720
|
/** @description Lift the block automatically after this many hours (max 8760). Omit for a permanent block. Automated callers should always set this: a shared or carrier-grade NAT address fronts many people, and a permanent block on one bans all of them. */
|
|
6569
6721
|
expires_in_hours?: number;
|
|
6570
6722
|
};
|
|
6723
|
+
AddToOutboundBlocklistDto: {
|
|
6724
|
+
/**
|
|
6725
|
+
* @description What kind of address this is. "phone" is stored in international format, "email" is lowercased, and "whatsapp_user_id" is the WhatsApp id of a contact whose phone number is hidden.
|
|
6726
|
+
* @enum {string}
|
|
6727
|
+
*/
|
|
6728
|
+
identity_type: "phone" | "email" | "whatsapp_user_id";
|
|
6729
|
+
/** @description The address itself — e.g. "+962790007001" or "lead@example.com". */
|
|
6730
|
+
identity_value: string;
|
|
6731
|
+
/** @description Why this address is being blocked. Stored for your own auditing. */
|
|
6732
|
+
reason?: string;
|
|
6733
|
+
/** @description When the block should lift automatically, as an ISO 8601 timestamp. Must be in the future. Omit for a permanent block. */
|
|
6734
|
+
expires_at?: string | null;
|
|
6735
|
+
};
|
|
6571
6736
|
CreateEmailTemplatePublicInput: components["schemas"]["CreateEmailTemplateBodyDto"];
|
|
6572
6737
|
UpdateEmailTemplatePublicInput: components["schemas"]["CreateEmailTemplateBodyDto"];
|
|
6573
6738
|
CreateMacroInput: {
|
|
@@ -7121,6 +7286,7 @@ export interface components {
|
|
|
7121
7286
|
custom_data?: {
|
|
7122
7287
|
[key: string]: unknown;
|
|
7123
7288
|
} | null;
|
|
7289
|
+
assist_mode?: boolean;
|
|
7124
7290
|
} | {
|
|
7125
7291
|
actionCalls?: {
|
|
7126
7292
|
action: {
|
|
@@ -7164,6 +7330,7 @@ export interface components {
|
|
|
7164
7330
|
[key: string]: unknown;
|
|
7165
7331
|
} | null;
|
|
7166
7332
|
whatsapp_template_request?: unknown | null;
|
|
7333
|
+
assist_mode?: boolean;
|
|
7167
7334
|
whatsapp_template_snapshot?: unknown | null;
|
|
7168
7335
|
rule_violation_reflections?: {
|
|
7169
7336
|
rule_name: string;
|
|
@@ -7544,6 +7711,13 @@ export interface components {
|
|
|
7544
7711
|
customDataKeys?: string[];
|
|
7545
7712
|
}[];
|
|
7546
7713
|
};
|
|
7714
|
+
CompanyAgentOwner: {
|
|
7715
|
+
/** @description The teammate’s OpenCX user id */
|
|
7716
|
+
id: number;
|
|
7717
|
+
name: string;
|
|
7718
|
+
/** Format: email */
|
|
7719
|
+
email: string;
|
|
7720
|
+
};
|
|
7547
7721
|
Company: {
|
|
7548
7722
|
/** Format: uuid */
|
|
7549
7723
|
id: string;
|
|
@@ -7553,6 +7727,8 @@ export interface components {
|
|
|
7553
7727
|
custom_data: {
|
|
7554
7728
|
[key: string]: string | number | boolean;
|
|
7555
7729
|
} | null;
|
|
7730
|
+
/** @description The teammate who owns this account. Null when nobody owns it, which is the ordinary state. */
|
|
7731
|
+
agent_owner: components["schemas"]["CompanyAgentOwner"] | null;
|
|
7556
7732
|
/** @description ISO 8601 timestamp of when the company was created */
|
|
7557
7733
|
created_at: string;
|
|
7558
7734
|
/** @description ISO 8601 timestamp of when the company was last updated */
|
|
@@ -8903,6 +9079,23 @@ export interface components {
|
|
|
8903
9079
|
description: string | null;
|
|
8904
9080
|
}[];
|
|
8905
9081
|
};
|
|
9082
|
+
OutboundBlocklistEntryDto: {
|
|
9083
|
+
id: string;
|
|
9084
|
+
/** @description "phone", "email" or "whatsapp_user_id". */
|
|
9085
|
+
identity_type: string;
|
|
9086
|
+
/** @description The address, as we stored it after normalizing. */
|
|
9087
|
+
identity_value: string;
|
|
9088
|
+
/** @description The channel this entry covers. Null means every channel — that is what entries added through this API always are. A specific channel appears when someone opted out of that channel alone. */
|
|
9089
|
+
channel: string | null;
|
|
9090
|
+
/** @description Why the address was blocked. */
|
|
9091
|
+
reason: string;
|
|
9092
|
+
/** @description Where the entry came from. "api" is one you added. Anything else was recorded when the person opted out themselves, and is not removable by default. */
|
|
9093
|
+
source: string | null;
|
|
9094
|
+
/** Format: date-time */
|
|
9095
|
+
created_at: string;
|
|
9096
|
+
/** @description When the block lifts automatically. Null means it never does. */
|
|
9097
|
+
expires_at: string | null;
|
|
9098
|
+
};
|
|
8906
9099
|
SaveContactOutput: {
|
|
8907
9100
|
/** Format: uuid */
|
|
8908
9101
|
id?: string;
|
|
@@ -9208,6 +9401,7 @@ export interface components {
|
|
|
9208
9401
|
[key: string]: unknown;
|
|
9209
9402
|
} | null;
|
|
9210
9403
|
whatsapp_template_request?: unknown | null;
|
|
9404
|
+
assist_mode?: boolean;
|
|
9211
9405
|
whatsapp_template_snapshot?: unknown | null;
|
|
9212
9406
|
rule_violation_reflections?: {
|
|
9213
9407
|
rule_name: string;
|
|
@@ -10060,6 +10254,17 @@ export interface components {
|
|
|
10060
10254
|
CreateSequenceOutput: {
|
|
10061
10255
|
id: string;
|
|
10062
10256
|
};
|
|
10257
|
+
ExitContactFromSequenceOutputDto: {
|
|
10258
|
+
/**
|
|
10259
|
+
* @description `exited` — the contact was removed and no further steps will be scheduled for them. `not_enrolled` — the contact is not currently in this sequence (already removed, already replied, or finished it), so nothing changed. `contact_not_found` — no contact in your workspace matches that identifier, which usually means the email or phone number does not match the one we hold.
|
|
10260
|
+
* @enum {string}
|
|
10261
|
+
*/
|
|
10262
|
+
outcome: "exited" | "not_enrolled" | "contact_not_found";
|
|
10263
|
+
/** @description How many enrollments were stopped. A continuous sequence can hold the same person more than once, and all of them are stopped together. */
|
|
10264
|
+
exited_enrollments: number;
|
|
10265
|
+
/** @description The contact records the identifier matched, for your own reconciliation. */
|
|
10266
|
+
contact_ids: string[];
|
|
10267
|
+
};
|
|
10063
10268
|
TagPublicResponseDto: {
|
|
10064
10269
|
/** @description The tag name (unique per org) */
|
|
10065
10270
|
tag_name: string;
|
|
@@ -10688,6 +10893,16 @@ export interface components {
|
|
|
10688
10893
|
page: number;
|
|
10689
10894
|
has_more: boolean;
|
|
10690
10895
|
};
|
|
10896
|
+
RemoveFromOutboundBlocklistOutputDto: {
|
|
10897
|
+
/** @description How many entries were removed. */
|
|
10898
|
+
removed: number;
|
|
10899
|
+
/** @description How many matching entries were left in place because they were not added through this API. When this is above zero the address is still blocked — retry with include_provider_entries=true if you intend to remove those too. */
|
|
10900
|
+
skipped: number;
|
|
10901
|
+
};
|
|
10902
|
+
CheckOutboundBlocklistOutputDto: {
|
|
10903
|
+
blocked: boolean;
|
|
10904
|
+
entries: components["schemas"]["OutboundBlocklistEntryDto"][];
|
|
10905
|
+
};
|
|
10691
10906
|
GetCustomDomainsOutput: {
|
|
10692
10907
|
domainName: string;
|
|
10693
10908
|
domainNameVerificationStatus: string | null;
|
|
@@ -12183,6 +12398,41 @@ export interface operations {
|
|
|
12183
12398
|
};
|
|
12184
12399
|
};
|
|
12185
12400
|
};
|
|
12401
|
+
setCompanyOwner: {
|
|
12402
|
+
parameters: {
|
|
12403
|
+
query?: never;
|
|
12404
|
+
header?: never;
|
|
12405
|
+
path: {
|
|
12406
|
+
external_id: string;
|
|
12407
|
+
};
|
|
12408
|
+
cookie?: never;
|
|
12409
|
+
};
|
|
12410
|
+
requestBody: {
|
|
12411
|
+
content: {
|
|
12412
|
+
"application/json": components["schemas"]["SetCompanyOwnerDto"];
|
|
12413
|
+
};
|
|
12414
|
+
};
|
|
12415
|
+
responses: {
|
|
12416
|
+
/** @description Default Response */
|
|
12417
|
+
200: {
|
|
12418
|
+
headers: {
|
|
12419
|
+
[name: string]: unknown;
|
|
12420
|
+
};
|
|
12421
|
+
content: {
|
|
12422
|
+
"application/json": components["schemas"]["Company"];
|
|
12423
|
+
};
|
|
12424
|
+
};
|
|
12425
|
+
/** @description Internal Server Error */
|
|
12426
|
+
500: {
|
|
12427
|
+
headers: {
|
|
12428
|
+
[name: string]: unknown;
|
|
12429
|
+
};
|
|
12430
|
+
content: {
|
|
12431
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
12432
|
+
};
|
|
12433
|
+
};
|
|
12434
|
+
};
|
|
12435
|
+
};
|
|
12186
12436
|
listContacts: {
|
|
12187
12437
|
parameters: {
|
|
12188
12438
|
query?: {
|
|
@@ -13945,6 +14195,147 @@ export interface operations {
|
|
|
13945
14195
|
};
|
|
13946
14196
|
};
|
|
13947
14197
|
};
|
|
14198
|
+
listOutboundBlocklist: {
|
|
14199
|
+
parameters: {
|
|
14200
|
+
query?: {
|
|
14201
|
+
/** @description What kind of address this is. "phone" is stored in international format, "email" is lowercased, and "whatsapp_user_id" is the WhatsApp id of a contact whose phone number is hidden. */
|
|
14202
|
+
identity_type?: "phone" | "email" | "whatsapp_user_id";
|
|
14203
|
+
/** @description Cursor from a previous response. */
|
|
14204
|
+
cursor?: string;
|
|
14205
|
+
limit?: number;
|
|
14206
|
+
};
|
|
14207
|
+
header?: never;
|
|
14208
|
+
path?: never;
|
|
14209
|
+
cookie?: never;
|
|
14210
|
+
};
|
|
14211
|
+
requestBody?: never;
|
|
14212
|
+
responses: {
|
|
14213
|
+
/** @description Default Response */
|
|
14214
|
+
200: {
|
|
14215
|
+
headers: {
|
|
14216
|
+
[name: string]: unknown;
|
|
14217
|
+
};
|
|
14218
|
+
content: {
|
|
14219
|
+
"application/json": {
|
|
14220
|
+
items: components["schemas"]["OutboundBlocklistEntryDto"][];
|
|
14221
|
+
next: string | null;
|
|
14222
|
+
};
|
|
14223
|
+
};
|
|
14224
|
+
};
|
|
14225
|
+
/** @description Internal Server Error */
|
|
14226
|
+
500: {
|
|
14227
|
+
headers: {
|
|
14228
|
+
[name: string]: unknown;
|
|
14229
|
+
};
|
|
14230
|
+
content: {
|
|
14231
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
14232
|
+
};
|
|
14233
|
+
};
|
|
14234
|
+
};
|
|
14235
|
+
};
|
|
14236
|
+
addToOutboundBlocklist: {
|
|
14237
|
+
parameters: {
|
|
14238
|
+
query?: never;
|
|
14239
|
+
header?: never;
|
|
14240
|
+
path?: never;
|
|
14241
|
+
cookie?: never;
|
|
14242
|
+
};
|
|
14243
|
+
requestBody: {
|
|
14244
|
+
content: {
|
|
14245
|
+
"application/json": components["schemas"]["AddToOutboundBlocklistDto"];
|
|
14246
|
+
};
|
|
14247
|
+
};
|
|
14248
|
+
responses: {
|
|
14249
|
+
/** @description Default Response */
|
|
14250
|
+
201: {
|
|
14251
|
+
headers: {
|
|
14252
|
+
[name: string]: unknown;
|
|
14253
|
+
};
|
|
14254
|
+
content: {
|
|
14255
|
+
"application/json": components["schemas"]["OutboundBlocklistEntryDto"];
|
|
14256
|
+
};
|
|
14257
|
+
};
|
|
14258
|
+
/** @description Internal Server Error */
|
|
14259
|
+
500: {
|
|
14260
|
+
headers: {
|
|
14261
|
+
[name: string]: unknown;
|
|
14262
|
+
};
|
|
14263
|
+
content: {
|
|
14264
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
14265
|
+
};
|
|
14266
|
+
};
|
|
14267
|
+
};
|
|
14268
|
+
};
|
|
14269
|
+
removeFromOutboundBlocklist: {
|
|
14270
|
+
parameters: {
|
|
14271
|
+
query: {
|
|
14272
|
+
/** @description What kind of address this is. "phone" is stored in international format, "email" is lowercased, and "whatsapp_user_id" is the WhatsApp id of a contact whose phone number is hidden. */
|
|
14273
|
+
identity_type: "phone" | "email" | "whatsapp_user_id";
|
|
14274
|
+
/** @description The address itself — e.g. "+962790007001" or "lead@example.com". */
|
|
14275
|
+
identity_value: string;
|
|
14276
|
+
/** @description Send "true" to also remove entries recorded when the person opted out themselves, and entries scoped to a single channel. Accepts "true" or "false"; defaults to "false". */
|
|
14277
|
+
include_provider_entries?: string;
|
|
14278
|
+
};
|
|
14279
|
+
header?: never;
|
|
14280
|
+
path?: never;
|
|
14281
|
+
cookie?: never;
|
|
14282
|
+
};
|
|
14283
|
+
requestBody?: never;
|
|
14284
|
+
responses: {
|
|
14285
|
+
/** @description Default Response */
|
|
14286
|
+
200: {
|
|
14287
|
+
headers: {
|
|
14288
|
+
[name: string]: unknown;
|
|
14289
|
+
};
|
|
14290
|
+
content: {
|
|
14291
|
+
"application/json": components["schemas"]["RemoveFromOutboundBlocklistOutputDto"];
|
|
14292
|
+
};
|
|
14293
|
+
};
|
|
14294
|
+
/** @description Internal Server Error */
|
|
14295
|
+
500: {
|
|
14296
|
+
headers: {
|
|
14297
|
+
[name: string]: unknown;
|
|
14298
|
+
};
|
|
14299
|
+
content: {
|
|
14300
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
14301
|
+
};
|
|
14302
|
+
};
|
|
14303
|
+
};
|
|
14304
|
+
};
|
|
14305
|
+
checkOutboundBlocklist: {
|
|
14306
|
+
parameters: {
|
|
14307
|
+
query: {
|
|
14308
|
+
/** @description What kind of address this is. "phone" is stored in international format, "email" is lowercased, and "whatsapp_user_id" is the WhatsApp id of a contact whose phone number is hidden. */
|
|
14309
|
+
identity_type: "phone" | "email" | "whatsapp_user_id";
|
|
14310
|
+
/** @description The address itself — e.g. "+962790007001" or "lead@example.com". */
|
|
14311
|
+
identity_value: string;
|
|
14312
|
+
};
|
|
14313
|
+
header?: never;
|
|
14314
|
+
path?: never;
|
|
14315
|
+
cookie?: never;
|
|
14316
|
+
};
|
|
14317
|
+
requestBody?: never;
|
|
14318
|
+
responses: {
|
|
14319
|
+
/** @description Default Response */
|
|
14320
|
+
200: {
|
|
14321
|
+
headers: {
|
|
14322
|
+
[name: string]: unknown;
|
|
14323
|
+
};
|
|
14324
|
+
content: {
|
|
14325
|
+
"application/json": components["schemas"]["CheckOutboundBlocklistOutputDto"];
|
|
14326
|
+
};
|
|
14327
|
+
};
|
|
14328
|
+
/** @description Internal Server Error */
|
|
14329
|
+
500: {
|
|
14330
|
+
headers: {
|
|
14331
|
+
[name: string]: unknown;
|
|
14332
|
+
};
|
|
14333
|
+
content: {
|
|
14334
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
14335
|
+
};
|
|
14336
|
+
};
|
|
14337
|
+
};
|
|
14338
|
+
};
|
|
13948
14339
|
sendEmail: {
|
|
13949
14340
|
parameters: {
|
|
13950
14341
|
query?: never;
|
|
@@ -16839,6 +17230,42 @@ export interface operations {
|
|
|
16839
17230
|
};
|
|
16840
17231
|
};
|
|
16841
17232
|
};
|
|
17233
|
+
exitContactFromSequence: {
|
|
17234
|
+
parameters: {
|
|
17235
|
+
query?: never;
|
|
17236
|
+
header?: never;
|
|
17237
|
+
path: {
|
|
17238
|
+
/** @description The unique identifier of the sequence */
|
|
17239
|
+
sequence_id: string;
|
|
17240
|
+
};
|
|
17241
|
+
cookie?: never;
|
|
17242
|
+
};
|
|
17243
|
+
requestBody: {
|
|
17244
|
+
content: {
|
|
17245
|
+
"application/json": components["schemas"]["ExitContactFromSequenceDto"];
|
|
17246
|
+
};
|
|
17247
|
+
};
|
|
17248
|
+
responses: {
|
|
17249
|
+
/** @description Default Response */
|
|
17250
|
+
201: {
|
|
17251
|
+
headers: {
|
|
17252
|
+
[name: string]: unknown;
|
|
17253
|
+
};
|
|
17254
|
+
content: {
|
|
17255
|
+
"application/json": components["schemas"]["ExitContactFromSequenceOutputDto"];
|
|
17256
|
+
};
|
|
17257
|
+
};
|
|
17258
|
+
/** @description Internal Server Error */
|
|
17259
|
+
500: {
|
|
17260
|
+
headers: {
|
|
17261
|
+
[name: string]: unknown;
|
|
17262
|
+
};
|
|
17263
|
+
content: {
|
|
17264
|
+
"application/json": components["schemas"]["ErrorDto"];
|
|
17265
|
+
};
|
|
17266
|
+
};
|
|
17267
|
+
};
|
|
17268
|
+
};
|
|
16842
17269
|
getTeams: {
|
|
16843
17270
|
parameters: {
|
|
16844
17271
|
query?: never;
|
|
@@ -19633,7 +20060,7 @@ export interface operations {
|
|
|
19633
20060
|
timezone?: string;
|
|
19634
20061
|
policy_id?: string;
|
|
19635
20062
|
team_id?: string;
|
|
19636
|
-
channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
|
|
20063
|
+
channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
|
|
19637
20064
|
agent_id?: number;
|
|
19638
20065
|
};
|
|
19639
20066
|
header?: never;
|
|
@@ -19670,7 +20097,7 @@ export interface operations {
|
|
|
19670
20097
|
timezone?: string;
|
|
19671
20098
|
policy_id?: string;
|
|
19672
20099
|
team_id?: string;
|
|
19673
|
-
channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
|
|
20100
|
+
channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
|
|
19674
20101
|
agent_id?: number;
|
|
19675
20102
|
group_by: "policy" | "team" | "agent" | "channel";
|
|
19676
20103
|
};
|
|
@@ -19708,7 +20135,7 @@ export interface operations {
|
|
|
19708
20135
|
timezone?: string;
|
|
19709
20136
|
policy_id?: string;
|
|
19710
20137
|
team_id?: string;
|
|
19711
|
-
channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
|
|
20138
|
+
channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
|
|
19712
20139
|
agent_id?: number;
|
|
19713
20140
|
granularity?: "day" | "week";
|
|
19714
20141
|
};
|
|
@@ -19746,7 +20173,7 @@ export interface operations {
|
|
|
19746
20173
|
timezone?: string;
|
|
19747
20174
|
policy_id?: string;
|
|
19748
20175
|
team_id?: string;
|
|
19749
|
-
channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions";
|
|
20176
|
+
channel?: "web" | "email" | "phone_voice" | "slack" | "sms" | "whatsapp" | "instagram" | "messenger" | "api" | "web_voice" | "twitter" | "twitter_mentions" | "app_review";
|
|
19750
20177
|
agent_id?: number;
|
|
19751
20178
|
};
|
|
19752
20179
|
header?: never;
|