nixflex 0.2.2 → 0.3.1

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 CHANGED
@@ -1,3 +1,13 @@
1
+ ## 0.3.1 (2026-08-24)
2
+
3
+ - Voicemail as a structured setting: `voicemail_leave_enabled` + `voicemail_message` on Agent (applies to dashboard-imported numbers) and on PhoneNumber / PhoneNumberUpdateParams (the only voicemail control for API-imported numbers - no inheritance across the two worlds)
4
+ - Enabling without a message is rejected with `voicemail_message_required`
5
+ - No breaking changes.
6
+ ## 0.3.0 (2026-08-23)
7
+
8
+ - Call type: `charged_minutes` (minutes actually billed - transfers stop the meter at handoff, so this can be less than the recording length)
9
+ - Call type: `ended_reason` documented with the full value list, including the new `callee_hangup` (outbound) and carrier words (`busy`, `failed`, `no-answer`, `canceled`)
10
+ - No breaking changes. `list` pagination (`limit`/`offset`) shipped previously in 0.2.x.
1
11
  # Changelog
2
12
 
3
13
  All notable changes to the `nixflex` package. This project follows
package/dist/index.d.cts CHANGED
@@ -66,6 +66,12 @@ interface AgentCreateParams {
66
66
  amd_enabled?: boolean;
67
67
  /** Keypad digits instead of speech. Three-state: true/false explicit, null = not set (a number's own setting decides). */
68
68
  dtmf_enabled?: boolean | null;
69
+ /** Leave a message on detected voicemails. Applies to DASHBOARD-imported numbers on
70
+ * this agent; API-imported numbers use their own per-number setting instead. Enabling
71
+ * without voicemail_message is rejected with voicemail_message_required. */
72
+ voicemail_leave_enabled?: boolean;
73
+ /** Spoken word for word on voicemail when enabled - the agent never rewrites it. */
74
+ voicemail_message?: string | null;
69
75
  /** Where to POST post-call data. */
70
76
  webhook_url?: string | null;
71
77
  /** Agent can end the call cleanly. Default true. */
@@ -124,6 +130,8 @@ interface Agent {
124
130
  fallback_message: string;
125
131
  post_call_sms_enabled?: boolean;
126
132
  post_call_sms_template?: string | null;
133
+ voicemail_leave_enabled?: boolean;
134
+ voicemail_message?: string | null;
127
135
  data_extraction_fields?: unknown[];
128
136
  is_active: boolean;
129
137
  created_at: string;
@@ -183,7 +191,14 @@ interface Call {
183
191
  answered_at: number | null;
184
192
  /** TIME CONNECTED in ms (answer to hangup) - the number you are billed on. Ring time excluded, so on outbound this is NOT end_timestamp - start_timestamp. */
185
193
  duration_ms: number;
194
+ /** Why the call ended: completed, transferred, voicemail_detected, silence_timeout,
195
+ * ivr_timeout, max_duration_reached, caller_hangup (inbound), callee_hangup (outbound),
196
+ * busy / failed / no-answer / canceled (carrier words for calls that never connected),
197
+ * concurrency_limit, and rare infrastructure endings. */
186
198
  ended_reason: string;
199
+ /** Minutes actually charged for this call. Transfers stop the meter at handoff, so
200
+ * this can be less than duration_ms suggests - the recording runs to the end either way. */
201
+ charged_minutes?: number;
187
202
  /** A single string, one turn per line - not an array of turn objects. */
188
203
  transcript: string;
189
204
  call_summary: string;
@@ -378,6 +393,12 @@ interface PhoneNumber {
378
393
  custom_prompt?: string | null;
379
394
  voice_id?: string | null;
380
395
  sms_reply_enabled?: boolean;
396
+ /** This number's own voicemail setting - the ONLY one that applies to API-imported
397
+ * numbers (dashboard-imported numbers follow the agent). null = not set = silent
398
+ * hangup on voicemail. */
399
+ voicemail_leave_enabled?: boolean | null;
400
+ /** Spoken word for word on a detected voicemail when enabled. */
401
+ voicemail_message?: string | null;
381
402
  sms_prompt?: string | null;
382
403
  web_prompt?: string | null;
383
404
  speaking_rate?: number | null;
@@ -394,6 +415,12 @@ interface PhoneNumberUpdateParams {
394
415
  voice_id?: string | null;
395
416
  /** SMS agent auto-reply on/off. Default false. */
396
417
  sms_reply_enabled?: boolean;
418
+ /** This number's own voicemail toggle - the only voicemail control for API-imported
419
+ * numbers. Enabling without a message (here or already saved) is rejected with
420
+ * voicemail_message_required. null clears. */
421
+ voicemail_leave_enabled?: boolean | null;
422
+ /** Spoken word for word on voicemail. Max 2000. null clears. */
423
+ voicemail_message?: string | null;
397
424
  /** SMS agent instructions (independent channel). Max 20000. null clears. */
398
425
  sms_prompt?: string | null;
399
426
  /** Web agent instructions (independent channel). Max 20000. null clears. */
package/dist/index.d.ts CHANGED
@@ -66,6 +66,12 @@ interface AgentCreateParams {
66
66
  amd_enabled?: boolean;
67
67
  /** Keypad digits instead of speech. Three-state: true/false explicit, null = not set (a number's own setting decides). */
68
68
  dtmf_enabled?: boolean | null;
69
+ /** Leave a message on detected voicemails. Applies to DASHBOARD-imported numbers on
70
+ * this agent; API-imported numbers use their own per-number setting instead. Enabling
71
+ * without voicemail_message is rejected with voicemail_message_required. */
72
+ voicemail_leave_enabled?: boolean;
73
+ /** Spoken word for word on voicemail when enabled - the agent never rewrites it. */
74
+ voicemail_message?: string | null;
69
75
  /** Where to POST post-call data. */
70
76
  webhook_url?: string | null;
71
77
  /** Agent can end the call cleanly. Default true. */
@@ -124,6 +130,8 @@ interface Agent {
124
130
  fallback_message: string;
125
131
  post_call_sms_enabled?: boolean;
126
132
  post_call_sms_template?: string | null;
133
+ voicemail_leave_enabled?: boolean;
134
+ voicemail_message?: string | null;
127
135
  data_extraction_fields?: unknown[];
128
136
  is_active: boolean;
129
137
  created_at: string;
@@ -183,7 +191,14 @@ interface Call {
183
191
  answered_at: number | null;
184
192
  /** TIME CONNECTED in ms (answer to hangup) - the number you are billed on. Ring time excluded, so on outbound this is NOT end_timestamp - start_timestamp. */
185
193
  duration_ms: number;
194
+ /** Why the call ended: completed, transferred, voicemail_detected, silence_timeout,
195
+ * ivr_timeout, max_duration_reached, caller_hangup (inbound), callee_hangup (outbound),
196
+ * busy / failed / no-answer / canceled (carrier words for calls that never connected),
197
+ * concurrency_limit, and rare infrastructure endings. */
186
198
  ended_reason: string;
199
+ /** Minutes actually charged for this call. Transfers stop the meter at handoff, so
200
+ * this can be less than duration_ms suggests - the recording runs to the end either way. */
201
+ charged_minutes?: number;
187
202
  /** A single string, one turn per line - not an array of turn objects. */
188
203
  transcript: string;
189
204
  call_summary: string;
@@ -378,6 +393,12 @@ interface PhoneNumber {
378
393
  custom_prompt?: string | null;
379
394
  voice_id?: string | null;
380
395
  sms_reply_enabled?: boolean;
396
+ /** This number's own voicemail setting - the ONLY one that applies to API-imported
397
+ * numbers (dashboard-imported numbers follow the agent). null = not set = silent
398
+ * hangup on voicemail. */
399
+ voicemail_leave_enabled?: boolean | null;
400
+ /** Spoken word for word on a detected voicemail when enabled. */
401
+ voicemail_message?: string | null;
381
402
  sms_prompt?: string | null;
382
403
  web_prompt?: string | null;
383
404
  speaking_rate?: number | null;
@@ -394,6 +415,12 @@ interface PhoneNumberUpdateParams {
394
415
  voice_id?: string | null;
395
416
  /** SMS agent auto-reply on/off. Default false. */
396
417
  sms_reply_enabled?: boolean;
418
+ /** This number's own voicemail toggle - the only voicemail control for API-imported
419
+ * numbers. Enabling without a message (here or already saved) is rejected with
420
+ * voicemail_message_required. null clears. */
421
+ voicemail_leave_enabled?: boolean | null;
422
+ /** Spoken word for word on voicemail. Max 2000. null clears. */
423
+ voicemail_message?: string | null;
397
424
  /** SMS agent instructions (independent channel). Max 20000. null clears. */
398
425
  sms_prompt?: string | null;
399
426
  /** Web agent instructions (independent channel). Max 20000. null clears. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nixflex",
3
- "version": "0.2.2",
3
+ "version": "0.3.1",
4
4
  "description": "Official Node.js SDK for the Nixflex voice AI platform - AI phone agents, outbound campaigns, and SMS.",
5
5
  "keywords": [
6
6
  "nixflex",