🇪🇸 Español 🇬🇧 English 🇧🇷 Português

IVR node: HTTP request

Connect your IVR to an external system (CRM, ERP, your own API) by calling a URL and storing the response in a variable.

Jul 11, 2026

What it's for

Calls an external HTTP endpoint from inside the IVR flow itself — no Asterisk round trip — and optionally stores the response (full body or one specific slice) in a variable for later nodes to use. Handy for checking a CRM before routing, validating a customer against your ERP, or triggering an automation.

Configuration

  • HTTP method: GET, POST, PUT, or DELETE.
  • URL: supports variable interpolation, e.g. https://crm.com/api/lookup?phone=${caller.phone}. Only http(s) is allowed; private, loopback, or reserved addresses are blocked for security.
  • Headers: key/value pairs; values also support interpolation (handy for tokens stored as a variable, e.g. ${secret}).
  • Body (JSON): the request body for POST/PUT, also with variable interpolation.
  • Timeout (seconds): 30 seconds max.
  • Save response to variable: the variable name that holds the full response body.
  • Extract JSON path (optional): a path like data.user.email or $.user.tier; when set, only that fragment gets stored instead of the full JSON.

Outputs (edges)

  • success: a 2xx response (and, if you configured a JSON path, that it resolved successfully).
  • failure: any error — non-2xx status, timeout, network issue, invalid JSON, JSON path not found, or a URL blocked by the SSRF guard.

Example

Before routing a call, you add an HTTP request node with GET to https://my-erp.com/api/customers?phone=${caller.phone}, save the response to a variable called customer_info, and extract the path $.tier into another variable called customer_tier. A downstream Condition node then decides: if ${customer_tier} is "vip", route straight to a senior agent; if the lookup fails (failure edge), fall through to the general menu.

Tips

  • Always wire the failure edge somewhere — a generic menu, an apology message. Never leave that branch unconnected.
  • Use the JSON path to keep only the data you actually need; saving the full response forces downstream nodes to parse the JSON manually.

Troubleshooting

  • If the request always fails, check first that the URL isn't pointing at a private IP or localhost — the node blocks those automatically for security (SSRF protection), even if the endpoint works fine from your internal network.
  • If you set a JSON path and nothing shows up in the variable, confirm the response is valid JSON and that the path matches the returned structure exactly (a leading $. is optional).
Was this helpful?

Related articles