{"record":{"id":"46d350734e4e1b27","repo":"tinyhumansai/openhuman","slug":"relay-outbound-failed-error","errorCode":null,"errorMessage":"relay outbound failed: {error}","messagePattern":"relay outbound failed: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/channels/relay_runtime.rs","lineNumber":52,"sourceCode":"        .is_some_and(|relay| {\n            relay\n                .identities\n                .iter()\n                .any(|identity| identity.platform == channel)\n        })\n}\n\npub(crate) async fn send_outbound_intent(\n    intent: &ChannelOutboundIntent,\n) -> Result<Option<ChannelSendMessageResult>> {\n    let Some(transport) = current_relay_transport() else {\n        return Ok(None);\n    };\n    let action = tinychannels::relay::relay_send_action_from_outbound_intent(intent);\n    let result = transport\n        .send_outbound(action, Some(&intent.channel_id))\n        .await\n        .map_err(|error| anyhow::anyhow!(\"relay outbound failed: {error}\"))?;\n    Ok(Some(relay_send_message_result(result)?))\n}\n\nfn relay_send_message_result(result: Value) -> Result<ChannelSendMessageResult> {\n    if result.get(\"success\").and_then(Value::as_bool) == Some(false) {\n        let error = result\n            .get(\"error\")\n            .and_then(Value::as_str)\n            .unwrap_or(\"relay outbound failed\");\n        return Err(anyhow::anyhow!(\"relay outbound failed: {error}\"));\n    }\n    Ok(ChannelSendMessageResult {\n        message_id: result\n            .get(\"message_id\")\n            .and_then(Value::as_str)\n            .map(str::to_string),\n        raw: Some(result),\n        ..Default::default()","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/channels/relay_runtime.rs#L34-L70","documentation":"Sending a channel outbound intent over the relay transport failed: the transport's send_outbound call errored (connection dropped, relay protocol error, or backpressure timeout) and the raw error is wrapped with the `relay outbound failed` prefix. Only fires when a relay transport is actually installed; without one the function returns Ok(None).","triggerScenarios":"Thrown at src/openhuman/channels/relay_runtime.rs:52 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check relay connectivity and reconnection state","Retry the send; relay transport errors are frequently transient","Inspect the wrapped error to distinguish protocol failure from disconnect"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}