@opencx/mcp 1.15.4 → 1.15.5

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/schema.d.ts CHANGED
@@ -1298,7 +1298,7 @@ export interface paths {
1298
1298
  put?: never;
1299
1299
  /**
1300
1300
  * Block IP addresses
1301
- * @description Block one or more IP addresses or CIDR ranges. Pass a comma-separated string for multiple values (e.g. "203.0.113.7, 198.51.100.0/24"). Both IPv4 and IPv6 are supported.
1301
+ * @description Block one or more IP addresses or CIDR ranges. Pass a comma-separated string for multiple values (e.g. "203.0.113.7, 198.51.100.0/24"). Both IPv4 and IPv6 are supported. Applies to web widget traffic: email and WhatsApp reach us through the provider’s servers and carry no visitor IP, so block those by domain or contact instead. A session first seen on the widget from a blocked address does stay blocked if it later continues on another channel.
1302
1302
  */
1303
1303
  post: operations["blockIps"];
1304
1304
  delete?: never;
@@ -1327,6 +1327,26 @@ export interface paths {
1327
1327
  patch?: never;
1328
1328
  trace?: never;
1329
1329
  };
1330
+ "/blocklist/ips/session-activity": {
1331
+ parameters: {
1332
+ query?: never;
1333
+ header?: never;
1334
+ path?: never;
1335
+ cookie?: never;
1336
+ };
1337
+ /**
1338
+ * List IP addresses seen in recent sessions
1339
+ * @description Which IP addresses have been opening sessions, ranked by volume, with the number of distinct contacts seen from each. A high contact count against a single address is the signature of one visitor minting a throwaway contact per message. Use this to decide what to block instead of guessing at addresses. Covers widget channels only — other channels carry no client IP.
1340
+ */
1341
+ get: operations["listSessionIpActivity"];
1342
+ put?: never;
1343
+ post?: never;
1344
+ delete?: never;
1345
+ options?: never;
1346
+ head?: never;
1347
+ patch?: never;
1348
+ trace?: never;
1349
+ };
1330
1350
  "/blocklist/ips/{id}": {
1331
1351
  parameters: {
1332
1352
  query?: never;
@@ -4076,6 +4096,86 @@ export interface paths {
4076
4096
  patch?: never;
4077
4097
  trace?: never;
4078
4098
  };
4099
+ "/salesforce-crm/connection/status": {
4100
+ parameters: {
4101
+ query?: never;
4102
+ header?: never;
4103
+ path?: never;
4104
+ cookie?: never;
4105
+ };
4106
+ /**
4107
+ * Get Salesforce CRM connection status
4108
+ * @description Whether the organization has an active Salesforce CRM connection. Probe this before rendering any Salesforce-backed surface; 404 means the organization never connected.
4109
+ */
4110
+ get: operations["getSalesforceCrmConnectionStatus"];
4111
+ put?: never;
4112
+ post?: never;
4113
+ delete?: never;
4114
+ options?: never;
4115
+ head?: never;
4116
+ patch?: never;
4117
+ trace?: never;
4118
+ };
4119
+ "/salesforce-crm/contacts/{contactId}": {
4120
+ parameters: {
4121
+ query?: never;
4122
+ header?: never;
4123
+ path?: never;
4124
+ cookie?: never;
4125
+ };
4126
+ /**
4127
+ * Get a contact's Salesforce CRM panel
4128
+ * @description The full Salesforce view of one OpenCX contact: the matched Contact or Lead, its account, opportunities, past cases, and the organization's configured custom objects. `lookup_status` distinguishes a confirmed no-match (`none`) from Salesforce being unreachable (`failed`) — treat `failed` as unknown, never as absence.
4129
+ */
4130
+ get: operations["getSalesforceCrmContact"];
4131
+ put?: never;
4132
+ post?: never;
4133
+ delete?: never;
4134
+ options?: never;
4135
+ head?: never;
4136
+ patch?: never;
4137
+ trace?: never;
4138
+ };
4139
+ "/salesforce-crm/contacts": {
4140
+ parameters: {
4141
+ query?: never;
4142
+ header?: never;
4143
+ path?: never;
4144
+ cookie?: never;
4145
+ };
4146
+ /**
4147
+ * List cached Salesforce CRM records
4148
+ * @description The synced Salesforce Contacts and Leads the organization has cached, newest first. Served from the cache — this never queries Salesforce.
4149
+ */
4150
+ get: operations["listSalesforceCrmContacts"];
4151
+ put?: never;
4152
+ post?: never;
4153
+ delete?: never;
4154
+ options?: never;
4155
+ head?: never;
4156
+ patch?: never;
4157
+ trace?: never;
4158
+ };
4159
+ "/salesforce-crm/contacts/search": {
4160
+ parameters: {
4161
+ query?: never;
4162
+ header?: never;
4163
+ path?: never;
4164
+ cookie?: never;
4165
+ };
4166
+ /**
4167
+ * Search cached Salesforce CRM records
4168
+ * @description Match cached Salesforce records by exact email and/or phone (both given means both must match). Served from the cache — this never queries Salesforce. At least one of `email` or `phone` is required.
4169
+ */
4170
+ get: operations["searchSalesforceCrmContacts"];
4171
+ put?: never;
4172
+ post?: never;
4173
+ delete?: never;
4174
+ options?: never;
4175
+ head?: never;
4176
+ patch?: never;
4177
+ trace?: never;
4178
+ };
4079
4179
  "/companion/notify-team": {
4080
4180
  parameters: {
4081
4181
  query?: never;
@@ -4389,6 +4489,7 @@ export interface components {
4389
4489
  } | {
4390
4490
  /** @constant */
4391
4491
  type: "contacts_phone_number_in";
4492
+ /** @description Full phone numbers, matched exactly on digits (formatting like +, spaces, and dashes is ignored). Use * inside an entry for partial/substring matching. */
4392
4493
  phone_number_in: string[];
4393
4494
  } | {
4394
4495
  /** @constant */
@@ -4662,6 +4763,13 @@ export interface components {
4662
4763
  auto_send_on_close?: boolean;
4663
4764
  /** @description Delay in minutes before sending CSAT after session closes */
4664
4765
  send_delay_minutes?: number;
4766
+ /**
4767
+ * @description How often the same session may be surveyed: once_per_session (default, one survey ever), once_per_close (one per closure, so a reopened session can be surveyed again), or once_until_answered (re-ask after resend_after_days until the customer scores it)
4768
+ * @enum {string}
4769
+ */
4770
+ resend_policy?: "once_per_close" | "once_per_session" | "once_until_answered";
4771
+ /** @description Days to wait before re-asking an unanswered survey. Only used when resend_policy is once_until_answered */
4772
+ resend_after_days?: number;
4665
4773
  /** @description Full-HTML template for the public CSAT feedback page. Null/empty clears it (default page). */
4666
4774
  web_template_html?: string | null;
4667
4775
  /** @description Full-HTML template for the CSAT request email. Null/empty clears it (default email). */
@@ -5100,6 +5208,7 @@ export interface components {
5100
5208
  } | {
5101
5209
  /** @constant */
5102
5210
  type: "contacts_phone_number_in";
5211
+ /** @description Full phone numbers, matched exactly on digits (formatting like +, spaces, and dashes is ignored). Use * inside an entry for partial/substring matching. */
5103
5212
  phone_number_in: string[];
5104
5213
  } | {
5105
5214
  /** @constant */
@@ -5465,6 +5574,10 @@ export interface components {
5465
5574
  };
5466
5575
  delay_in_minutes?: number;
5467
5576
  }[];
5577
+ /** @description Hold step sends outside the org office-hours window (defaults to true for new sequences) */
5578
+ respect_office_hours?: boolean;
5579
+ /** @description Named office-hours config to use as the send window; null = org default hours */
5580
+ office_hours_id?: string | null;
5468
5581
  };
5469
5582
  AddContactsToSequenceInput: {
5470
5583
  contacts: ({
@@ -5769,6 +5882,8 @@ export interface components {
5769
5882
  ips: string;
5770
5883
  /** @description Why these addresses are being blocked */
5771
5884
  reason?: string;
5885
+ /** @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. */
5886
+ expires_in_hours?: number;
5772
5887
  };
5773
5888
  CreateEmailTemplatePublicInput: components["schemas"]["CreateEmailTemplateBodyDto"];
5774
5889
  UpdateEmailTemplatePublicInput: components["schemas"]["CreateEmailTemplateBodyDto"];
@@ -5901,6 +6016,82 @@ export interface components {
5901
6016
  end_time: string;
5902
6017
  }[];
5903
6018
  };
6019
+ SalesforceCrmContactDetailsDto: {
6020
+ id: string;
6021
+ salesforce_record_id: string;
6022
+ /** @enum {string} */
6023
+ record_type: "Contact" | "Lead";
6024
+ email?: string;
6025
+ phone?: string;
6026
+ first_name?: string;
6027
+ last_name?: string;
6028
+ company?: string;
6029
+ salesforce_data: unknown;
6030
+ cached_at: string;
6031
+ salesforce_link: string;
6032
+ };
6033
+ SalesforceCrmAccountDetailsDto: {
6034
+ salesforce_account_id: string;
6035
+ name?: string;
6036
+ website?: string;
6037
+ industry?: string;
6038
+ number_of_employees?: string;
6039
+ annual_revenue?: string;
6040
+ billing_city?: string;
6041
+ billing_state?: string;
6042
+ billing_country?: string;
6043
+ salesforce_data: unknown;
6044
+ salesforce_link: string;
6045
+ };
6046
+ SalesforceCrmOpportunityDetailsDto: {
6047
+ salesforce_opportunity_id: string;
6048
+ name?: string;
6049
+ stage_name?: string;
6050
+ amount?: string;
6051
+ close_date?: string;
6052
+ is_closed?: boolean;
6053
+ is_won?: boolean;
6054
+ salesforce_data: unknown;
6055
+ salesforce_link: string;
6056
+ };
6057
+ SalesforceCrmCaseDetailsDto: {
6058
+ salesforce_case_id: string;
6059
+ case_number?: string;
6060
+ subject?: string;
6061
+ status?: string;
6062
+ priority?: string;
6063
+ origin?: string;
6064
+ created_date?: string;
6065
+ last_modified_date?: string;
6066
+ salesforce_data: unknown;
6067
+ salesforce_link: string;
6068
+ };
6069
+ SalesforceCrmCustomObjectRecordDto: {
6070
+ id: string;
6071
+ values: {
6072
+ [key: string]: string | number | boolean | null;
6073
+ };
6074
+ salesforce_link: string;
6075
+ };
6076
+ SalesforceCrmCustomObjectSectionDto: {
6077
+ object_api_name: string;
6078
+ label: string;
6079
+ records?: components["schemas"]["SalesforceCrmCustomObjectRecordDto"][];
6080
+ };
6081
+ ConsumerSalesforceCrmContactResponseDto: {
6082
+ consumer_id: string;
6083
+ consumer_email?: string;
6084
+ consumer_phone?: string;
6085
+ salesforce_contact?: components["schemas"]["SalesforceCrmContactDetailsDto"];
6086
+ accounts?: components["schemas"]["SalesforceCrmAccountDetailsDto"][];
6087
+ opportunities?: components["schemas"]["SalesforceCrmOpportunityDetailsDto"][];
6088
+ previous_cases?: components["schemas"]["SalesforceCrmCaseDetailsDto"][];
6089
+ custom_objects?: components["schemas"]["SalesforceCrmCustomObjectSectionDto"][];
6090
+ found_in_salesforce: boolean;
6091
+ /** @enum {string} */
6092
+ lookup_status: "found" | "none" | "failed";
6093
+ message: string;
6094
+ };
5904
6095
  GenericResponseDto: {
5905
6096
  data?: {
5906
6097
  success: boolean;
@@ -5919,6 +6110,148 @@ export interface components {
5919
6110
  url: string;
5920
6111
  openai_file_id?: string;
5921
6112
  };
6113
+ WhatsAppTemplateDto: {
6114
+ id: string;
6115
+ name: string;
6116
+ /** @enum {string} */
6117
+ status: "APPROVED" | "REJECTED" | "PENDING" | "PAUSED" | "DISABLED" | "IN_APPEAL" | "PENDING_DELETION" | "DELETED" | "LIMIT_EXCEEDED" | "ARCHIVED";
6118
+ /** @enum {string} */
6119
+ category: "UTILITY" | "MARKETING" | "AUTHENTICATION";
6120
+ /** @enum {string} */
6121
+ parameter_format: "NAMED" | "POSITIONAL";
6122
+ language: string;
6123
+ components?: ({
6124
+ /** @constant */
6125
+ type: "HEADER";
6126
+ /** @constant */
6127
+ format: "TEXT";
6128
+ /** @description 60 chars max */
6129
+ text: string;
6130
+ example?: {
6131
+ header_text: string[];
6132
+ } | {
6133
+ header_text_named_params: {
6134
+ param_name: string;
6135
+ example: string;
6136
+ }[];
6137
+ };
6138
+ } | {
6139
+ /** @constant */
6140
+ type: "HEADER";
6141
+ /**
6142
+ * @description
6143
+ * /**
6144
+ * * IMAGE: JPG | PNG
6145
+ * * DOCUMENT: PDF
6146
+ * * VIDEO: MP4
6147
+ * *\/
6148
+ *
6149
+ * @enum {string}
6150
+ */
6151
+ format: "IMAGE" | "DOCUMENT" | "VIDEO";
6152
+ example?: {
6153
+ /** @description
6154
+ * /**
6155
+ * * A handle for the media uploaded through the Resumable Upload API
6156
+ * * https://developers.facebook.com/docs/graph-api/guides/upload
6157
+ * *\/
6158
+ * */
6159
+ header_handle: string | string[];
6160
+ };
6161
+ } | {
6162
+ /** @constant */
6163
+ type: "HEADER";
6164
+ /** @constant */
6165
+ format: "LOCATION";
6166
+ } | {
6167
+ /** @constant */
6168
+ type: "BODY";
6169
+ /** @description 1024 chars max, or 32768 if `body` is the only component in the template */
6170
+ text: string;
6171
+ example?: {
6172
+ /** @description Yes, this is an array of arrays, but only the first array is used, just like `header_text` */
6173
+ body_text: string[][];
6174
+ } | {
6175
+ body_text_named_params: {
6176
+ param_name: string;
6177
+ example: string;
6178
+ }[];
6179
+ };
6180
+ } | {
6181
+ /** @constant */
6182
+ type: "FOOTER";
6183
+ /** @description 60 chars max */
6184
+ text: string;
6185
+ } | {
6186
+ /**
6187
+ * @description
6188
+ * /**
6189
+ * * Templates are limited to 10 quick reply buttons. If using quick reply buttons with other buttons,
6190
+ * * buttons must be organized into two groups: quick reply buttons and non-quick reply buttons.
6191
+ * * If grouped incorrectly, the API will return an error indicating an invalid combination.
6192
+ * *
6193
+ * * Examples of valid groupings:
6194
+ * * - Quick Reply, Quick Reply
6195
+ * * - Quick Reply, Quick Reply, URL, Phone
6196
+ * * - URL, Phone, Quick Reply, Quick Reply
6197
+ * *
6198
+ * * Examples of invalid groupings:
6199
+ * * - Quick Reply, URL, Quick Reply
6200
+ * * - URL, Quick Reply, URL
6201
+ * *\/
6202
+ *
6203
+ * @constant
6204
+ */
6205
+ type: "BUTTONS";
6206
+ buttons: ({
6207
+ /** @constant */
6208
+ type: "QUICK_REPLY";
6209
+ /** @description 25 chars max */
6210
+ text: string;
6211
+ } | {
6212
+ /** @constant */
6213
+ type: "URL";
6214
+ text: string;
6215
+ /** @description 2000 chars max */
6216
+ url: string;
6217
+ example?: [
6218
+ string
6219
+ ];
6220
+ } | {
6221
+ /** @constant */
6222
+ type: "PHONE_NUMBER";
6223
+ /** @description 25 chars max */
6224
+ text: string;
6225
+ /** @description 20 chars max */
6226
+ phone_number: string;
6227
+ } | {
6228
+ /** @constant */
6229
+ type: "COPY_CODE";
6230
+ /** @description 15 chars max */
6231
+ example: string | string[];
6232
+ } | {
6233
+ /** @constant */
6234
+ type: "FLOW";
6235
+ /** @description 25 chars max */
6236
+ text: string;
6237
+ /** @enum {string} */
6238
+ icon: "DOCUMENT" | "PROMOTION" | "REVIEW";
6239
+ flow_id?: string;
6240
+ flow_name?: string;
6241
+ flow_json?: {
6242
+ [key: string]: unknown;
6243
+ };
6244
+ /** @enum {string} */
6245
+ flow_action: "data_exchange" | "navigate";
6246
+ navigate_screen?: string;
6247
+ } | {
6248
+ /** @constant */
6249
+ type: "MPM";
6250
+ example: string;
6251
+ })[];
6252
+ })[] | null;
6253
+ rejected_reason?: string | null;
6254
+ };
5922
6255
  PhoneAgentDto: {
5923
6256
  id: string;
5924
6257
  org_id: string;
@@ -6232,6 +6565,9 @@ export interface components {
6232
6565
  } | null;
6233
6566
  steps: components["schemas"]["SequenceStep"][];
6234
6567
  is_continuous: boolean;
6568
+ reply_instructions: string | null;
6569
+ respect_office_hours: boolean;
6570
+ office_hours_id: string | null;
6235
6571
  started_at: string | null;
6236
6572
  canceled_at: string | null;
6237
6573
  ended_at: string | null;
@@ -6240,10 +6576,11 @@ export interface components {
6240
6576
  StartOneOffSequenceOutputDto: {
6241
6577
  data?: {
6242
6578
  success: boolean;
6579
+ run_id?: string;
6243
6580
  };
6244
6581
  error?: {
6245
6582
  /** @enum {string} */
6246
- code: "sequence_not_found" | "one_off_sequence_is_canceled" | "sequence_already_started";
6583
+ code: "sequence_not_found" | "one_off_sequence_is_canceled" | "sequence_already_started" | "cannot_schedule_continuous_sequence" | "start_at_in_past";
6247
6584
  status: 400 | 404;
6248
6585
  message: string;
6249
6586
  };
@@ -6348,6 +6685,8 @@ export interface components {
6348
6685
  instructions: {
6349
6686
  id: string;
6350
6687
  title: string;
6688
+ /** @constant */
6689
+ source?: "sequence_campaign";
6351
6690
  }[];
6352
6691
  tools: {
6353
6692
  name: string;
@@ -6370,6 +6709,8 @@ export interface components {
6370
6709
  instructions: {
6371
6710
  id: string;
6372
6711
  title: string;
6712
+ /** @constant */
6713
+ source?: "sequence_campaign";
6373
6714
  }[];
6374
6715
  tools: {
6375
6716
  name: string;
@@ -6522,6 +6863,7 @@ export interface components {
6522
6863
  [key: string]: unknown;
6523
6864
  } | null;
6524
6865
  whatsapp_template_request?: unknown | null;
6866
+ whatsapp_template_snapshot?: unknown | null;
6525
6867
  rule_violation_reflections?: {
6526
6868
  rule_name: string;
6527
6869
  /** @description How the rule was violated */
@@ -6592,7 +6934,7 @@ export interface components {
6592
6934
  }) | null;
6593
6935
  knowledgebase_called?: boolean | null;
6594
6936
  /** @enum {string} */
6595
- 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" | "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_requested" | "csat_submitted" | "email_draft_message" | "handoff" | "handoff_to_salesforce_miaw" | "handoff_to_zendesk" | "integration_reopened_session" | "message" | "prohibited_topic_detected" | "sequence_message" | "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_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";
6937
+ 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" | "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_requested" | "csat_submitted" | "email_draft_message" | "handoff" | "handoff_to_salesforce_miaw" | "handoff_to_zendesk" | "integration_reopened_session" | "message" | "prohibited_topic_detected" | "sequence_message" | "session_forwarded" | "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_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";
6596
6938
  extra_params?: {
6597
6939
  [key: string]: unknown;
6598
6940
  } | null;
@@ -6622,6 +6964,7 @@ export interface components {
6622
6964
  workflow_run_id?: string | null;
6623
6965
  sequence_id?: string | null;
6624
6966
  whatsapp_template_name?: string | null;
6967
+ whatsapp_template_snapshot?: components["schemas"]["WhatsAppTemplateDto"] | null;
6625
6968
  from_opencx_public_api?: boolean | null;
6626
6969
  sub_status_id?: string | null;
6627
6970
  whatsapp_sent_at?: string | null;
@@ -6713,6 +7056,13 @@ export interface components {
6713
7056
  auto_send_on_close: boolean;
6714
7057
  /** @description Delay in minutes before sending CSAT after session closes */
6715
7058
  send_delay_minutes: number;
7059
+ /**
7060
+ * @description How often the same session may be surveyed: once_per_session, once_per_close, or once_until_answered
7061
+ * @enum {string}
7062
+ */
7063
+ resend_policy: "once_per_close" | "once_per_session" | "once_until_answered";
7064
+ /** @description Days to wait before re-asking an unanswered survey (only used when resend_policy is once_until_answered) */
7065
+ resend_after_days: number;
6716
7066
  /** @description Full-HTML template for the public CSAT feedback page (null = default page) */
6717
7067
  web_template_html: string | null;
6718
7068
  /** @description Full-HTML template for the CSAT request email (null = default email) */
@@ -6998,6 +7348,35 @@ export interface components {
6998
7348
  enums: components["schemas"]["SavedReplyVariableEnum"][];
6999
7349
  custom: components["schemas"]["SavedReplyVariableDto"][];
7000
7350
  };
7351
+ SalesforceCrmConnectionStatusDto: {
7352
+ is_active: boolean;
7353
+ };
7354
+ SalesforceCrmContactResponseDto: {
7355
+ id: string;
7356
+ organization_id: string;
7357
+ salesforce_record_id: string;
7358
+ /** @enum {string} */
7359
+ record_type: "Contact" | "Lead";
7360
+ email: string | null;
7361
+ phone: string | null;
7362
+ first_name: string | null;
7363
+ last_name: string | null;
7364
+ company: string | null;
7365
+ salesforce_data: {
7366
+ [key: string]: unknown;
7367
+ };
7368
+ /** Format: date-time */
7369
+ cached_at: string;
7370
+ };
7371
+ PaginatedSalesforceCrmContactsResponseDto: {
7372
+ data: components["schemas"]["SalesforceCrmContactResponseDto"][];
7373
+ meta: {
7374
+ total: number;
7375
+ page: number;
7376
+ limit: number;
7377
+ totalPages: number;
7378
+ };
7379
+ };
7001
7380
  AgentAvailability: {
7002
7381
  id: string;
7003
7382
  user_id: number;
@@ -7596,6 +7975,7 @@ export interface components {
7596
7975
  [key: string]: unknown;
7597
7976
  } | null;
7598
7977
  whatsapp_template_request?: unknown | null;
7978
+ whatsapp_template_snapshot?: unknown | null;
7599
7979
  rule_violation_reflections?: {
7600
7980
  rule_name: string;
7601
7981
  /** @description How the rule was violated */
@@ -8960,6 +9340,8 @@ export interface components {
8960
9340
  reason: string | null;
8961
9341
  /** Format: date-time */
8962
9342
  created_at: string;
9343
+ /** @description When the block lifts automatically. Null means it never does. */
9344
+ expires_at: string | null;
8963
9345
  }[];
8964
9346
  total: number;
8965
9347
  page: number;
@@ -8976,6 +9358,8 @@ export interface components {
8976
9358
  reason: string | null;
8977
9359
  /** Format: date-time */
8978
9360
  created_at: string;
9361
+ /** @description When the block lifts automatically. Null means it never does. */
9362
+ expires_at: string | null;
8979
9363
  }[];
8980
9364
  /** @description Addresses that needed no action — already blocked, or not a valid IP/CIDR */
8981
9365
  skipped: string[];
@@ -8994,6 +9378,20 @@ export interface components {
8994
9378
  IpBlockStatusOutput: {
8995
9379
  is_blocked: boolean;
8996
9380
  };
9381
+ SessionIpActivityOutput: {
9382
+ data: {
9383
+ ip: string;
9384
+ session_count: number;
9385
+ contact_count: number;
9386
+ /** Format: date-time */
9387
+ first_seen: string;
9388
+ /** Format: date-time */
9389
+ last_seen: string;
9390
+ is_blocked: boolean;
9391
+ }[];
9392
+ page: number;
9393
+ has_more: boolean;
9394
+ };
8997
9395
  GetCustomDomainsOutput: {
8998
9396
  domainName: string;
8999
9397
  domainNameVerificationStatus: string | null;
@@ -11887,6 +12285,42 @@ export interface operations {
11887
12285
  };
11888
12286
  };
11889
12287
  };
12288
+ listSessionIpActivity: {
12289
+ parameters: {
12290
+ query?: {
12291
+ /** @description How far back to look (default: 30, max: 90) */
12292
+ days?: number;
12293
+ /** @description Page (default: 1) */
12294
+ page?: number;
12295
+ /** @description Results per page (default: 50, max: 200) */
12296
+ limit?: number;
12297
+ };
12298
+ header?: never;
12299
+ path?: never;
12300
+ cookie?: never;
12301
+ };
12302
+ requestBody?: never;
12303
+ responses: {
12304
+ /** @description Default Response */
12305
+ 200: {
12306
+ headers: {
12307
+ [name: string]: unknown;
12308
+ };
12309
+ content: {
12310
+ "application/json": components["schemas"]["SessionIpActivityOutput"];
12311
+ };
12312
+ };
12313
+ /** @description Internal Server Error */
12314
+ 500: {
12315
+ headers: {
12316
+ [name: string]: unknown;
12317
+ };
12318
+ content: {
12319
+ "application/json": components["schemas"]["ErrorDto"];
12320
+ };
12321
+ };
12322
+ };
12323
+ };
11890
12324
  unblockIp: {
11891
12325
  parameters: {
11892
12326
  query?: never;
@@ -14590,6 +15024,10 @@ export interface operations {
14590
15024
  };
14591
15025
  delay_in_minutes?: number;
14592
15026
  }[];
15027
+ /** @description Hold step sends outside the org office-hours window (defaults to true for new sequences) */
15028
+ respect_office_hours?: boolean;
15029
+ /** @description Named office-hours config to use as the send window; null = org default hours */
15030
+ office_hours_id?: string | null;
14593
15031
  };
14594
15032
  };
14595
15033
  };
@@ -16908,6 +17346,132 @@ export interface operations {
16908
17346
  };
16909
17347
  };
16910
17348
  };
17349
+ getSalesforceCrmConnectionStatus: {
17350
+ parameters: {
17351
+ query?: never;
17352
+ header?: never;
17353
+ path?: never;
17354
+ cookie?: never;
17355
+ };
17356
+ requestBody?: never;
17357
+ responses: {
17358
+ /** @description Default Response */
17359
+ 200: {
17360
+ headers: {
17361
+ [name: string]: unknown;
17362
+ };
17363
+ content: {
17364
+ "application/json": components["schemas"]["SalesforceCrmConnectionStatusDto"];
17365
+ };
17366
+ };
17367
+ /** @description Internal Server Error */
17368
+ 500: {
17369
+ headers: {
17370
+ [name: string]: unknown;
17371
+ };
17372
+ content: {
17373
+ "application/json": components["schemas"]["ErrorDto"];
17374
+ };
17375
+ };
17376
+ };
17377
+ };
17378
+ getSalesforceCrmContact: {
17379
+ parameters: {
17380
+ query?: never;
17381
+ header?: never;
17382
+ path: {
17383
+ contactId: string;
17384
+ };
17385
+ cookie?: never;
17386
+ };
17387
+ requestBody?: never;
17388
+ responses: {
17389
+ /** @description Default Response */
17390
+ 200: {
17391
+ headers: {
17392
+ [name: string]: unknown;
17393
+ };
17394
+ content: {
17395
+ "application/json": components["schemas"]["ConsumerSalesforceCrmContactResponseDto"];
17396
+ };
17397
+ };
17398
+ /** @description Internal Server Error */
17399
+ 500: {
17400
+ headers: {
17401
+ [name: string]: unknown;
17402
+ };
17403
+ content: {
17404
+ "application/json": components["schemas"]["ErrorDto"];
17405
+ };
17406
+ };
17407
+ };
17408
+ };
17409
+ listSalesforceCrmContacts: {
17410
+ parameters: {
17411
+ query?: {
17412
+ page?: number;
17413
+ limit?: number;
17414
+ };
17415
+ header?: never;
17416
+ path?: never;
17417
+ cookie?: never;
17418
+ };
17419
+ requestBody?: never;
17420
+ responses: {
17421
+ /** @description Default Response */
17422
+ 200: {
17423
+ headers: {
17424
+ [name: string]: unknown;
17425
+ };
17426
+ content: {
17427
+ "application/json": components["schemas"]["PaginatedSalesforceCrmContactsResponseDto"];
17428
+ };
17429
+ };
17430
+ /** @description Internal Server Error */
17431
+ 500: {
17432
+ headers: {
17433
+ [name: string]: unknown;
17434
+ };
17435
+ content: {
17436
+ "application/json": components["schemas"]["ErrorDto"];
17437
+ };
17438
+ };
17439
+ };
17440
+ };
17441
+ searchSalesforceCrmContacts: {
17442
+ parameters: {
17443
+ query?: {
17444
+ email?: string;
17445
+ phone?: string;
17446
+ page?: number;
17447
+ limit?: number;
17448
+ };
17449
+ header?: never;
17450
+ path?: never;
17451
+ cookie?: never;
17452
+ };
17453
+ requestBody?: never;
17454
+ responses: {
17455
+ /** @description Default Response */
17456
+ 200: {
17457
+ headers: {
17458
+ [name: string]: unknown;
17459
+ };
17460
+ content: {
17461
+ "application/json": components["schemas"]["PaginatedSalesforceCrmContactsResponseDto"];
17462
+ };
17463
+ };
17464
+ /** @description Internal Server Error */
17465
+ 500: {
17466
+ headers: {
17467
+ [name: string]: unknown;
17468
+ };
17469
+ content: {
17470
+ "application/json": components["schemas"]["ErrorDto"];
17471
+ };
17472
+ };
17473
+ };
17474
+ };
16911
17475
  coworkerNotifyTeam: {
16912
17476
  parameters: {
16913
17477
  query?: never;