@unboundcx/sdk 4.13.100 → 4.13.102

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 CHANGED
@@ -377,6 +377,8 @@ const audio = await api.ai.tts.create({
377
377
  text: 'Hello, this is a test message',
378
378
  voice: 'en-US-Standard-A',
379
379
  audioEncoding: 'MP3',
380
+ // optional, telemetry-only attribution — never affects caching/output:
381
+ // taskId, sipCallId, botId
380
382
  });
381
383
 
382
384
  // Speech-to-Text - File/Storage Transcription
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unboundcx/sdk",
3
- "version": "4.13.100",
3
+ "version": "4.13.102",
4
4
  "description": "Official JavaScript SDK for the Unbound API - A comprehensive toolkit for integrating with Unbound's communication, AI, and data management services",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -25,6 +25,9 @@ export class TextToSpeechService {
25
25
  * @param {number} [params.volumeGainDb]
26
26
  * @param {string[]} [params.effectsProfileIds]
27
27
  * @param {boolean} [params.createAccessKey]
28
+ * @param {string} [params.taskId] Telemetry-only attribution; never affects caching/output.
29
+ * @param {string} [params.sipCallId] Telemetry-only attribution; never affects caching/output.
30
+ * @param {string} [params.botId] Telemetry-only attribution; never affects caching/output.
28
31
  * @returns {Promise<Object>} `{ id, storageId, url? }`
29
32
  */
30
33
  async create({
@@ -38,6 +41,9 @@ export class TextToSpeechService {
38
41
  volumeGainDb,
39
42
  effectsProfileIds,
40
43
  createAccessKey,
44
+ taskId,
45
+ sipCallId,
46
+ botId,
41
47
  }) {
42
48
  this.sdk.validateParams(
43
49
  {
@@ -51,6 +57,9 @@ export class TextToSpeechService {
51
57
  volumeGainDb,
52
58
  effectsProfileIds,
53
59
  createAccessKey,
60
+ taskId,
61
+ sipCallId,
62
+ botId,
54
63
  },
55
64
  {
56
65
  text: { type: 'string', required: true },
@@ -63,6 +72,9 @@ export class TextToSpeechService {
63
72
  volumeGainDb: { type: 'number', required: false },
64
73
  effectsProfileIds: { type: 'array', required: false },
65
74
  createAccessKey: { type: 'boolean', required: false },
75
+ taskId: { type: 'string', required: false },
76
+ sipCallId: { type: 'string', required: false },
77
+ botId: { type: 'string', required: false },
66
78
  },
67
79
  );
68
80
 
@@ -76,6 +88,9 @@ export class TextToSpeechService {
76
88
  if (volumeGainDb) ttsData.volumeGainDb = volumeGainDb;
77
89
  if (effectsProfileIds) ttsData.effectsProfileIds = effectsProfileIds;
78
90
  if (createAccessKey) ttsData.createAccessKey = createAccessKey;
91
+ if (taskId !== undefined) ttsData.taskId = taskId;
92
+ if (sipCallId !== undefined) ttsData.sipCallId = sipCallId;
93
+ if (botId !== undefined) ttsData.botId = botId;
79
94
 
80
95
  const params = {
81
96
  body: ttsData,
@@ -112,25 +127,34 @@ export class TextToSpeechService {
112
127
  * @param {string} params.text
113
128
  * @param {string} [params.voice]
114
129
  * @param {string} [params.languageCode]
130
+ * @param {string} [params.taskId] Telemetry-only attribution; never affects caching/output.
131
+ * @param {string} [params.sipCallId] Telemetry-only attribution; never affects caching/output.
132
+ * @param {string} [params.botId] Telemetry-only attribution; never affects caching/output.
115
133
  * @returns {Promise<{body: ReadableStream, headers: Headers, status: number}>}
116
134
  * @example
117
135
  * const result = await sdk.ai.tts.stream({ text: 'Hi there', voice: 'hannah' });
118
136
  * const nodeStream = Readable.fromWeb(result.body);
119
137
  * nodeStream.pipe(ffmpegProcess.stdin);
120
138
  */
121
- async stream({ text, voice, languageCode }) {
139
+ async stream({ text, voice, languageCode, taskId, sipCallId, botId }) {
122
140
  this.sdk.validateParams(
123
- { text, voice, languageCode },
141
+ { text, voice, languageCode, taskId, sipCallId, botId },
124
142
  {
125
143
  text: { type: 'string', required: true },
126
144
  voice: { type: 'string', required: false },
127
145
  languageCode: { type: 'string', required: false },
146
+ taskId: { type: 'string', required: false },
147
+ sipCallId: { type: 'string', required: false },
148
+ botId: { type: 'string', required: false },
128
149
  },
129
150
  );
130
151
 
131
152
  const ttsData = { text };
132
153
  if (voice) ttsData.voice = voice;
133
154
  if (languageCode) ttsData.languageCode = languageCode;
155
+ if (taskId !== undefined) ttsData.taskId = taskId;
156
+ if (sipCallId !== undefined) ttsData.sipCallId = sipCallId;
157
+ if (botId !== undefined) ttsData.botId = botId;
134
158
 
135
159
  const params = {
136
160
  body: ttsData,
@@ -46,6 +46,42 @@ export class CCService {
46
46
  return result;
47
47
  }
48
48
 
49
+ /**
50
+ * Queue-level human headcount by status -- same-queue-help-ping-plan.md
51
+ * WP1. The AI bot calls this to decide "hand to a human now" (someone
52
+ * available) vs "take a message" (nobody, or only wrap-up).
53
+ *
54
+ * @param {Object} options - Options
55
+ * @param {string} options.queueId - Queue ID
56
+ * @param {string} [options.taskId] - Task ID (forward-compat; unused today)
57
+ * @returns {Promise<Object>} result
58
+ * @returns {number} result.available - Workers currently `available`
59
+ * @returns {Object} result.byStatus - `{ available, wrapUp }` counts
60
+ *
61
+ * @example
62
+ * const { available, byStatus } = await sdk.taskRouter.cc.getHumanAvailability({ queueId: 'queue_789' });
63
+ */
64
+ async getHumanAvailability({ queueId, taskId } = {}) {
65
+ this.sdk.validateParams(
66
+ { queueId, taskId },
67
+ {
68
+ queueId: { type: 'string', required: true },
69
+ taskId: { type: 'string', required: false },
70
+ },
71
+ );
72
+
73
+ const params = { query: {} };
74
+ if (taskId !== undefined) params.query.taskId = taskId;
75
+
76
+ const result = await internalRequest(
77
+ this.sdk,
78
+ `/taskRouter/queues/${queueId}/human-availability`,
79
+ 'GET',
80
+ params,
81
+ );
82
+ return result;
83
+ }
84
+
49
85
  /**
50
86
  * Get a live Contact Center snapshot (KPIs, per-queue summaries, team roster
51
87
  * with active tasks) scoped to a set of queues.