Skip to content
LambogeniusDocs

Compose using Liquid for Azure Logic Apps

Azure Functions

Call HTTP-triggered Functions from templates with CallFunction, the registry, authentication and the wire contract.

Service provider/serviceProviders/lamboLiquidComposeOperation ComposeLiquid, shown in the designer as Compose using Liquid.

CallFunction

"customerName": {{ content.order.customerId | CallFunction: 'GetCustomerName' | ToJson }}

The action must list the alias: "allowedFunctionAliases": ["GetCustomerName"] (case-sensitive). Otherwise the call fails with FunctionNotAllowed before anything is sent.

The registry

Where each alias goes, and how to authenticate, is set by the operator in a registry file (LiquidCompose__FunctionRegistryPath) or setting (LiquidCompose__FunctionRegistry). Templates never contain URLs or keys.

{
  "schemaVersion": 1,
  "functions": {
    "GetCustomerName": {
      "endpoint": "https://<function-app>.azurewebsites.net/api/GetCustomerName",
      "authentication": { "mode": "ManagedIdentity", "scope": "api://<application-id>/.default" },
      "timeoutSeconds": 5,
      "maxRequestBytes": 65536,
      "maxResponseBytes": 65536,
      "cacheWithinTransform": true,
      "retryCount": 0
    }
  }
}
FieldRules
endpointAbsolute https URL without credentials, query string or fragment. http only for loopback, with LiquidCompose__Development__AllowLocalhostHttp.
authenticationManagedIdentity (scope, optional clientId for a user-assigned identity), FunctionKey (keySetting: the app setting holding the key, ideally a Key Vault reference), or None for loopback in development.
timeoutSeconds1–5, and never past the action's deadline.
cacheWithinTransformtrue reuses identical answers within one render.
enabledfalse refuses calls with FunctionNotAllowed.
retryCountMust be 0: the action never retries a call.

The Function contract

  • Request: POST with {"value": "…"} as JSON, plus x-ms-client-request-id, traceparent, and the key or bearer token.
  • Answer: HTTP 200 text/plain UTF-8; the body is the filter's result, exactly as sent.
  • Anything else fails the action: 401/403 give FunctionAuthenticationFailed; 404, 429, 5xx, redirects and network errors give FunctionHttpFailed; a wrong content type or an oversized body gives FunctionResponseInvalid. A template never gets an empty value in place of an error.
  • Limits: 5 s per call, 64 KiB each way, 50 calls per render.