featurebase-node 0.8.0 → 0.9.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/CHANGELOG.md +14 -0
- package/client.d.mts +3 -1
- package/client.d.mts.map +1 -1
- package/client.d.ts +3 -1
- package/client.d.ts.map +1 -1
- package/client.js.map +1 -1
- package/client.mjs.map +1 -1
- package/core/pagination.d.mts +15 -0
- package/core/pagination.d.mts.map +1 -1
- package/core/pagination.d.ts +15 -0
- package/core/pagination.d.ts.map +1 -1
- package/core/pagination.js +25 -1
- package/core/pagination.js.map +1 -1
- package/core/pagination.mjs +23 -0
- package/core/pagination.mjs.map +1 -1
- package/package.json +1 -1
- package/resources/support/conversations/conversations.d.mts +810 -8
- package/resources/support/conversations/conversations.d.mts.map +1 -1
- package/resources/support/conversations/conversations.d.ts +810 -8
- package/resources/support/conversations/conversations.d.ts.map +1 -1
- package/resources/support/conversations/conversations.js +240 -4
- package/resources/support/conversations/conversations.js.map +1 -1
- package/resources/support/conversations/conversations.mjs +240 -4
- package/resources/support/conversations/conversations.mjs.map +1 -1
- package/resources/support/conversations/index.d.mts +1 -2
- package/resources/support/conversations/index.d.mts.map +1 -1
- package/resources/support/conversations/index.d.ts +1 -2
- package/resources/support/conversations/index.d.ts.map +1 -1
- package/resources/support/conversations/index.js +1 -3
- package/resources/support/conversations/index.js.map +1 -1
- package/resources/support/conversations/index.mjs +0 -1
- package/resources/support/conversations/index.mjs.map +1 -1
- package/resources/support/index.d.mts +1 -1
- package/resources/support/index.d.mts.map +1 -1
- package/resources/support/index.d.ts +1 -1
- package/resources/support/index.d.ts.map +1 -1
- package/resources/support/index.js.map +1 -1
- package/resources/support/index.mjs.map +1 -1
- package/resources/support/support.d.mts +2 -2
- package/resources/support/support.d.mts.map +1 -1
- package/resources/support/support.d.ts +2 -2
- package/resources/support/support.d.ts.map +1 -1
- package/resources/support/support.js.map +1 -1
- package/resources/support/support.mjs.map +1 -1
- package/src/client.ts +13 -1
- package/src/core/pagination.ts +49 -0
- package/src/resources/support/conversations/conversations.ts +1059 -86
- package/src/resources/support/conversations/index.ts +6 -7
- package/src/resources/support/index.ts +6 -0
- package/src/resources/support/support.ts +12 -0
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
- package/resources/support/conversations/tags.d.mts +0 -200
- package/resources/support/conversations/tags.d.mts.map +0 -1
- package/resources/support/conversations/tags.d.ts +0 -200
- package/resources/support/conversations/tags.d.ts.map +0 -1
- package/resources/support/conversations/tags.js +0 -146
- package/resources/support/conversations/tags.js.map +0 -1
- package/resources/support/conversations/tags.mjs +0 -142
- package/resources/support/conversations/tags.mjs.map +0 -1
- package/src/resources/support/conversations/tags.ts +0 -260
|
@@ -5,14 +5,6 @@ import * as ConversationsAPI from './conversations';
|
|
|
5
5
|
import * as ConversationTagsAPI from '../conversation-tags';
|
|
6
6
|
import * as ParticipantsAPI from './participants';
|
|
7
7
|
import { ParticipantAddParams, ParticipantRemoveParams, Participants } from './participants';
|
|
8
|
-
import * as TagsAPI from './tags';
|
|
9
|
-
import {
|
|
10
|
-
AttachedConversationTag,
|
|
11
|
-
ConversationTagMutationActor,
|
|
12
|
-
TagAttachParams,
|
|
13
|
-
TagDetachParams,
|
|
14
|
-
Tags,
|
|
15
|
-
} from './tags';
|
|
16
8
|
import { APIPromise } from '../../../core/api-promise';
|
|
17
9
|
import { CursorPage, type CursorPageParams, PagePromise } from '../../../core/pagination';
|
|
18
10
|
import { buildHeaders } from '../../../internal/headers';
|
|
@@ -23,7 +15,6 @@ import { path } from '../../../internal/utils/path';
|
|
|
23
15
|
* Conversations are messenger/inbox conversations in your Featurebase organization. Use this endpoint to list and retrieve conversation information.
|
|
24
16
|
*/
|
|
25
17
|
export class Conversations extends APIResource {
|
|
26
|
-
tags: TagsAPI.Tags = new TagsAPI.Tags(this._client);
|
|
27
18
|
participants: ParticipantsAPI.Participants = new ParticipantsAPI.Participants(this._client);
|
|
28
19
|
|
|
29
20
|
/**
|
|
@@ -583,6 +574,148 @@ export class Conversations extends APIResource {
|
|
|
583
574
|
});
|
|
584
575
|
}
|
|
585
576
|
|
|
577
|
+
/**
|
|
578
|
+
* Attaches a workspace tag to a conversation.
|
|
579
|
+
*
|
|
580
|
+
* This endpoint requires both the tag ID to attach and the `actingAdminId` of the
|
|
581
|
+
* admin on whose behalf the mutation is recorded.
|
|
582
|
+
*
|
|
583
|
+
* ### Path Parameters
|
|
584
|
+
*
|
|
585
|
+
* - `id` - The conversation ID (short ID)
|
|
586
|
+
*
|
|
587
|
+
* ### Request Body
|
|
588
|
+
*
|
|
589
|
+
* | Field | Type | Required | Description |
|
|
590
|
+
* | --------------- | ------ | -------- | ------------------------------------------------------------------------ |
|
|
591
|
+
* | `tagId` | string | Yes | The Featurebase tag ID to attach |
|
|
592
|
+
* | `actingAdminId` | string | Yes | The admin performing the mutation. Must be a member of the organization. |
|
|
593
|
+
*
|
|
594
|
+
* ### Behavior
|
|
595
|
+
*
|
|
596
|
+
* Featurebase resolves the latest taggable reply/message in the conversation and
|
|
597
|
+
* records the tag attachment against that part so audit metadata remains
|
|
598
|
+
* deterministic.
|
|
599
|
+
*
|
|
600
|
+
* ### Response
|
|
601
|
+
*
|
|
602
|
+
* Returns the affected tag plus attachment metadata such as `targetPartId`,
|
|
603
|
+
* `appliedAt`, and `appliedBy`.
|
|
604
|
+
*
|
|
605
|
+
* ### Example Request
|
|
606
|
+
*
|
|
607
|
+
* ```json
|
|
608
|
+
* {
|
|
609
|
+
* "tagId": "67ec1234abcd5678ef901234",
|
|
610
|
+
* "actingAdminId": "507f1f77bcf86cd799439011"
|
|
611
|
+
* }
|
|
612
|
+
* ```
|
|
613
|
+
*
|
|
614
|
+
* ### Version Availability
|
|
615
|
+
*
|
|
616
|
+
* This endpoint is only available in API version 2026-01-01.nova and newer.
|
|
617
|
+
*
|
|
618
|
+
* @example
|
|
619
|
+
* ```ts
|
|
620
|
+
* const response =
|
|
621
|
+
* await client.support.conversations.attachTag('12345', {
|
|
622
|
+
* actingAdminId: '507f1f77bcf86cd799439011',
|
|
623
|
+
* tagId: '67ec1234abcd5678ef901234',
|
|
624
|
+
* });
|
|
625
|
+
* ```
|
|
626
|
+
*/
|
|
627
|
+
attachTag(
|
|
628
|
+
id: string,
|
|
629
|
+
params: ConversationAttachTagParams,
|
|
630
|
+
options?: RequestOptions,
|
|
631
|
+
): APIPromise<ConversationAttachTagResponse> {
|
|
632
|
+
const { 'Featurebase-Version': featurebaseVersion, ...body } = params;
|
|
633
|
+
return this._client.post(path`/v2/conversations/${id}/tags`, {
|
|
634
|
+
body,
|
|
635
|
+
...options,
|
|
636
|
+
headers: buildHeaders([
|
|
637
|
+
{
|
|
638
|
+
...(featurebaseVersion?.toString() != null ?
|
|
639
|
+
{ 'Featurebase-Version': featurebaseVersion?.toString() }
|
|
640
|
+
: undefined),
|
|
641
|
+
},
|
|
642
|
+
options?.headers,
|
|
643
|
+
]),
|
|
644
|
+
});
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
/**
|
|
648
|
+
* Removes a workspace tag from a conversation.
|
|
649
|
+
*
|
|
650
|
+
* This endpoint requires the `actingAdminId` of the admin on whose behalf the
|
|
651
|
+
* mutation is recorded.
|
|
652
|
+
*
|
|
653
|
+
* ### Path Parameters
|
|
654
|
+
*
|
|
655
|
+
* - `id` - The conversation ID (short ID)
|
|
656
|
+
* - `tagId` - The Featurebase tag ID to remove
|
|
657
|
+
*
|
|
658
|
+
* ### Request Body
|
|
659
|
+
*
|
|
660
|
+
* | Field | Type | Required | Description |
|
|
661
|
+
* | --------------- | ------ | -------- | ------------------------------------------------------------------------ |
|
|
662
|
+
* | `actingAdminId` | string | Yes | The admin performing the mutation. Must be a member of the organization. |
|
|
663
|
+
*
|
|
664
|
+
* ### Behavior
|
|
665
|
+
*
|
|
666
|
+
* Featurebase resolves the latest taggable reply/message in the conversation and
|
|
667
|
+
* records the tag removal against that part so audit metadata remains
|
|
668
|
+
* deterministic.
|
|
669
|
+
*
|
|
670
|
+
* ### Response
|
|
671
|
+
*
|
|
672
|
+
* Returns the affected tag payload with the most relevant attachment metadata
|
|
673
|
+
* available for that relationship.
|
|
674
|
+
*
|
|
675
|
+
* ### Example Request
|
|
676
|
+
*
|
|
677
|
+
* ```json
|
|
678
|
+
* {
|
|
679
|
+
* "actingAdminId": "507f1f77bcf86cd799439011"
|
|
680
|
+
* }
|
|
681
|
+
* ```
|
|
682
|
+
*
|
|
683
|
+
* ### Version Availability
|
|
684
|
+
*
|
|
685
|
+
* This endpoint is only available in API version 2026-01-01.nova and newer.
|
|
686
|
+
*
|
|
687
|
+
* @example
|
|
688
|
+
* ```ts
|
|
689
|
+
* const response =
|
|
690
|
+
* await client.support.conversations.detachTag(
|
|
691
|
+
* '67ec1234abcd5678ef901234',
|
|
692
|
+
* {
|
|
693
|
+
* id: '12345',
|
|
694
|
+
* actingAdminId: '507f1f77bcf86cd799439011',
|
|
695
|
+
* },
|
|
696
|
+
* );
|
|
697
|
+
* ```
|
|
698
|
+
*/
|
|
699
|
+
detachTag(
|
|
700
|
+
tagID: string,
|
|
701
|
+
params: ConversationDetachTagParams,
|
|
702
|
+
options?: RequestOptions,
|
|
703
|
+
): APIPromise<ConversationDetachTagResponse> {
|
|
704
|
+
const { id, 'Featurebase-Version': featurebaseVersion, ...body } = params;
|
|
705
|
+
return this._client.delete(path`/v2/conversations/${id}/tags/${tagID}`, {
|
|
706
|
+
body,
|
|
707
|
+
...options,
|
|
708
|
+
headers: buildHeaders([
|
|
709
|
+
{
|
|
710
|
+
...(featurebaseVersion?.toString() != null ?
|
|
711
|
+
{ 'Featurebase-Version': featurebaseVersion?.toString() }
|
|
712
|
+
: undefined),
|
|
713
|
+
},
|
|
714
|
+
options?.headers,
|
|
715
|
+
]),
|
|
716
|
+
});
|
|
717
|
+
}
|
|
718
|
+
|
|
586
719
|
/**
|
|
587
720
|
* Redacts a conversation part (message) from a conversation. Redaction permanently
|
|
588
721
|
* removes the message content while preserving the conversation structure.
|
|
@@ -801,6 +934,115 @@ export class Conversations extends APIResource {
|
|
|
801
934
|
]),
|
|
802
935
|
});
|
|
803
936
|
}
|
|
937
|
+
|
|
938
|
+
/**
|
|
939
|
+
* Search conversations with a structured filter AST and an optional full-text
|
|
940
|
+
* query.
|
|
941
|
+
*
|
|
942
|
+
* The endpoint has two modes that are picked automatically from the body:
|
|
943
|
+
*
|
|
944
|
+
* - **Filter mode** (`query` set, `search` omitted): structured filtering against
|
|
945
|
+
* indexed conversation fields. Sorted by `lastActivityAt` desc by default; set
|
|
946
|
+
* `sort` to `last_activity_at:asc` for the inverse.
|
|
947
|
+
* - **Search mode** (`search` set, `query` optional): full-text search across
|
|
948
|
+
* conversation messages, then narrowed by the same `query` AST so the same
|
|
949
|
+
* filters apply. Results are ranked by relevance.
|
|
950
|
+
*
|
|
951
|
+
* ### Structured query AST
|
|
952
|
+
*
|
|
953
|
+
* Each clause has the shape `{ field, operator, value }`. You can pass a single
|
|
954
|
+
* clause or wrap up to 15 in a top-level `AND` group:
|
|
955
|
+
*
|
|
956
|
+
* ```json
|
|
957
|
+
* {
|
|
958
|
+
* "query": {
|
|
959
|
+
* "operator": "AND",
|
|
960
|
+
* "value": [
|
|
961
|
+
* { "field": "state", "operator": "=", "value": "open" },
|
|
962
|
+
* {
|
|
963
|
+
* "field": "admin_assignee_id",
|
|
964
|
+
* "operator": "=",
|
|
965
|
+
* "value": "507f1f77bcf86cd799439011"
|
|
966
|
+
* }
|
|
967
|
+
* ]
|
|
968
|
+
* }
|
|
969
|
+
* }
|
|
970
|
+
* ```
|
|
971
|
+
*
|
|
972
|
+
* Top-level `OR` groups and nested groups are not supported in this version.
|
|
973
|
+
*
|
|
974
|
+
* ### Supported fields and operators
|
|
975
|
+
*
|
|
976
|
+
* | Field | Type | Operators |
|
|
977
|
+
* | ---------------------------- | ------------------------------------------------- | ---------------------- |
|
|
978
|
+
* | `state` | enum (`open` / `closed` / `snoozed`) | `=`, `!=`, `IN`, `NIN` |
|
|
979
|
+
* | `priority` | boolean | `=`, `!=` |
|
|
980
|
+
* | `admin_assignee_id` | id or null (unassigned) | `=`, `!=`, `IN`, `NIN` |
|
|
981
|
+
* | `team_assignee_id` | id or null (unassigned) | `=`, `!=`, `IN`, `NIN` |
|
|
982
|
+
* | `brand_id` | id or null | `=`, `!=`, `IN`, `NIN` |
|
|
983
|
+
* | `tag_ids` | id (matches any conversation containing this tag) | `=`, `!=`, `IN`, `NIN` |
|
|
984
|
+
* | `user_id` / `participant_id` | id of a conversation participant | `=`, `!=`, `IN`, `NIN` |
|
|
985
|
+
* | `mentioned_admin_ids` | admin id | `=`, `!=`, `IN`, `NIN` |
|
|
986
|
+
* | `created_at` | unix seconds | `=`, `>`, `<` |
|
|
987
|
+
*
|
|
988
|
+
* For unbounded fields a query consisting only of `!=` or `NIN` clauses is
|
|
989
|
+
* rejected with `query_too_broad` to prevent full-org scans. Combine the negation
|
|
990
|
+
* with at least one positive clause (`=`, `IN`, `>`, `<`) instead. Bounded enum
|
|
991
|
+
* fields (`state`, `priority`) are exempt because their negation is naturally
|
|
992
|
+
* bounded.
|
|
993
|
+
*
|
|
994
|
+
* ### Pagination
|
|
995
|
+
*
|
|
996
|
+
* Cursor-based, `limit` between 1 and 100 (default 10). Pagination cursors are
|
|
997
|
+
* mode-specific - reusing a filter-mode cursor in search mode (or vice versa)
|
|
998
|
+
* returns `400`. `totalCount` is approximate and capped at 1000;
|
|
999
|
+
* `totalCountCapped` is `true` when the real count may be higher.
|
|
1000
|
+
*
|
|
1001
|
+
* ### Response
|
|
1002
|
+
*
|
|
1003
|
+
* Returns a slim conversation row optimised for inbox / list rendering - just the
|
|
1004
|
+
* fields you need to render a row and link to the conversation. Fetch the full
|
|
1005
|
+
* conversation via `GET /v2/conversations/{id}` when the user opens one.
|
|
1006
|
+
*
|
|
1007
|
+
* Search-specific additions on each row:
|
|
1008
|
+
*
|
|
1009
|
+
* - `conversationUser` - the customer / lead the conversation is with. Use this
|
|
1010
|
+
* for the row identity.
|
|
1011
|
+
* - `latestConversationParts` - capped latest-message preview window. Each
|
|
1012
|
+
* `previewMarkdown` value is truncated server-side; fetch the full conversation
|
|
1013
|
+
* for complete history and full bodies.
|
|
1014
|
+
* - `matchingPartAuthor` - author of the specific message that matched the search
|
|
1015
|
+
* query (search mode only). May be a teammate or bot.
|
|
1016
|
+
* - `matchingPart` - reference to the matched message (search mode only).
|
|
1017
|
+
* - `matchingBodyPreviewMarkdown` - plain-text / markdown preview of the matched
|
|
1018
|
+
* body (search mode only).
|
|
1019
|
+
* - `relevanceScore` - aggregate score (search mode only).
|
|
1020
|
+
*
|
|
1021
|
+
* ### Version Availability
|
|
1022
|
+
*
|
|
1023
|
+
* This endpoint is only available in API version 2026-01-01.nova and newer.
|
|
1024
|
+
*
|
|
1025
|
+
* @example
|
|
1026
|
+
* ```ts
|
|
1027
|
+
* const response =
|
|
1028
|
+
* await client.support.conversations.search();
|
|
1029
|
+
* ```
|
|
1030
|
+
*/
|
|
1031
|
+
search(params: ConversationSearchParams, options?: RequestOptions): APIPromise<ConversationSearchResponse> {
|
|
1032
|
+
const { 'Featurebase-Version': featurebaseVersion, ...body } = params;
|
|
1033
|
+
return this._client.post('/v2/conversations/search', {
|
|
1034
|
+
body,
|
|
1035
|
+
...options,
|
|
1036
|
+
headers: buildHeaders([
|
|
1037
|
+
{
|
|
1038
|
+
...(featurebaseVersion?.toString() != null ?
|
|
1039
|
+
{ 'Featurebase-Version': featurebaseVersion?.toString() }
|
|
1040
|
+
: undefined),
|
|
1041
|
+
},
|
|
1042
|
+
options?.headers,
|
|
1043
|
+
]),
|
|
1044
|
+
});
|
|
1045
|
+
}
|
|
804
1046
|
}
|
|
805
1047
|
|
|
806
1048
|
export type ConversationsCursorPage = CursorPage<Conversation>;
|
|
@@ -2022,7 +2264,7 @@ export namespace ConversationPart {
|
|
|
2022
2264
|
/**
|
|
2023
2265
|
* Actor that applied the tag
|
|
2024
2266
|
*/
|
|
2025
|
-
actor?:
|
|
2267
|
+
actor?: TagUpdate.Actor;
|
|
2026
2268
|
|
|
2027
2269
|
/**
|
|
2028
2270
|
* Tag name at the time of the event or the best available current display name
|
|
@@ -2035,6 +2277,28 @@ export namespace ConversationPart {
|
|
|
2035
2277
|
targetPartId?: string | null;
|
|
2036
2278
|
}
|
|
2037
2279
|
|
|
2280
|
+
export namespace TagUpdate {
|
|
2281
|
+
/**
|
|
2282
|
+
* Actor that applied the tag
|
|
2283
|
+
*/
|
|
2284
|
+
export interface Actor {
|
|
2285
|
+
/**
|
|
2286
|
+
* Actor that caused the tag mutation
|
|
2287
|
+
*/
|
|
2288
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
|
|
2289
|
+
|
|
2290
|
+
/**
|
|
2291
|
+
* Actor identifier when available
|
|
2292
|
+
*/
|
|
2293
|
+
id?: string | null;
|
|
2294
|
+
|
|
2295
|
+
/**
|
|
2296
|
+
* Actor display name when available
|
|
2297
|
+
*/
|
|
2298
|
+
name?: string | null;
|
|
2299
|
+
}
|
|
2300
|
+
}
|
|
2301
|
+
|
|
2038
2302
|
/**
|
|
2039
2303
|
* Represents a workflow wait start, finish, or interruption in the conversation
|
|
2040
2304
|
* thread
|
|
@@ -2249,7 +2513,7 @@ export interface ConversationTagApplication {
|
|
|
2249
2513
|
/**
|
|
2250
2514
|
* Actor that applied the tag
|
|
2251
2515
|
*/
|
|
2252
|
-
appliedBy?:
|
|
2516
|
+
appliedBy?: ConversationTagApplication.AppliedBy;
|
|
2253
2517
|
|
|
2254
2518
|
/**
|
|
2255
2519
|
* ISO timestamp when the tag was removed from this reply, if it was removed
|
|
@@ -2259,7 +2523,7 @@ export interface ConversationTagApplication {
|
|
|
2259
2523
|
/**
|
|
2260
2524
|
* Actor that applied the tag
|
|
2261
2525
|
*/
|
|
2262
|
-
removedBy?:
|
|
2526
|
+
removedBy?: ConversationTagApplication.RemovedBy;
|
|
2263
2527
|
|
|
2264
2528
|
/**
|
|
2265
2529
|
* Resolved tag object when the tag still exists in the shared workspace catalog
|
|
@@ -2267,6 +2531,48 @@ export interface ConversationTagApplication {
|
|
|
2267
2531
|
tag?: ConversationTagsAPI.ConversationTag;
|
|
2268
2532
|
}
|
|
2269
2533
|
|
|
2534
|
+
export namespace ConversationTagApplication {
|
|
2535
|
+
/**
|
|
2536
|
+
* Actor that applied the tag
|
|
2537
|
+
*/
|
|
2538
|
+
export interface AppliedBy {
|
|
2539
|
+
/**
|
|
2540
|
+
* Actor that caused the tag mutation
|
|
2541
|
+
*/
|
|
2542
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
|
|
2543
|
+
|
|
2544
|
+
/**
|
|
2545
|
+
* Actor identifier when available
|
|
2546
|
+
*/
|
|
2547
|
+
id?: string | null;
|
|
2548
|
+
|
|
2549
|
+
/**
|
|
2550
|
+
* Actor display name when available
|
|
2551
|
+
*/
|
|
2552
|
+
name?: string | null;
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
/**
|
|
2556
|
+
* Actor that applied the tag
|
|
2557
|
+
*/
|
|
2558
|
+
export interface RemovedBy {
|
|
2559
|
+
/**
|
|
2560
|
+
* Actor that caused the tag mutation
|
|
2561
|
+
*/
|
|
2562
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
|
|
2563
|
+
|
|
2564
|
+
/**
|
|
2565
|
+
* Actor identifier when available
|
|
2566
|
+
*/
|
|
2567
|
+
id?: string | null;
|
|
2568
|
+
|
|
2569
|
+
/**
|
|
2570
|
+
* Actor display name when available
|
|
2571
|
+
*/
|
|
2572
|
+
name?: string | null;
|
|
2573
|
+
}
|
|
2574
|
+
}
|
|
2575
|
+
|
|
2270
2576
|
export interface CsatEmailDelivery {
|
|
2271
2577
|
/**
|
|
2272
2578
|
* Email delivery status for the CSAT request when applicable
|
|
@@ -2360,128 +2666,670 @@ export interface ConversationDeleteResponse {
|
|
|
2360
2666
|
object: 'conversation';
|
|
2361
2667
|
}
|
|
2362
2668
|
|
|
2363
|
-
export interface
|
|
2669
|
+
export interface ConversationAttachTagResponse {
|
|
2364
2670
|
/**
|
|
2365
|
-
*
|
|
2366
|
-
* referenced by URL or as base64 data URIs will be automatically uploaded and
|
|
2367
|
-
* stored.
|
|
2671
|
+
* Unique tag identifier
|
|
2368
2672
|
*/
|
|
2369
|
-
|
|
2673
|
+
id: string;
|
|
2370
2674
|
|
|
2371
2675
|
/**
|
|
2372
|
-
*
|
|
2373
|
-
* customer/lead or "admin" for outreach.
|
|
2676
|
+
* Current tag name
|
|
2374
2677
|
*/
|
|
2375
|
-
|
|
2678
|
+
name: string;
|
|
2376
2679
|
|
|
2377
2680
|
/**
|
|
2378
|
-
*
|
|
2379
|
-
* (SDK/widget).
|
|
2681
|
+
* Object type identifier for a tag
|
|
2380
2682
|
*/
|
|
2381
|
-
|
|
2683
|
+
type: 'tag';
|
|
2382
2684
|
|
|
2383
2685
|
/**
|
|
2384
|
-
*
|
|
2385
|
-
* provided, the current time will be used. This field is recommended for migrating
|
|
2386
|
-
* past conversations from another source.
|
|
2686
|
+
* ISO timestamp when the tag was applied
|
|
2387
2687
|
*/
|
|
2388
|
-
|
|
2688
|
+
appliedAt?: string | null;
|
|
2389
2689
|
|
|
2390
2690
|
/**
|
|
2391
|
-
*
|
|
2392
|
-
* "admin". Specify at least one recipient in the "to" field.
|
|
2691
|
+
* Actor that applied the tag
|
|
2393
2692
|
*/
|
|
2394
|
-
|
|
2693
|
+
appliedBy?: ConversationAttachTagResponse.AppliedBy | null;
|
|
2395
2694
|
|
|
2396
2695
|
/**
|
|
2397
|
-
*
|
|
2398
|
-
* from.type is "admin".
|
|
2696
|
+
* ISO timestamp when the tag was removed, if applicable
|
|
2399
2697
|
*/
|
|
2400
|
-
|
|
2698
|
+
removedAt?: string | null;
|
|
2401
2699
|
|
|
2402
2700
|
/**
|
|
2403
|
-
*
|
|
2404
|
-
* configured API version if not specified.
|
|
2701
|
+
* Actor that applied the tag
|
|
2405
2702
|
*/
|
|
2406
|
-
|
|
2407
|
-
}
|
|
2703
|
+
removedBy?: ConversationAttachTagResponse.RemovedBy | null;
|
|
2408
2704
|
|
|
2409
|
-
export namespace ConversationCreateParams {
|
|
2410
2705
|
/**
|
|
2411
|
-
*
|
|
2706
|
+
* Reply/message ID used as the deterministic attachment target for this
|
|
2707
|
+
* conversation tag mutation.
|
|
2412
2708
|
*/
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
* The Featurebase contact ID
|
|
2416
|
-
*/
|
|
2417
|
-
id: string;
|
|
2709
|
+
targetPartId?: string | null;
|
|
2710
|
+
}
|
|
2418
2711
|
|
|
2712
|
+
export namespace ConversationAttachTagResponse {
|
|
2713
|
+
/**
|
|
2714
|
+
* Actor that applied the tag
|
|
2715
|
+
*/
|
|
2716
|
+
export interface AppliedBy {
|
|
2419
2717
|
/**
|
|
2420
|
-
*
|
|
2718
|
+
* Actor that caused the tag mutation
|
|
2421
2719
|
*/
|
|
2422
|
-
type: '
|
|
2423
|
-
}
|
|
2720
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
|
|
2424
2721
|
|
|
2425
|
-
/**
|
|
2426
|
-
* Conversation initiated by an admin (outreach)
|
|
2427
|
-
*/
|
|
2428
|
-
export interface AdminFrom {
|
|
2429
2722
|
/**
|
|
2430
|
-
*
|
|
2723
|
+
* Actor identifier when available
|
|
2431
2724
|
*/
|
|
2432
|
-
id
|
|
2725
|
+
id?: string | null;
|
|
2433
2726
|
|
|
2434
2727
|
/**
|
|
2435
|
-
*
|
|
2728
|
+
* Actor display name when available
|
|
2436
2729
|
*/
|
|
2437
|
-
|
|
2730
|
+
name?: string | null;
|
|
2438
2731
|
}
|
|
2439
2732
|
|
|
2440
2733
|
/**
|
|
2441
|
-
*
|
|
2442
|
-
* Specify at least one recipient in the "to" field.
|
|
2734
|
+
* Actor that applied the tag
|
|
2443
2735
|
*/
|
|
2444
|
-
export interface
|
|
2736
|
+
export interface RemovedBy {
|
|
2445
2737
|
/**
|
|
2446
|
-
*
|
|
2738
|
+
* Actor that caused the tag mutation
|
|
2447
2739
|
*/
|
|
2448
|
-
|
|
2740
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
|
|
2449
2741
|
|
|
2450
2742
|
/**
|
|
2451
|
-
*
|
|
2743
|
+
* Actor identifier when available
|
|
2452
2744
|
*/
|
|
2453
|
-
|
|
2745
|
+
id?: string | null;
|
|
2454
2746
|
|
|
2455
2747
|
/**
|
|
2456
|
-
*
|
|
2748
|
+
* Actor display name when available
|
|
2457
2749
|
*/
|
|
2458
|
-
|
|
2750
|
+
name?: string | null;
|
|
2459
2751
|
}
|
|
2460
2752
|
}
|
|
2461
2753
|
|
|
2462
|
-
export interface
|
|
2754
|
+
export interface ConversationDetachTagResponse {
|
|
2463
2755
|
/**
|
|
2464
|
-
*
|
|
2465
|
-
* version if not specified.
|
|
2756
|
+
* Unique tag identifier
|
|
2466
2757
|
*/
|
|
2467
|
-
|
|
2468
|
-
}
|
|
2758
|
+
id: string;
|
|
2469
2759
|
|
|
2470
|
-
export interface ConversationUpdateParams {
|
|
2471
2760
|
/**
|
|
2472
|
-
*
|
|
2473
|
-
* this admin. If not provided, changes are attributed to the system bot user. The
|
|
2474
|
-
* admin must be a member of the organization.
|
|
2761
|
+
* Current tag name
|
|
2475
2762
|
*/
|
|
2476
|
-
|
|
2763
|
+
name: string;
|
|
2477
2764
|
|
|
2478
2765
|
/**
|
|
2479
|
-
*
|
|
2766
|
+
* Object type identifier for a tag
|
|
2480
2767
|
*/
|
|
2481
|
-
|
|
2768
|
+
type: 'tag';
|
|
2482
2769
|
|
|
2483
2770
|
/**
|
|
2484
|
-
*
|
|
2771
|
+
* ISO timestamp when the tag was applied
|
|
2772
|
+
*/
|
|
2773
|
+
appliedAt?: string | null;
|
|
2774
|
+
|
|
2775
|
+
/**
|
|
2776
|
+
* Actor that applied the tag
|
|
2777
|
+
*/
|
|
2778
|
+
appliedBy?: ConversationDetachTagResponse.AppliedBy | null;
|
|
2779
|
+
|
|
2780
|
+
/**
|
|
2781
|
+
* ISO timestamp when the tag was removed, if applicable
|
|
2782
|
+
*/
|
|
2783
|
+
removedAt?: string | null;
|
|
2784
|
+
|
|
2785
|
+
/**
|
|
2786
|
+
* Actor that applied the tag
|
|
2787
|
+
*/
|
|
2788
|
+
removedBy?: ConversationDetachTagResponse.RemovedBy | null;
|
|
2789
|
+
|
|
2790
|
+
/**
|
|
2791
|
+
* Reply/message ID used as the deterministic attachment target for this
|
|
2792
|
+
* conversation tag mutation.
|
|
2793
|
+
*/
|
|
2794
|
+
targetPartId?: string | null;
|
|
2795
|
+
}
|
|
2796
|
+
|
|
2797
|
+
export namespace ConversationDetachTagResponse {
|
|
2798
|
+
/**
|
|
2799
|
+
* Actor that applied the tag
|
|
2800
|
+
*/
|
|
2801
|
+
export interface AppliedBy {
|
|
2802
|
+
/**
|
|
2803
|
+
* Actor that caused the tag mutation
|
|
2804
|
+
*/
|
|
2805
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
|
|
2806
|
+
|
|
2807
|
+
/**
|
|
2808
|
+
* Actor identifier when available
|
|
2809
|
+
*/
|
|
2810
|
+
id?: string | null;
|
|
2811
|
+
|
|
2812
|
+
/**
|
|
2813
|
+
* Actor display name when available
|
|
2814
|
+
*/
|
|
2815
|
+
name?: string | null;
|
|
2816
|
+
}
|
|
2817
|
+
|
|
2818
|
+
/**
|
|
2819
|
+
* Actor that applied the tag
|
|
2820
|
+
*/
|
|
2821
|
+
export interface RemovedBy {
|
|
2822
|
+
/**
|
|
2823
|
+
* Actor that caused the tag mutation
|
|
2824
|
+
*/
|
|
2825
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'integration' | 'system' | 'workflow';
|
|
2826
|
+
|
|
2827
|
+
/**
|
|
2828
|
+
* Actor identifier when available
|
|
2829
|
+
*/
|
|
2830
|
+
id?: string | null;
|
|
2831
|
+
|
|
2832
|
+
/**
|
|
2833
|
+
* Actor display name when available
|
|
2834
|
+
*/
|
|
2835
|
+
name?: string | null;
|
|
2836
|
+
}
|
|
2837
|
+
}
|
|
2838
|
+
|
|
2839
|
+
export interface ConversationSearchResponse {
|
|
2840
|
+
/**
|
|
2841
|
+
* Array of search results
|
|
2842
|
+
*/
|
|
2843
|
+
data: Array<ConversationSearchResponse.Data>;
|
|
2844
|
+
|
|
2845
|
+
/**
|
|
2846
|
+
* Cursor for fetching the next page (null if no more results)
|
|
2847
|
+
*/
|
|
2848
|
+
nextCursor: string | null;
|
|
2849
|
+
|
|
2850
|
+
/**
|
|
2851
|
+
* Object type identifier
|
|
2852
|
+
*/
|
|
2853
|
+
object: 'list';
|
|
2854
|
+
|
|
2855
|
+
/**
|
|
2856
|
+
* Total number of conversations matching the query, capped at 200. When the actual
|
|
2857
|
+
* total is at or above the cap, `totalCountCapped` is true and the value is
|
|
2858
|
+
* exactly the cap.
|
|
2859
|
+
*/
|
|
2860
|
+
totalCount?: number;
|
|
2861
|
+
|
|
2862
|
+
/**
|
|
2863
|
+
* True when totalCount is exactly the cap and the real count is `>= totalCount`.
|
|
2864
|
+
* UI may render as "200+".
|
|
2865
|
+
*/
|
|
2866
|
+
totalCountCapped?: boolean;
|
|
2867
|
+
}
|
|
2868
|
+
|
|
2869
|
+
export namespace ConversationSearchResponse {
|
|
2870
|
+
export interface Data {
|
|
2871
|
+
/**
|
|
2872
|
+
* Unique conversation identifier
|
|
2873
|
+
*/
|
|
2874
|
+
id: string;
|
|
2875
|
+
|
|
2876
|
+
/**
|
|
2877
|
+
* ID of the assigned admin
|
|
2878
|
+
*/
|
|
2879
|
+
adminAssigneeId: string | null;
|
|
2880
|
+
|
|
2881
|
+
/**
|
|
2882
|
+
* ID of the brand associated with this conversation
|
|
2883
|
+
*/
|
|
2884
|
+
brandId: string | null;
|
|
2885
|
+
|
|
2886
|
+
/**
|
|
2887
|
+
* ISO timestamp when conversation was created
|
|
2888
|
+
*/
|
|
2889
|
+
createdAt: string;
|
|
2890
|
+
|
|
2891
|
+
/**
|
|
2892
|
+
* ISO timestamp of last activity
|
|
2893
|
+
*/
|
|
2894
|
+
lastActivityAt: string | null;
|
|
2895
|
+
|
|
2896
|
+
/**
|
|
2897
|
+
* Object type identifier
|
|
2898
|
+
*/
|
|
2899
|
+
object: 'conversation';
|
|
2900
|
+
|
|
2901
|
+
/**
|
|
2902
|
+
* Participants in this conversation
|
|
2903
|
+
*/
|
|
2904
|
+
participants: Array<ConversationsAPI.ConversationParticipant>;
|
|
2905
|
+
|
|
2906
|
+
/**
|
|
2907
|
+
* Whether this conversation is marked as priority
|
|
2908
|
+
*/
|
|
2909
|
+
priority: boolean;
|
|
2910
|
+
|
|
2911
|
+
/**
|
|
2912
|
+
* ISO timestamp when priority was set
|
|
2913
|
+
*/
|
|
2914
|
+
prioritySetAt: string | null;
|
|
2915
|
+
|
|
2916
|
+
/**
|
|
2917
|
+
* Current state of the conversation
|
|
2918
|
+
*/
|
|
2919
|
+
state: 'open' | 'closed' | 'snoozed';
|
|
2920
|
+
|
|
2921
|
+
/**
|
|
2922
|
+
* Current tags applied anywhere in this conversation
|
|
2923
|
+
*/
|
|
2924
|
+
tags: Array<ConversationTagsAPI.ConversationTag>;
|
|
2925
|
+
|
|
2926
|
+
/**
|
|
2927
|
+
* ID of the assigned team
|
|
2928
|
+
*/
|
|
2929
|
+
teamAssigneeId: string | null;
|
|
2930
|
+
|
|
2931
|
+
/**
|
|
2932
|
+
* ISO timestamp when conversation was last updated
|
|
2933
|
+
*/
|
|
2934
|
+
updatedAt: string;
|
|
2935
|
+
|
|
2936
|
+
/**
|
|
2937
|
+
* Whether we are awaiting a customer reply
|
|
2938
|
+
*/
|
|
2939
|
+
awaitingCustomerReply?: boolean;
|
|
2940
|
+
|
|
2941
|
+
/**
|
|
2942
|
+
* The customer or lead the conversation is with. Use this for the row identity;
|
|
2943
|
+
* use `matchingPartAuthor` if you specifically want the message author.
|
|
2944
|
+
*/
|
|
2945
|
+
conversationUser?: Data.ConversationUser | null;
|
|
2946
|
+
|
|
2947
|
+
/**
|
|
2948
|
+
* Latest conversation messages for lightweight timeline previews. Capped and
|
|
2949
|
+
* truncated by the server; fetch the full conversation for complete message
|
|
2950
|
+
* history.
|
|
2951
|
+
*/
|
|
2952
|
+
latestConversationParts?: Array<Data.LatestConversationPart>;
|
|
2953
|
+
|
|
2954
|
+
/**
|
|
2955
|
+
* Plain-text / markdown preview of the matching conversation part body (search
|
|
2956
|
+
* mode only)
|
|
2957
|
+
*/
|
|
2958
|
+
matchingBodyPreviewMarkdown?: string | null;
|
|
2959
|
+
|
|
2960
|
+
/**
|
|
2961
|
+
* Reference to the conversation part that best matched the search query (search
|
|
2962
|
+
* mode only)
|
|
2963
|
+
*/
|
|
2964
|
+
matchingPart?: Data.MatchingPart | null;
|
|
2965
|
+
|
|
2966
|
+
/**
|
|
2967
|
+
* The customer or lead the conversation is with. Use this for the row identity;
|
|
2968
|
+
* use `matchingPartAuthor` if you specifically want the message author.
|
|
2969
|
+
*/
|
|
2970
|
+
matchingPartAuthor?: Data.MatchingPartAuthor | null;
|
|
2971
|
+
|
|
2972
|
+
/**
|
|
2973
|
+
* Aggregate relevance score for the conversation (search mode only). Higher is
|
|
2974
|
+
* more relevant.
|
|
2975
|
+
*/
|
|
2976
|
+
relevanceScore?: number | null;
|
|
2977
|
+
|
|
2978
|
+
source?: Data.Source;
|
|
2979
|
+
|
|
2980
|
+
/**
|
|
2981
|
+
* Conversation title
|
|
2982
|
+
*/
|
|
2983
|
+
title?: string;
|
|
2984
|
+
}
|
|
2985
|
+
|
|
2986
|
+
export namespace Data {
|
|
2987
|
+
/**
|
|
2988
|
+
* The customer or lead the conversation is with. Use this for the row identity;
|
|
2989
|
+
* use `matchingPartAuthor` if you specifically want the message author.
|
|
2990
|
+
*/
|
|
2991
|
+
export interface ConversationUser {
|
|
2992
|
+
/**
|
|
2993
|
+
* Author id
|
|
2994
|
+
*/
|
|
2995
|
+
id: string;
|
|
2996
|
+
|
|
2997
|
+
/**
|
|
2998
|
+
* Author type
|
|
2999
|
+
*/
|
|
3000
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
|
|
3001
|
+
|
|
3002
|
+
/**
|
|
3003
|
+
* Companies the author belongs to (customers only)
|
|
3004
|
+
*/
|
|
3005
|
+
companies?: Array<ConversationUser.Company>;
|
|
3006
|
+
|
|
3007
|
+
/**
|
|
3008
|
+
* Email when known
|
|
3009
|
+
*/
|
|
3010
|
+
email?: string | null;
|
|
3011
|
+
|
|
3012
|
+
/**
|
|
3013
|
+
* Display name when known
|
|
3014
|
+
*/
|
|
3015
|
+
name?: string | null;
|
|
3016
|
+
|
|
3017
|
+
/**
|
|
3018
|
+
* Profile picture URL when known
|
|
3019
|
+
*/
|
|
3020
|
+
profilePicture?: string | null;
|
|
3021
|
+
}
|
|
3022
|
+
|
|
3023
|
+
export namespace ConversationUser {
|
|
3024
|
+
export interface Company {
|
|
3025
|
+
id: string;
|
|
3026
|
+
|
|
3027
|
+
name?: string;
|
|
3028
|
+
}
|
|
3029
|
+
}
|
|
3030
|
+
|
|
3031
|
+
export interface LatestConversationPart {
|
|
3032
|
+
/**
|
|
3033
|
+
* Conversation part id
|
|
3034
|
+
*/
|
|
3035
|
+
id: string;
|
|
3036
|
+
|
|
3037
|
+
/**
|
|
3038
|
+
* Plain-text truncated preview of the part body
|
|
3039
|
+
*/
|
|
3040
|
+
previewMarkdown: string | null;
|
|
3041
|
+
|
|
3042
|
+
/**
|
|
3043
|
+
* True when previewMarkdown was truncated by the server
|
|
3044
|
+
*/
|
|
3045
|
+
previewMarkdownTruncated: boolean;
|
|
3046
|
+
|
|
3047
|
+
/**
|
|
3048
|
+
* The customer or lead the conversation is with. Use this for the row identity;
|
|
3049
|
+
* use `matchingPartAuthor` if you specifically want the message author.
|
|
3050
|
+
*/
|
|
3051
|
+
author?: LatestConversationPart.Author | null;
|
|
3052
|
+
|
|
3053
|
+
/**
|
|
3054
|
+
* ISO timestamp when the part was created
|
|
3055
|
+
*/
|
|
3056
|
+
createdAt?: string | null;
|
|
3057
|
+
|
|
3058
|
+
/**
|
|
3059
|
+
* Conversation part type
|
|
3060
|
+
*/
|
|
3061
|
+
partType?: string;
|
|
3062
|
+
}
|
|
3063
|
+
|
|
3064
|
+
export namespace LatestConversationPart {
|
|
3065
|
+
/**
|
|
3066
|
+
* The customer or lead the conversation is with. Use this for the row identity;
|
|
3067
|
+
* use `matchingPartAuthor` if you specifically want the message author.
|
|
3068
|
+
*/
|
|
3069
|
+
export interface Author {
|
|
3070
|
+
/**
|
|
3071
|
+
* Author id
|
|
3072
|
+
*/
|
|
3073
|
+
id: string;
|
|
3074
|
+
|
|
3075
|
+
/**
|
|
3076
|
+
* Author type
|
|
3077
|
+
*/
|
|
3078
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
|
|
3079
|
+
|
|
3080
|
+
/**
|
|
3081
|
+
* Companies the author belongs to (customers only)
|
|
3082
|
+
*/
|
|
3083
|
+
companies?: Array<Author.Company>;
|
|
3084
|
+
|
|
3085
|
+
/**
|
|
3086
|
+
* Email when known
|
|
3087
|
+
*/
|
|
3088
|
+
email?: string | null;
|
|
3089
|
+
|
|
3090
|
+
/**
|
|
3091
|
+
* Display name when known
|
|
3092
|
+
*/
|
|
3093
|
+
name?: string | null;
|
|
3094
|
+
|
|
3095
|
+
/**
|
|
3096
|
+
* Profile picture URL when known
|
|
3097
|
+
*/
|
|
3098
|
+
profilePicture?: string | null;
|
|
3099
|
+
}
|
|
3100
|
+
|
|
3101
|
+
export namespace Author {
|
|
3102
|
+
export interface Company {
|
|
3103
|
+
id: string;
|
|
3104
|
+
|
|
3105
|
+
name?: string;
|
|
3106
|
+
}
|
|
3107
|
+
}
|
|
3108
|
+
}
|
|
3109
|
+
|
|
3110
|
+
/**
|
|
3111
|
+
* Reference to the conversation part that best matched the search query (search
|
|
3112
|
+
* mode only)
|
|
3113
|
+
*/
|
|
3114
|
+
export interface MatchingPart {
|
|
3115
|
+
/**
|
|
3116
|
+
* Conversation part id
|
|
3117
|
+
*/
|
|
3118
|
+
id: string;
|
|
3119
|
+
|
|
3120
|
+
/**
|
|
3121
|
+
* ISO timestamp when the matching part was created
|
|
3122
|
+
*/
|
|
3123
|
+
createdAt?: string | null;
|
|
3124
|
+
|
|
3125
|
+
/**
|
|
3126
|
+
* Conversation part type
|
|
3127
|
+
*/
|
|
3128
|
+
partType?: string;
|
|
3129
|
+
}
|
|
3130
|
+
|
|
3131
|
+
/**
|
|
3132
|
+
* The customer or lead the conversation is with. Use this for the row identity;
|
|
3133
|
+
* use `matchingPartAuthor` if you specifically want the message author.
|
|
3134
|
+
*/
|
|
3135
|
+
export interface MatchingPartAuthor {
|
|
3136
|
+
/**
|
|
3137
|
+
* Author id
|
|
3138
|
+
*/
|
|
3139
|
+
id: string;
|
|
3140
|
+
|
|
3141
|
+
/**
|
|
3142
|
+
* Author type
|
|
3143
|
+
*/
|
|
3144
|
+
type: 'admin' | 'customer' | 'lead' | 'bot' | 'guest' | 'integration';
|
|
3145
|
+
|
|
3146
|
+
/**
|
|
3147
|
+
* Companies the author belongs to (customers only)
|
|
3148
|
+
*/
|
|
3149
|
+
companies?: Array<MatchingPartAuthor.Company>;
|
|
3150
|
+
|
|
3151
|
+
/**
|
|
3152
|
+
* Email when known
|
|
3153
|
+
*/
|
|
3154
|
+
email?: string | null;
|
|
3155
|
+
|
|
3156
|
+
/**
|
|
3157
|
+
* Display name when known
|
|
3158
|
+
*/
|
|
3159
|
+
name?: string | null;
|
|
3160
|
+
|
|
3161
|
+
/**
|
|
3162
|
+
* Profile picture URL when known
|
|
3163
|
+
*/
|
|
3164
|
+
profilePicture?: string | null;
|
|
3165
|
+
}
|
|
3166
|
+
|
|
3167
|
+
export namespace MatchingPartAuthor {
|
|
3168
|
+
export interface Company {
|
|
3169
|
+
id: string;
|
|
3170
|
+
|
|
3171
|
+
name?: string;
|
|
3172
|
+
}
|
|
3173
|
+
}
|
|
3174
|
+
|
|
3175
|
+
export interface Source {
|
|
3176
|
+
/**
|
|
3177
|
+
* Body of the initial message as HTML with signed image URLs
|
|
3178
|
+
*/
|
|
3179
|
+
bodyHtml: string;
|
|
3180
|
+
|
|
3181
|
+
/**
|
|
3182
|
+
* Body of the initial message as markdown
|
|
3183
|
+
*/
|
|
3184
|
+
bodyMarkdown: string;
|
|
3185
|
+
|
|
3186
|
+
/**
|
|
3187
|
+
* Channel through which the conversation was initiated
|
|
3188
|
+
*/
|
|
3189
|
+
channel: 'unknown' | 'desktop' | 'android' | 'ios' | 'email';
|
|
3190
|
+
|
|
3191
|
+
author?: ConversationsAPI.ConversationParticipant;
|
|
3192
|
+
|
|
3193
|
+
/**
|
|
3194
|
+
* How the conversation was initiated
|
|
3195
|
+
*/
|
|
3196
|
+
deliveredAs?: 'customer_initiated' | 'admin_initiated';
|
|
3197
|
+
|
|
3198
|
+
/**
|
|
3199
|
+
* Subject line for email conversations
|
|
3200
|
+
*/
|
|
3201
|
+
subject?: string;
|
|
3202
|
+
|
|
3203
|
+
/**
|
|
3204
|
+
* URL where the conversation was initiated
|
|
3205
|
+
*/
|
|
3206
|
+
url?: string;
|
|
3207
|
+
}
|
|
3208
|
+
}
|
|
3209
|
+
}
|
|
3210
|
+
|
|
3211
|
+
export interface ConversationCreateParams {
|
|
3212
|
+
/**
|
|
3213
|
+
* Body param: The content of the initial message in markdown format. Images
|
|
3214
|
+
* referenced by URL or as base64 data URIs will be automatically uploaded and
|
|
3215
|
+
* stored.
|
|
3216
|
+
*/
|
|
3217
|
+
bodyMarkdown: string;
|
|
3218
|
+
|
|
3219
|
+
/**
|
|
3220
|
+
* Body param: The author initiating the conversation. Use type "contact" for
|
|
3221
|
+
* customer/lead or "admin" for outreach.
|
|
3222
|
+
*/
|
|
3223
|
+
from: ConversationCreateParams.ContactFrom | ConversationCreateParams.AdminFrom;
|
|
3224
|
+
|
|
3225
|
+
/**
|
|
3226
|
+
* Body param: The channel for the conversation. Defaults to "desktop"
|
|
3227
|
+
* (SDK/widget).
|
|
3228
|
+
*/
|
|
3229
|
+
channel?: 'desktop' | 'email';
|
|
3230
|
+
|
|
3231
|
+
/**
|
|
3232
|
+
* Body param: The time the conversation was created as an ISO timestamp. If not
|
|
3233
|
+
* provided, the current time will be used. This field is recommended for migrating
|
|
3234
|
+
* past conversations from another source.
|
|
3235
|
+
*/
|
|
3236
|
+
createdAt?: string | null;
|
|
3237
|
+
|
|
3238
|
+
/**
|
|
3239
|
+
* Body param: Recipients for admin-initiated outreach. Required when from.type is
|
|
3240
|
+
* "admin". Specify at least one recipient in the "to" field.
|
|
3241
|
+
*/
|
|
3242
|
+
recipients?: ConversationCreateParams.Recipients;
|
|
3243
|
+
|
|
3244
|
+
/**
|
|
3245
|
+
* Body param: Subject line for the email. Required when channel is "email" and
|
|
3246
|
+
* from.type is "admin".
|
|
3247
|
+
*/
|
|
3248
|
+
subject?: string;
|
|
3249
|
+
|
|
3250
|
+
/**
|
|
3251
|
+
* Header param: API version for this request. Defaults to your organization's
|
|
3252
|
+
* configured API version if not specified.
|
|
3253
|
+
*/
|
|
3254
|
+
'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
|
|
3255
|
+
}
|
|
3256
|
+
|
|
3257
|
+
export namespace ConversationCreateParams {
|
|
3258
|
+
/**
|
|
3259
|
+
* Conversation initiated by a contact
|
|
3260
|
+
*/
|
|
3261
|
+
export interface ContactFrom {
|
|
3262
|
+
/**
|
|
3263
|
+
* The Featurebase contact ID
|
|
3264
|
+
*/
|
|
3265
|
+
id: string;
|
|
3266
|
+
|
|
3267
|
+
/**
|
|
3268
|
+
* The type of author. Use "contact" for customer/lead initiated conversations.
|
|
3269
|
+
*/
|
|
3270
|
+
type: 'contact';
|
|
3271
|
+
}
|
|
3272
|
+
|
|
3273
|
+
/**
|
|
3274
|
+
* Conversation initiated by an admin (outreach)
|
|
3275
|
+
*/
|
|
3276
|
+
export interface AdminFrom {
|
|
3277
|
+
/**
|
|
3278
|
+
* The Featurebase admin ID
|
|
3279
|
+
*/
|
|
3280
|
+
id: string;
|
|
3281
|
+
|
|
3282
|
+
/**
|
|
3283
|
+
* The type of author. Use "admin" for admin initiated outreach conversations.
|
|
3284
|
+
*/
|
|
3285
|
+
type: 'admin';
|
|
3286
|
+
}
|
|
3287
|
+
|
|
3288
|
+
/**
|
|
3289
|
+
* Recipients for admin-initiated outreach. Required when from.type is "admin".
|
|
3290
|
+
* Specify at least one recipient in the "to" field.
|
|
3291
|
+
*/
|
|
3292
|
+
export interface Recipients {
|
|
3293
|
+
/**
|
|
3294
|
+
* Primary recipients (To field)
|
|
3295
|
+
*/
|
|
3296
|
+
to: ConversationsAPI.EmailRecipients;
|
|
3297
|
+
|
|
3298
|
+
/**
|
|
3299
|
+
* Primary recipients (To field)
|
|
3300
|
+
*/
|
|
3301
|
+
bcc?: ConversationsAPI.EmailRecipients;
|
|
3302
|
+
|
|
3303
|
+
/**
|
|
3304
|
+
* Primary recipients (To field)
|
|
3305
|
+
*/
|
|
3306
|
+
cc?: ConversationsAPI.EmailRecipients;
|
|
3307
|
+
}
|
|
3308
|
+
}
|
|
3309
|
+
|
|
3310
|
+
export interface ConversationRetrieveParams {
|
|
3311
|
+
/**
|
|
3312
|
+
* API version for this request. Defaults to your organization's configured API
|
|
3313
|
+
* version if not specified.
|
|
3314
|
+
*/
|
|
3315
|
+
'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
|
|
3316
|
+
}
|
|
3317
|
+
|
|
3318
|
+
export interface ConversationUpdateParams {
|
|
3319
|
+
/**
|
|
3320
|
+
* Body param: The admin ID performing this action. Changes will be attributed to
|
|
3321
|
+
* this admin. If not provided, changes are attributed to the system bot user. The
|
|
3322
|
+
* admin must be a member of the organization.
|
|
3323
|
+
*/
|
|
3324
|
+
actingAdminId?: string;
|
|
3325
|
+
|
|
3326
|
+
/**
|
|
3327
|
+
* Body param: The admin ID to assign the conversation to, or null to unassign.
|
|
3328
|
+
*/
|
|
3329
|
+
adminAssigneeId?: string | null;
|
|
3330
|
+
|
|
3331
|
+
/**
|
|
3332
|
+
* Body param: Custom attributes to set on the conversation. Uses the same
|
|
2485
3333
|
* validation as v1 API.
|
|
2486
3334
|
*/
|
|
2487
3335
|
customAttributes?: { [key: string]: unknown };
|
|
@@ -2572,6 +3420,44 @@ export interface ConversationDeleteParams {
|
|
|
2572
3420
|
'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
|
|
2573
3421
|
}
|
|
2574
3422
|
|
|
3423
|
+
export interface ConversationAttachTagParams {
|
|
3424
|
+
/**
|
|
3425
|
+
* Body param: Required admin ID performing this tag attachment. Must be a member
|
|
3426
|
+
* of the organization so the mutation can be attributed to a real admin actor.
|
|
3427
|
+
*/
|
|
3428
|
+
actingAdminId: string;
|
|
3429
|
+
|
|
3430
|
+
/**
|
|
3431
|
+
* Body param: The Featurebase tag ID to attach to the conversation.
|
|
3432
|
+
*/
|
|
3433
|
+
tagId: string;
|
|
3434
|
+
|
|
3435
|
+
/**
|
|
3436
|
+
* Header param: API version for this request. Defaults to your organization's
|
|
3437
|
+
* configured API version if not specified.
|
|
3438
|
+
*/
|
|
3439
|
+
'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
|
|
3440
|
+
}
|
|
3441
|
+
|
|
3442
|
+
export interface ConversationDetachTagParams {
|
|
3443
|
+
/**
|
|
3444
|
+
* Path param: Conversation ID (short ID)
|
|
3445
|
+
*/
|
|
3446
|
+
id: string;
|
|
3447
|
+
|
|
3448
|
+
/**
|
|
3449
|
+
* Body param: Required admin ID performing this tag removal. Must be a member of
|
|
3450
|
+
* the organization so the mutation can be attributed to a real admin actor.
|
|
3451
|
+
*/
|
|
3452
|
+
actingAdminId: string;
|
|
3453
|
+
|
|
3454
|
+
/**
|
|
3455
|
+
* Header param: API version for this request. Defaults to your organization's
|
|
3456
|
+
* configured API version if not specified.
|
|
3457
|
+
*/
|
|
3458
|
+
'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
|
|
3459
|
+
}
|
|
3460
|
+
|
|
2575
3461
|
export interface ConversationRedactParams {
|
|
2576
3462
|
/**
|
|
2577
3463
|
* Body param: The conversation short ID that contains the part to redact
|
|
@@ -2686,7 +3572,96 @@ export declare namespace ConversationReplyParams {
|
|
|
2686
3572
|
}
|
|
2687
3573
|
}
|
|
2688
3574
|
|
|
2689
|
-
|
|
3575
|
+
export interface ConversationSearchParams {
|
|
3576
|
+
/**
|
|
3577
|
+
* Body param: An opaque cursor for pagination. Use the nextCursor value from a
|
|
3578
|
+
* previous response to fetch the next page of results.
|
|
3579
|
+
*/
|
|
3580
|
+
cursor?: string;
|
|
3581
|
+
|
|
3582
|
+
/**
|
|
3583
|
+
* Body param: A limit on the number of objects to be returned, between 1 and 100.
|
|
3584
|
+
*/
|
|
3585
|
+
limit?: number;
|
|
3586
|
+
|
|
3587
|
+
/**
|
|
3588
|
+
* Body param: Structured filter AST. Either a single filter clause or one
|
|
3589
|
+
* top-level AND group. Use this for filtering by `state`, `tag_ids`,
|
|
3590
|
+
* `admin_assignee_id`, etc.
|
|
3591
|
+
*/
|
|
3592
|
+
query?:
|
|
3593
|
+
| ConversationSearchParams.ConversationSearchFilter
|
|
3594
|
+
| ConversationSearchParams.ConversationSearchFilterGroup;
|
|
3595
|
+
|
|
3596
|
+
/**
|
|
3597
|
+
* Body param: Plain-text full-text search across conversation messages.
|
|
3598
|
+
* Server-managed - no operators, no field selection.
|
|
3599
|
+
*/
|
|
3600
|
+
search?: string;
|
|
3601
|
+
|
|
3602
|
+
/**
|
|
3603
|
+
* Body param: Sort direction for filter mode (ignored in search mode where results
|
|
3604
|
+
* are sorted by relevance). Defaults to last_activity_at:desc.
|
|
3605
|
+
*/
|
|
3606
|
+
sort?: 'last_activity_at:desc' | 'last_activity_at:asc';
|
|
3607
|
+
|
|
3608
|
+
/**
|
|
3609
|
+
* Header param: API version for this request. Defaults to your organization's
|
|
3610
|
+
* configured API version if not specified.
|
|
3611
|
+
*/
|
|
3612
|
+
'Featurebase-Version'?: '2026-01-01.nova' | '2025-12-12.clover';
|
|
3613
|
+
}
|
|
3614
|
+
|
|
3615
|
+
export namespace ConversationSearchParams {
|
|
3616
|
+
export interface ConversationSearchFilter {
|
|
3617
|
+
/**
|
|
3618
|
+
* Field name to filter on (e.g. `state`, `tag_ids`, `created_at`)
|
|
3619
|
+
*/
|
|
3620
|
+
field: string;
|
|
3621
|
+
|
|
3622
|
+
/**
|
|
3623
|
+
* Comparison operator
|
|
3624
|
+
*/
|
|
3625
|
+
operator: '=' | '!=' | 'IN' | 'NIN' | '>' | '<' | '~' | '!~' | '^' | '$';
|
|
3626
|
+
|
|
3627
|
+
/**
|
|
3628
|
+
* Value to compare against (primitive or array of primitives)
|
|
3629
|
+
*/
|
|
3630
|
+
value: string | number | boolean | Array<string | number> | null;
|
|
3631
|
+
}
|
|
3632
|
+
|
|
3633
|
+
export interface ConversationSearchFilterGroup {
|
|
3634
|
+
/**
|
|
3635
|
+
* Group operator: AND (all match) or OR (any match)
|
|
3636
|
+
*/
|
|
3637
|
+
operator: 'AND' | 'OR';
|
|
3638
|
+
|
|
3639
|
+
/**
|
|
3640
|
+
* Array of filter clauses (1-15 entries)
|
|
3641
|
+
*/
|
|
3642
|
+
value: Array<ConversationSearchFilterGroup.Value>;
|
|
3643
|
+
}
|
|
3644
|
+
|
|
3645
|
+
export namespace ConversationSearchFilterGroup {
|
|
3646
|
+
export interface Value {
|
|
3647
|
+
/**
|
|
3648
|
+
* Field name to filter on (e.g. `state`, `tag_ids`, `created_at`)
|
|
3649
|
+
*/
|
|
3650
|
+
field: string;
|
|
3651
|
+
|
|
3652
|
+
/**
|
|
3653
|
+
* Comparison operator
|
|
3654
|
+
*/
|
|
3655
|
+
operator: '=' | '!=' | 'IN' | 'NIN' | '>' | '<' | '~' | '!~' | '^' | '$';
|
|
3656
|
+
|
|
3657
|
+
/**
|
|
3658
|
+
* Value to compare against (primitive or array of primitives)
|
|
3659
|
+
*/
|
|
3660
|
+
value: string | number | boolean | Array<string | number> | null;
|
|
3661
|
+
}
|
|
3662
|
+
}
|
|
3663
|
+
}
|
|
3664
|
+
|
|
2690
3665
|
Conversations.Participants = Participants;
|
|
2691
3666
|
|
|
2692
3667
|
export declare namespace Conversations {
|
|
@@ -2701,22 +3676,20 @@ export declare namespace Conversations {
|
|
|
2701
3676
|
type CsatWorkflowLink as CsatWorkflowLink,
|
|
2702
3677
|
type EmailRecipients as EmailRecipients,
|
|
2703
3678
|
type ConversationDeleteResponse as ConversationDeleteResponse,
|
|
3679
|
+
type ConversationAttachTagResponse as ConversationAttachTagResponse,
|
|
3680
|
+
type ConversationDetachTagResponse as ConversationDetachTagResponse,
|
|
3681
|
+
type ConversationSearchResponse as ConversationSearchResponse,
|
|
2704
3682
|
type ConversationsCursorPage as ConversationsCursorPage,
|
|
2705
3683
|
type ConversationCreateParams as ConversationCreateParams,
|
|
2706
3684
|
type ConversationRetrieveParams as ConversationRetrieveParams,
|
|
2707
3685
|
type ConversationUpdateParams as ConversationUpdateParams,
|
|
2708
3686
|
type ConversationListParams as ConversationListParams,
|
|
2709
3687
|
type ConversationDeleteParams as ConversationDeleteParams,
|
|
3688
|
+
type ConversationAttachTagParams as ConversationAttachTagParams,
|
|
3689
|
+
type ConversationDetachTagParams as ConversationDetachTagParams,
|
|
2710
3690
|
type ConversationRedactParams as ConversationRedactParams,
|
|
2711
3691
|
type ConversationReplyParams as ConversationReplyParams,
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
export {
|
|
2715
|
-
Tags as Tags,
|
|
2716
|
-
type AttachedConversationTag as AttachedConversationTag,
|
|
2717
|
-
type ConversationTagMutationActor as ConversationTagMutationActor,
|
|
2718
|
-
type TagAttachParams as TagAttachParams,
|
|
2719
|
-
type TagDetachParams as TagDetachParams,
|
|
3692
|
+
type ConversationSearchParams as ConversationSearchParams,
|
|
2720
3693
|
};
|
|
2721
3694
|
|
|
2722
3695
|
export {
|