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.
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.emailor$.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
failureedge 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).
Related articles
-
WhatsApp calls in Omnifox
Receive and make WhatsApp voice calls directly from the Omnifox inbox.
-
IVR, call queues and routing
Design voice menus (IVR), organize call queues, and connect your own PBX to Omnifox.
-
View call history and play recordings in the inbox
Find every call in the inbox Calls tab and listen back to recordings without leaving Omnifox.
-
Start a call from a conversation
Voice-call a contact without leaving the chat: the Call via WhatsApp button dials the call and logs it in the inbox.
-
Configure your call settings (device, microphone and SIP)
Get your browser, microphone and SIP connection ready to place and receive calls right from the Omnifox Inbox.