feat(fax): add fax routing, job tracking, inbox management, and T.38/UDPTL media support

This commit is contained in:
2026-04-20 20:43:42 +00:00
parent 3c010a3b1b
commit d2c18a4ebb
27 changed files with 4247 additions and 280 deletions
+12
View File
@@ -8,6 +8,7 @@
import fs from 'node:fs';
import path from 'node:path';
import type { IFaxBoxConfig } from './faxbox.ts';
import type { IVoiceboxConfig } from './voicebox.js';
// ---------------------------------------------------------------------------
@@ -113,6 +114,9 @@ export interface ISipRouteAction {
/** Voicemail fallback for matched inbound routes. */
voicemailBox?: string;
/** Fax inbox target for matched inbound routes. */
faxBox?: string;
/** Route to an IVR menu by menu ID (skip ringing devices). */
ivrMenuId?: string;
@@ -189,6 +193,7 @@ export interface IContact {
// "number | undefined is not assignable to number" type errors when
// passing config.voiceboxes into VoiceboxManager.init().
export type { IVoiceboxConfig };
export type { IFaxBoxConfig };
// ---------------------------------------------------------------------------
// IVR configuration
@@ -255,6 +260,7 @@ export interface IAppConfig {
incomingNumbers?: IIncomingNumberConfig[];
routing: IRoutingConfig;
contacts: IContact[];
faxboxes?: IFaxBoxConfig[];
voiceboxes?: IVoiceboxConfig[];
ivr?: IIvrConfig;
}
@@ -323,6 +329,12 @@ export function loadConfig(): IAppConfig {
c.starred ??= false;
}
cfg.faxboxes ??= [];
for (const fb of cfg.faxboxes) {
fb.enabled ??= true;
fb.maxMessages ??= 50;
}
// Voicebox defaults.
cfg.voiceboxes ??= [];
for (const vb of cfg.voiceboxes) {