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
+19
View File
@@ -105,6 +105,8 @@ pub struct RouteAction {
pub ring_browsers: Option<bool>,
#[serde(rename = "voicemailBox")]
pub voicemail_box: Option<String>,
#[serde(rename = "faxBox")]
pub fax_box: Option<String>,
#[serde(rename = "ivrMenuId")]
pub ivr_menu_id: Option<String>,
#[serde(rename = "noAnswerTimeout")]
@@ -161,6 +163,8 @@ pub struct AppConfig {
pub devices: Vec<DeviceConfig>,
pub routing: RoutingConfig,
#[serde(default)]
pub faxboxes: Vec<FaxBoxConfig>,
#[serde(default)]
pub voiceboxes: Vec<VoiceboxConfig>,
#[serde(default)]
pub ivr: Option<IvrConfig>,
@@ -191,6 +195,16 @@ pub struct VoiceboxConfig {
pub max_recording_sec: Option<u32>,
}
#[allow(dead_code)]
#[derive(Debug, Clone, Deserialize)]
pub struct FaxBoxConfig {
pub id: String,
#[serde(default)]
pub enabled: bool,
#[serde(rename = "maxMessages")]
pub max_messages: Option<u32>,
}
// ---------------------------------------------------------------------------
// IVR config
// ---------------------------------------------------------------------------
@@ -415,6 +429,7 @@ pub struct InboundRouteResult {
pub ring_all_devices: bool,
pub ring_browsers: bool,
pub voicemail_box: Option<String>,
pub fax_box: Option<String>,
pub ivr_menu_id: Option<String>,
pub no_answer_timeout: Option<u32>,
}
@@ -525,6 +540,7 @@ impl AppConfig {
ring_all_devices: explicit_targets.is_none(),
ring_browsers: route.action.ring_browsers.unwrap_or(false),
voicemail_box: route.action.voicemail_box.clone(),
fax_box: route.action.fax_box.clone(),
ivr_menu_id: route.action.ivr_menu_id.clone(),
no_answer_timeout: route.action.no_answer_timeout,
});
@@ -574,6 +590,7 @@ mod tests {
extension: "100".to_string(),
}],
routing: RoutingConfig { routes },
faxboxes: vec![],
voiceboxes: vec![],
ivr: None,
}
@@ -620,6 +637,7 @@ mod tests {
targets: Some(vec!["desk".to_string()]),
ring_browsers: Some(true),
voicemail_box: None,
fax_box: None,
ivr_menu_id: None,
no_answer_timeout: None,
provider: None,
@@ -644,6 +662,7 @@ mod tests {
targets: None,
ring_browsers: Some(false),
voicemail_box: Some("support-box".to_string()),
fax_box: None,
ivr_menu_id: None,
no_answer_timeout: Some(20),
provider: None,