@pam-ai/pam-ordo-contracts 3.12.0 → 3.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -1
- package/dist/generated.d.ts +321 -3
- package/dist/generated.d.ts.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ordo-capability.d.ts +1 -1
- package/dist/ordo-capability.d.ts.map +1 -1
- package/dist/ordo-capability.js +3 -0
- package/dist/ordo-capability.js.map +1 -1
- package/fixtures/create-inbox-customer-command.json +12 -0
- package/fixtures/create-inbox-customer-result.json +12 -0
- package/fixtures/hold-pam-command.json +5 -0
- package/fixtures/manifest.json +7 -1
- package/fixtures/resume-pam-command.json +5 -0
- package/fixtures/send-inbox-message-command.json +11 -0
- package/fixtures/send-inbox-message-result.json +14 -0
- package/openapi/openapi.json +646 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Pin consumers to an exact npm version:
|
|
|
9
9
|
```json
|
|
10
10
|
{
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@pam-ai/pam-ordo-contracts": "3.
|
|
12
|
+
"@pam-ai/pam-ordo-contracts": "3.13.0"
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
```
|
|
@@ -40,6 +40,12 @@ Conversation AI consumers import `ConversationAiSnapshotV1`. It is a
|
|
|
40
40
|
replace-in-place snapshot keyed by rooftop and canonical Customer identity; it
|
|
41
41
|
is not a source-of-truth Interaction record or a version-history API.
|
|
42
42
|
|
|
43
|
+
Reach out consumers use `CreateInboxCustomerCommand` for an explicit
|
|
44
|
+
create-only Customer request and `SendInboxMessageCommand` for the
|
|
45
|
+
Conversation-aware Telnyx SMS operation. Directory reads, Customer creation,
|
|
46
|
+
calls, and messages remain separate capabilities; a consumer must never infer
|
|
47
|
+
one grant from another.
|
|
48
|
+
|
|
43
49
|
The public npm artifact contains compiled TypeScript declarations, bundled OpenAPI, and shared fixtures. Consumers do not need GitHub repository credentials.
|
|
44
50
|
|
|
45
51
|
New DASH-273 verification runners must use the canonical v2 manifest exported at
|
package/dist/generated.d.ts
CHANGED
|
@@ -111,6 +111,46 @@ export interface paths {
|
|
|
111
111
|
patch?: never;
|
|
112
112
|
trace?: never;
|
|
113
113
|
};
|
|
114
|
+
"/v1/inbox/commands/create-customer": {
|
|
115
|
+
parameters: {
|
|
116
|
+
query?: never;
|
|
117
|
+
header?: never;
|
|
118
|
+
path?: never;
|
|
119
|
+
cookie?: never;
|
|
120
|
+
};
|
|
121
|
+
get?: never;
|
|
122
|
+
put?: never;
|
|
123
|
+
/**
|
|
124
|
+
* Create a new rooftop Customer for Reach out
|
|
125
|
+
* @description Creates a Customer only when the submitted mobile number is not already owned or quarantined at the selected rooftop. This is not an upsert: a number already owned by another Customer returns a conflict and is never silently merged. Ordo authorizes the User and delegates canonical Customer creation to pam-customers-service. Requires CREATE_CUSTOMER.
|
|
126
|
+
*/
|
|
127
|
+
post: operations["createInboxCustomer"];
|
|
128
|
+
delete?: never;
|
|
129
|
+
options?: never;
|
|
130
|
+
head?: never;
|
|
131
|
+
patch?: never;
|
|
132
|
+
trace?: never;
|
|
133
|
+
};
|
|
134
|
+
"/v1/inbox/commands/send-message": {
|
|
135
|
+
parameters: {
|
|
136
|
+
query?: never;
|
|
137
|
+
header?: never;
|
|
138
|
+
path?: never;
|
|
139
|
+
cookie?: never;
|
|
140
|
+
};
|
|
141
|
+
get?: never;
|
|
142
|
+
put?: never;
|
|
143
|
+
/**
|
|
144
|
+
* Send a Telnyx SMS and find or create its canonical Conversation
|
|
145
|
+
* @description Sends an outbound Customer SMS through the Ordo boundary. The caller names the canonical Customer, not a telephone number or provider. Ordo resolves or creates the Conversation, applies the explicit ownership disposition, and records the operation before delegating delivery to the Telnyx-only Comms path. An outbound-only Conversation may remain Closed with no active WorkCycle. Requires MESSAGE_CUSTOMER. Unknown provider outcomes are returned explicitly and are never blindly resent.
|
|
146
|
+
*/
|
|
147
|
+
post: operations["sendInboxMessage"];
|
|
148
|
+
delete?: never;
|
|
149
|
+
options?: never;
|
|
150
|
+
head?: never;
|
|
151
|
+
patch?: never;
|
|
152
|
+
trace?: never;
|
|
153
|
+
};
|
|
114
154
|
"/v1/inbox/commands/assign": {
|
|
115
155
|
parameters: {
|
|
116
156
|
query?: never;
|
|
@@ -162,6 +202,46 @@ export interface paths {
|
|
|
162
202
|
patch?: never;
|
|
163
203
|
trace?: never;
|
|
164
204
|
};
|
|
205
|
+
"/v1/inbox/commands/hold-pam": {
|
|
206
|
+
parameters: {
|
|
207
|
+
query?: never;
|
|
208
|
+
header?: never;
|
|
209
|
+
path?: never;
|
|
210
|
+
cookie?: never;
|
|
211
|
+
};
|
|
212
|
+
get?: never;
|
|
213
|
+
put?: never;
|
|
214
|
+
/**
|
|
215
|
+
* Stop Pam answering this Customer's texts
|
|
216
|
+
* @description Places a hold on Pam's automatic text replies for this Conversation. The hold is a lease rather than a switch: the messaging authority expires it on its own, and the resulting expiry is published as PamAutoReplyV1.pausedUntil. Governs texting only and never inbound telephone calls. Requires HOLD_PAM_AUTO_REPLY. A Conversation with no messaging record — one provisioned from an accepted repair order, for instance — has nothing to hold and is refused rather than silently accepted.
|
|
217
|
+
*/
|
|
218
|
+
post: operations["holdConversationPamAutoReply"];
|
|
219
|
+
delete?: never;
|
|
220
|
+
options?: never;
|
|
221
|
+
head?: never;
|
|
222
|
+
patch?: never;
|
|
223
|
+
trace?: never;
|
|
224
|
+
};
|
|
225
|
+
"/v1/inbox/commands/resume-pam": {
|
|
226
|
+
parameters: {
|
|
227
|
+
query?: never;
|
|
228
|
+
header?: never;
|
|
229
|
+
path?: never;
|
|
230
|
+
cookie?: never;
|
|
231
|
+
};
|
|
232
|
+
get?: never;
|
|
233
|
+
put?: never;
|
|
234
|
+
/**
|
|
235
|
+
* Let Pam answer this Customer's texts again
|
|
236
|
+
* @description Releases a hold before its lease expires. Accepted on a Conversation that is already ACTIVE so a reader who has lost track of the lease is never stuck; the operation is idempotent by operationId like every other command here. Requires HOLD_PAM_AUTO_REPLY.
|
|
237
|
+
*/
|
|
238
|
+
post: operations["resumeConversationPamAutoReply"];
|
|
239
|
+
delete?: never;
|
|
240
|
+
options?: never;
|
|
241
|
+
head?: never;
|
|
242
|
+
patch?: never;
|
|
243
|
+
trace?: never;
|
|
244
|
+
};
|
|
165
245
|
"/v1/inbox/commands/set-reminder": {
|
|
166
246
|
parameters: {
|
|
167
247
|
query?: never;
|
|
@@ -420,7 +500,7 @@ export interface components {
|
|
|
420
500
|
* @description A single Ordo product capability. Capabilities are the only authorization vocabulary for Ordo surfaces. They are not a second half of the dashboard's resource/action permission model and do not divide the work with it. Resource permissions govern legacy dashboard surfaces and nothing else; capabilities govern Ordo surfaces and nothing else; neither is a fallback or an outer gate for the other. A same-named resource is a coincidence of vocabulary rather than a related grant, so REPAIR_ORDERS:READ says nothing about VIEW_OPEN_REPAIR_ORDERS and a User may hold either without the other. Resolved per rooftop by pam-permissions-service from the User's role, and enforced by pam-ordo-service. The distribution across personas is the approved capability contract in section 3.3 of the Ordo Product and Engineering Specification.
|
|
421
501
|
* @enum {string}
|
|
422
502
|
*/
|
|
423
|
-
OrdoCapability: "VIEW_OWN_INBOX" | "VIEW_TEAM_INBOX" | "VIEW_CUSTOMER_DIRECTORY" | "CALL_CUSTOMER" | "SWITCH_ROOFTOP" | "VIEW_ANY_ROOFTOP_CONVERSATION" | "VIEW_OPEN_REPAIR_ORDERS" | "VIEW_ALL_OPEN_REPAIR_ORDERS" | "ASSIGN_OWNED_WORK" | "ASSIGN_ANY_WORK" | "CLOSE_OWNED_WORK" | "CLOSE_ANY_WORK" | "RESOLVE_NEEDS_ATTENTION" | "MENTION_USERS" | "ADD_CUSTOMER_NOTE" | "DELETE_ANY_CUSTOMER_NOTE";
|
|
503
|
+
OrdoCapability: "VIEW_OWN_INBOX" | "VIEW_TEAM_INBOX" | "VIEW_CUSTOMER_DIRECTORY" | "CALL_CUSTOMER" | "CREATE_CUSTOMER" | "MESSAGE_CUSTOMER" | "SWITCH_ROOFTOP" | "VIEW_ANY_ROOFTOP_CONVERSATION" | "VIEW_OPEN_REPAIR_ORDERS" | "VIEW_ALL_OPEN_REPAIR_ORDERS" | "ASSIGN_OWNED_WORK" | "ASSIGN_ANY_WORK" | "CLOSE_OWNED_WORK" | "CLOSE_ANY_WORK" | "RESOLVE_NEEDS_ATTENTION" | "MENTION_USERS" | "ADD_CUSTOMER_NOTE" | "DELETE_ANY_CUSTOMER_NOTE" | "HOLD_PAM_AUTO_REPLY";
|
|
424
504
|
/** @description A configured target for one stable rooftop User identity. */
|
|
425
505
|
InboxPolicyUserTargetV1: {
|
|
426
506
|
/**
|
|
@@ -671,7 +751,7 @@ export interface components {
|
|
|
671
751
|
channels: string[];
|
|
672
752
|
};
|
|
673
753
|
/** @enum {string} */
|
|
674
|
-
AvailableAction: "ASSIGN" | "SNOOZE" | "UNSNOOZE" | "SET_REMINDER" | "CLEAR_REMINDER" | "CLOSE" | "RESOLVE_ATTENTION" | "ADD_INTERNAL_COMMENT";
|
|
754
|
+
AvailableAction: "ASSIGN" | "SNOOZE" | "UNSNOOZE" | "SET_REMINDER" | "CLEAR_REMINDER" | "CLOSE" | "RESOLVE_ATTENTION" | "ADD_INTERNAL_COMMENT" | "SEND_MESSAGE" | "HOLD_PAM" | "RESUME_PAM";
|
|
675
755
|
InboxRow: {
|
|
676
756
|
/** Format: uuid */
|
|
677
757
|
conversationId: string;
|
|
@@ -736,6 +816,8 @@ export interface components {
|
|
|
736
816
|
openRepairOrder?: components["schemas"]["RepairOrderRef"] | null;
|
|
737
817
|
/** @description The Customer's most recent Conversation, or null when they have none. Null is a fact about the Customer rather than a hydration gap. */
|
|
738
818
|
conversationId: string | null;
|
|
819
|
+
/** @description Stable current owner identity used to render the colleague-owned Reach out choice. Optional during the additive rollout; null means the current WorkCycle is unassigned or there is no current WorkCycle. */
|
|
820
|
+
ownerUserId?: string | null;
|
|
739
821
|
relationship: components["schemas"]["ContactRelationship"];
|
|
740
822
|
availability: components["schemas"]["Availability"];
|
|
741
823
|
};
|
|
@@ -768,9 +850,15 @@ export interface components {
|
|
|
768
850
|
mentions?: components["schemas"]["MentionRef"][];
|
|
769
851
|
/**
|
|
770
852
|
* Format: uuid
|
|
771
|
-
* @description WorkCycle that was active when this Interaction was ingested, mirroring conversation_interaction_refs.work_cycle_id. Null is authoritative and means the Interaction belongs to no cycle,
|
|
853
|
+
* @description WorkCycle that was active when this Interaction was ingested, mirroring conversation_interaction_refs.work_cycle_id. Null is authoritative and means the Interaction belongs to no cycle. That is UNCOMMON rather than expected: an RO transition is attributed to the active cycle like any other activity, and because a cycle cannot be closed while a repair order is still linked and open, an RO_OPENED and its RO_CLOSED necessarily fall in the same cycle. A null here means no cycle was open when the Interaction arrived — an RO raised on a resolved Conversation, or the tested race where a Close commits first. Earlier revisions of this description said null was expected for RO transitions, which contradicted the sentence above it and led at least one consumer to treat a cycle-scoped read as unusable for repair-order events. Optional only to keep this addition a minor version; every producer emits it unconditionally and pam-ordo-service asserts that in its contract tests, so consumers should treat an absent field as a producer defect rather than a supported state. Consumers must never infer cycle membership from interaction timestamps.
|
|
772
854
|
*/
|
|
773
855
|
workCycleId?: string | null;
|
|
856
|
+
/** @description The system that mastered this Interaction, mirroring conversation_interaction_refs.source_system — `pam_messaging_dynamodb` for SMS, `pam_call_metadata` for calls and voicemails, and null for anything Ordo authored itself, such as an internal comment. Published so a consumer can tell WHICH external authority governs a Conversation's messaging without inferring it from a channel string. */
|
|
857
|
+
sourceSystem?: string | null;
|
|
858
|
+
/** @description The exact native locator of the mastering record, when the source system uses one. Published for the same reason the column that stores it carries the comment "exact native locator, never reconstructed from a current phone alias": a consumer that rebuilds this key from the Customer's current telephone number addresses the wrong thread whenever that number has been corrected, and cannot address one at all when the number is withheld or failed to hydrate. */
|
|
859
|
+
sourceLocator?: components["schemas"]["SourceLocatorV1"] | null;
|
|
860
|
+
/** @description Present only on an Interaction of kind `ro_event`, and never null on one. Before this field a repair-order Interaction arrived with kind `ro_event`, a null body and nothing else, so a reader could tell that SOMETHING had happened to a repair order but neither which one nor whether it had opened or closed. */
|
|
861
|
+
repairOrder?: components["schemas"]["InteractionRepairOrderRefV1"] | null;
|
|
774
862
|
sequenceNumber: number;
|
|
775
863
|
kind: string;
|
|
776
864
|
channel?: string | null;
|
|
@@ -797,6 +885,40 @@ export interface components {
|
|
|
797
885
|
vin: components["schemas"]["HydratedText"];
|
|
798
886
|
availability: components["schemas"]["Availability"];
|
|
799
887
|
};
|
|
888
|
+
/** @description Where a mastered record actually lives, in the shape its own system uses. Today only the DynamoDB-backed messaging source supplies one; a source that addresses records by a plain identifier has none, and its Interactions carry null. */
|
|
889
|
+
SourceLocatorV1: {
|
|
890
|
+
/** @description The item-collection key. For `pam_messaging_dynamodb` this is `DEALER#{clientOrgId}#FROM#{customerE164}`, which is the same key the conversation-level state record uses, so a consumer holding it can address the Conversation's messaging state without deriving anything. */
|
|
891
|
+
partitionKey: string;
|
|
892
|
+
/** @description The individual record within the collection, when the source has one. */
|
|
893
|
+
sortKey?: string | null;
|
|
894
|
+
};
|
|
895
|
+
/** @description Which repair order moved, and which way. The vocabulary is the producer's own `ProducerRepairOrderTransitionV1.transition`; this republishes it on the read model rather than inventing a second one. */
|
|
896
|
+
InteractionRepairOrderRefV1: {
|
|
897
|
+
/** @enum {string} */
|
|
898
|
+
transition: "RO_OPENED" | "RO_CLOSED";
|
|
899
|
+
sourceSystem: string;
|
|
900
|
+
externalId: string;
|
|
901
|
+
/** @description The number a reader recognises. Hydrated, and therefore able to be unavailable on its own: the transition is known from the Interaction itself and stays readable when the Customer-facing number does not resolve. */
|
|
902
|
+
displayNumber: components["schemas"]["HydratedText"];
|
|
903
|
+
};
|
|
904
|
+
/**
|
|
905
|
+
* @description Whether Pam is answering this Customer's texts, and until when.
|
|
906
|
+
* A LEASE RATHER THAN A SWITCH, because that is what the systems underneath actually implement: a hold placed by a human expires on its own after a fixed window and Pam resumes. Publishing a bare boolean would let a consumer draw "paused" over a Conversation Pam had already started answering again, which is worse than drawing nothing — the reader believes they own the thread.
|
|
907
|
+
* SCOPED TO TEXT. Nothing here governs whether Pam answers an inbound telephone call. A consumer must not label this control with a word that claims more than texting.
|
|
908
|
+
*/
|
|
909
|
+
PamAutoReplyV1: {
|
|
910
|
+
/**
|
|
911
|
+
* @description `UNKNOWN` is a real answer and not an error: the messaging authority may be unreachable, or the Conversation may have no messaging record at all, which is the normal state of one provisioned from an accepted repair order or a reach-out. A consumer must not render `UNKNOWN` as either of the other two.
|
|
912
|
+
* @enum {string}
|
|
913
|
+
*/
|
|
914
|
+
state: "ACTIVE" | "PAUSED" | "UNKNOWN";
|
|
915
|
+
/**
|
|
916
|
+
* Format: date-time
|
|
917
|
+
* @description When a `PAUSED` hold lapses. Null while `ACTIVE`, and null on a `PAUSED` state whose authority does not expire holds. A consumer comparing this to the current time is computing the same thing the authority computes when it decides whether to suppress a reply.
|
|
918
|
+
*/
|
|
919
|
+
pausedUntil?: string | null;
|
|
920
|
+
availability: components["schemas"]["Availability"];
|
|
921
|
+
};
|
|
800
922
|
RepairOrderRef: {
|
|
801
923
|
sourceSystem: string;
|
|
802
924
|
externalId: string;
|
|
@@ -818,6 +940,8 @@ export interface components {
|
|
|
818
940
|
reminder: components["schemas"]["Reminder"] | null;
|
|
819
941
|
attention: components["schemas"]["AttentionSummary"] | null;
|
|
820
942
|
overdue: components["schemas"]["OverdueSummary"];
|
|
943
|
+
/** @description Optional so this addition stays a minor version. An absent field means this deployment does not resolve the messaging authority at all, which a consumer should treat the same way it treats `UNKNOWN` — draw no control rather than an inert one. */
|
|
944
|
+
pamAutoReply?: components["schemas"]["PamAutoReplyV1"];
|
|
821
945
|
customerDisplayName: components["schemas"]["HydratedText"];
|
|
822
946
|
/** @description The Customer's contact telephone number, for placing an outbound call. Optional because no producer can supply it yet: Ordo stores a Customer reference and no payload, so this arrives with external Customer hydration. Absent and `{ value: null }` mean different things - absent is a producer that does not publish the field, null with an availability is a source that could not supply it. */
|
|
823
947
|
customerPhone?: components["schemas"]["HydratedText"];
|
|
@@ -1347,6 +1471,8 @@ export interface components {
|
|
|
1347
1471
|
/** Format: uuid */
|
|
1348
1472
|
throughInteractionRefId: string;
|
|
1349
1473
|
};
|
|
1474
|
+
/** @description Conversation-scoped rather than WorkCycle-scoped, and deliberately carrying no expectedVersion. Whether Pam answers a Customer's texts is a property of the Conversation's messaging, not of the work in front of an advisor: a Conversation with no open cycle still receives texts, and a hold that could only be placed while a cycle happened to be open would be unavailable in exactly the state — a resolved thread the Customer is still writing to — where a human most wants it. There is no version to guard either, because the authority underneath is a lease that expires on its own; the operationId carries idempotency, as it does for Customer notes. */
|
|
1475
|
+
PamAutoReplyCommand: components["schemas"]["ConversationOperationEnvelope"];
|
|
1350
1476
|
AddCustomerNoteCommand: components["schemas"]["ConversationOperationEnvelope"] & {
|
|
1351
1477
|
body: string;
|
|
1352
1478
|
};
|
|
@@ -1355,6 +1481,74 @@ export interface components {
|
|
|
1355
1481
|
noteId: string;
|
|
1356
1482
|
expectedNoteVersion: number;
|
|
1357
1483
|
};
|
|
1484
|
+
InboxCustomerIdentity: {
|
|
1485
|
+
/** @constant */
|
|
1486
|
+
sourceSystem: "pam_customers_service";
|
|
1487
|
+
/** Format: uuid */
|
|
1488
|
+
customerId: string;
|
|
1489
|
+
};
|
|
1490
|
+
/** @description Optional structured vehicle information for a newly created Customer. At least one field is required when the object is present. It creates Customer context only and never implies an open repair order. */
|
|
1491
|
+
NewCustomerVehicleInput: {
|
|
1492
|
+
year?: number;
|
|
1493
|
+
make?: string;
|
|
1494
|
+
model?: string;
|
|
1495
|
+
vin?: string;
|
|
1496
|
+
};
|
|
1497
|
+
CreateInboxCustomerCommand: {
|
|
1498
|
+
operationId: string;
|
|
1499
|
+
clientOrgId: string;
|
|
1500
|
+
firstName: string;
|
|
1501
|
+
lastName?: string;
|
|
1502
|
+
/** @description Normalized E.164 mobile number. */
|
|
1503
|
+
mobileNumber: string;
|
|
1504
|
+
vehicle?: components["schemas"]["NewCustomerVehicleInput"];
|
|
1505
|
+
};
|
|
1506
|
+
CreateInboxCustomerResult: {
|
|
1507
|
+
data: {
|
|
1508
|
+
operationId: string;
|
|
1509
|
+
applied: boolean;
|
|
1510
|
+
replayed: boolean;
|
|
1511
|
+
customer: components["schemas"]["InboxCustomerIdentity"];
|
|
1512
|
+
/** Format: uuid */
|
|
1513
|
+
vehicleId: string | null;
|
|
1514
|
+
};
|
|
1515
|
+
};
|
|
1516
|
+
/**
|
|
1517
|
+
* @description PRESERVE leaves an existing owner unchanged. TAKE explicitly requests assignment to the authenticated User when an active WorkCycle exists; it never creates a WorkCycle merely to assign it.
|
|
1518
|
+
* @enum {string}
|
|
1519
|
+
*/
|
|
1520
|
+
OutboundMessageOwnershipDisposition: "PRESERVE" | "TAKE";
|
|
1521
|
+
SendInboxMessageCommand: {
|
|
1522
|
+
operationId: string;
|
|
1523
|
+
clientOrgId: string;
|
|
1524
|
+
customer: components["schemas"]["InboxCustomerIdentity"];
|
|
1525
|
+
/**
|
|
1526
|
+
* Format: uuid
|
|
1527
|
+
* @description The Conversation observed by the caller, or null when contact search reported NONE. Ordo revalidates it against the canonical Customer and safely finds or creates the Conversation under its tenant lock.
|
|
1528
|
+
*/
|
|
1529
|
+
conversationId: string | null;
|
|
1530
|
+
body: string;
|
|
1531
|
+
ownershipDisposition: components["schemas"]["OutboundMessageOwnershipDisposition"];
|
|
1532
|
+
};
|
|
1533
|
+
/** @enum {string} */
|
|
1534
|
+
OutboundMessageDeliveryState: "PENDING" | "ACCEPTED" | "FAILED" | "UNKNOWN";
|
|
1535
|
+
SendInboxMessageResult: {
|
|
1536
|
+
data: {
|
|
1537
|
+
operationId: string;
|
|
1538
|
+
applied: boolean;
|
|
1539
|
+
replayed: boolean;
|
|
1540
|
+
/** Format: uuid */
|
|
1541
|
+
conversationId: string;
|
|
1542
|
+
conversationCreated: boolean;
|
|
1543
|
+
/** Format: uuid */
|
|
1544
|
+
deliveryId: string;
|
|
1545
|
+
deliveryState: components["schemas"]["OutboundMessageDeliveryState"];
|
|
1546
|
+
/** Format: uuid */
|
|
1547
|
+
workCycleId: string | null;
|
|
1548
|
+
resultingVersion: number | null;
|
|
1549
|
+
ownershipDisposition: components["schemas"]["OutboundMessageOwnershipDisposition"];
|
|
1550
|
+
};
|
|
1551
|
+
};
|
|
1358
1552
|
CommandResult: {
|
|
1359
1553
|
data: {
|
|
1360
1554
|
operationId: string;
|
|
@@ -1482,6 +1676,26 @@ export interface components {
|
|
|
1482
1676
|
"application/json": components["schemas"]["NotificationCommandResult"];
|
|
1483
1677
|
};
|
|
1484
1678
|
};
|
|
1679
|
+
/** @description Created or idempotently replayed canonical Customer result. */
|
|
1680
|
+
InboxCustomerCreated: {
|
|
1681
|
+
headers: {
|
|
1682
|
+
"x-correlation-id": components["headers"]["CorrelationId"];
|
|
1683
|
+
[name: string]: unknown;
|
|
1684
|
+
};
|
|
1685
|
+
content: {
|
|
1686
|
+
"application/json": components["schemas"]["CreateInboxCustomerResult"];
|
|
1687
|
+
};
|
|
1688
|
+
};
|
|
1689
|
+
/** @description Submitted or idempotently replayed outbound-message result. */
|
|
1690
|
+
InboxMessageSubmitted: {
|
|
1691
|
+
headers: {
|
|
1692
|
+
"x-correlation-id": components["headers"]["CorrelationId"];
|
|
1693
|
+
[name: string]: unknown;
|
|
1694
|
+
};
|
|
1695
|
+
content: {
|
|
1696
|
+
"application/json": components["schemas"]["SendInboxMessageResult"];
|
|
1697
|
+
};
|
|
1698
|
+
};
|
|
1485
1699
|
/** @description Invalid input. */
|
|
1486
1700
|
BadRequest: {
|
|
1487
1701
|
headers: {
|
|
@@ -1606,6 +1820,11 @@ export interface components {
|
|
|
1606
1820
|
"application/json": components["schemas"]["AdvanceReadCursorCommand"];
|
|
1607
1821
|
};
|
|
1608
1822
|
};
|
|
1823
|
+
PamAutoReplyCommand: {
|
|
1824
|
+
content: {
|
|
1825
|
+
"application/json": components["schemas"]["PamAutoReplyCommand"];
|
|
1826
|
+
};
|
|
1827
|
+
};
|
|
1609
1828
|
AddCustomerNoteCommand: {
|
|
1610
1829
|
content: {
|
|
1611
1830
|
"application/json": components["schemas"]["AddCustomerNoteCommand"];
|
|
@@ -1621,6 +1840,16 @@ export interface components {
|
|
|
1621
1840
|
"application/json": components["schemas"]["NotificationCommand"];
|
|
1622
1841
|
};
|
|
1623
1842
|
};
|
|
1843
|
+
CreateInboxCustomerCommand: {
|
|
1844
|
+
content: {
|
|
1845
|
+
"application/json": components["schemas"]["CreateInboxCustomerCommand"];
|
|
1846
|
+
};
|
|
1847
|
+
};
|
|
1848
|
+
SendInboxMessageCommand: {
|
|
1849
|
+
content: {
|
|
1850
|
+
"application/json": components["schemas"]["SendInboxMessageCommand"];
|
|
1851
|
+
};
|
|
1852
|
+
};
|
|
1624
1853
|
};
|
|
1625
1854
|
headers: {
|
|
1626
1855
|
/** @description Stable request correlation identifier. */
|
|
@@ -1852,6 +2081,49 @@ export interface operations {
|
|
|
1852
2081
|
503: components["responses"]["ServiceUnavailable"];
|
|
1853
2082
|
};
|
|
1854
2083
|
};
|
|
2084
|
+
createInboxCustomer: {
|
|
2085
|
+
parameters: {
|
|
2086
|
+
query?: never;
|
|
2087
|
+
header: {
|
|
2088
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2089
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
2090
|
+
};
|
|
2091
|
+
path?: never;
|
|
2092
|
+
cookie?: never;
|
|
2093
|
+
};
|
|
2094
|
+
requestBody: components["requestBodies"]["CreateInboxCustomerCommand"];
|
|
2095
|
+
responses: {
|
|
2096
|
+
200: components["responses"]["InboxCustomerCreated"];
|
|
2097
|
+
400: components["responses"]["BadRequest"];
|
|
2098
|
+
401: components["responses"]["Unauthorized"];
|
|
2099
|
+
403: components["responses"]["Forbidden"];
|
|
2100
|
+
409: components["responses"]["Conflict"];
|
|
2101
|
+
500: components["responses"]["InternalError"];
|
|
2102
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
2103
|
+
};
|
|
2104
|
+
};
|
|
2105
|
+
sendInboxMessage: {
|
|
2106
|
+
parameters: {
|
|
2107
|
+
query?: never;
|
|
2108
|
+
header: {
|
|
2109
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2110
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
2111
|
+
};
|
|
2112
|
+
path?: never;
|
|
2113
|
+
cookie?: never;
|
|
2114
|
+
};
|
|
2115
|
+
requestBody: components["requestBodies"]["SendInboxMessageCommand"];
|
|
2116
|
+
responses: {
|
|
2117
|
+
200: components["responses"]["InboxMessageSubmitted"];
|
|
2118
|
+
400: components["responses"]["BadRequest"];
|
|
2119
|
+
401: components["responses"]["Unauthorized"];
|
|
2120
|
+
403: components["responses"]["Forbidden"];
|
|
2121
|
+
404: components["responses"]["NotFound"];
|
|
2122
|
+
409: components["responses"]["Conflict"];
|
|
2123
|
+
500: components["responses"]["InternalError"];
|
|
2124
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
2125
|
+
};
|
|
2126
|
+
};
|
|
1855
2127
|
assignConversation: {
|
|
1856
2128
|
parameters: {
|
|
1857
2129
|
query?: never;
|
|
@@ -1921,6 +2193,52 @@ export interface operations {
|
|
|
1921
2193
|
503: components["responses"]["ServiceUnavailable"];
|
|
1922
2194
|
};
|
|
1923
2195
|
};
|
|
2196
|
+
holdConversationPamAutoReply: {
|
|
2197
|
+
parameters: {
|
|
2198
|
+
query?: never;
|
|
2199
|
+
header: {
|
|
2200
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2201
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
2202
|
+
};
|
|
2203
|
+
path?: never;
|
|
2204
|
+
cookie?: never;
|
|
2205
|
+
};
|
|
2206
|
+
requestBody: components["requestBodies"]["PamAutoReplyCommand"];
|
|
2207
|
+
responses: {
|
|
2208
|
+
200: components["responses"]["CommandApplied"];
|
|
2209
|
+
400: components["responses"]["BadRequest"];
|
|
2210
|
+
401: components["responses"]["Unauthorized"];
|
|
2211
|
+
403: components["responses"]["Forbidden"];
|
|
2212
|
+
404: components["responses"]["NotFound"];
|
|
2213
|
+
409: components["responses"]["Conflict"];
|
|
2214
|
+
500: components["responses"]["InternalError"];
|
|
2215
|
+
501: components["responses"]["NotImplemented"];
|
|
2216
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
2217
|
+
};
|
|
2218
|
+
};
|
|
2219
|
+
resumeConversationPamAutoReply: {
|
|
2220
|
+
parameters: {
|
|
2221
|
+
query?: never;
|
|
2222
|
+
header: {
|
|
2223
|
+
/** @description Authorized rooftop context. For commands this value must match body.clientOrgId; neither value is trusted without DASH-233 resolution. */
|
|
2224
|
+
"x-client-org-id": components["parameters"]["ClientOrgId"];
|
|
2225
|
+
};
|
|
2226
|
+
path?: never;
|
|
2227
|
+
cookie?: never;
|
|
2228
|
+
};
|
|
2229
|
+
requestBody: components["requestBodies"]["PamAutoReplyCommand"];
|
|
2230
|
+
responses: {
|
|
2231
|
+
200: components["responses"]["CommandApplied"];
|
|
2232
|
+
400: components["responses"]["BadRequest"];
|
|
2233
|
+
401: components["responses"]["Unauthorized"];
|
|
2234
|
+
403: components["responses"]["Forbidden"];
|
|
2235
|
+
404: components["responses"]["NotFound"];
|
|
2236
|
+
409: components["responses"]["Conflict"];
|
|
2237
|
+
500: components["responses"]["InternalError"];
|
|
2238
|
+
501: components["responses"]["NotImplemented"];
|
|
2239
|
+
503: components["responses"]["ServiceUnavailable"];
|
|
2240
|
+
};
|
|
2241
|
+
};
|
|
1924
2242
|
setConversationReminder: {
|
|
1925
2243
|
parameters: {
|
|
1926
2244
|
query?: never;
|