Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

channel_call

Invokes another channel’s workflow in-process: no network hop. The called channel keeps its own versioning and governance. Cycle detection and a max call depth prevent runaway recursion.

Synopsis

{
  "name": "channel_call",
  "input": {
    "channel": "customer-lookup",
    "data": {
      "var": "data.order.customer_id"
    },
    "output": "data.customer",
    "timeout_ms": 0
  }
}

Description

channel_call is a composition function. It runs inside the calling request and names no connector.

Retry safety: depends_on channel. See Retry safety for what the answer costs.

Fields

FieldTypeRequiredDefaultDescription
channelstring | JSONLogicyesTarget channel. Accepts the pre-1.0 name channel_logic
dataany | JSONLogicnorequest payloadPayload passed to the target channel. Accepts the pre-1.0 name data_logic
outputstring | JSONLogicno"data"Dotted path where the called channel’s response is stored. Accepts the pre-1.0 name response_path
timeout_msnumbernofrom configPer-call timeout in milliseconds

channel and data are each one field, not the channel/channel_logic and data/data_logic pairs they were before 1.5. A literal is JSONLogic for itself, so the static spelling is unchanged and still folds once when the engine is built. An expression in the same field is what makes the target or the payload depend on the message. The old names remain accepted as aliases. Supplying both spellings of one field is an error, not a precedence rule.

Examples

{
  "name": "channel_call",
  "input": {
    "channel": "customer-lookup",
    "data": { "var": "data.order.customer_id" },
    "output": "data.customer"
  }
}

A computed channel routes one task to a channel the message names. The dependency endpoint reports has_dynamic_channel_calls for a workflow that contains one, because the static list of targets cannot be complete:

{
  "name": "channel_call",
  "input": {
    "channel": { "cat": ["notify-", { "var": "data.region" }] },
    "output": "data.notified"
  }
}

Last verified 14 September 2026