data_map
functions[].data_map defines how a SWAIG function should process and respond to the user’s input data.
functions[].data_map
An object that processes function inputs and executes operations through expressions, webhooks, or direct output.
Processing order
The components are processed in the following sequence:
expressions- Processes data using pattern matching (includes its ownoutput)webhooks- Makes external API calls (includes its ownoutputandexpressions)output- Returns a direct response and actions to perform
Similar to a return statement in conventional programming languages,
when a valid output is encountered within any component,
it immediately terminates function execution.
The output provides:
- A
responseobject: Contains static text for the AI agent’s context - An optional
actionobject: Defines executable actions to be triggered
If no component produces a valid output, the system continues processing in sequence:
- First attempts
expressions - If unsuccessful, tries
webhooks - If still unsuccessful, attempts top-level
output - If all fail, returns a generic fallback error message
Properties
data_map.expressions
An array of objects that define plain string or regex patterns to match against the user’s input. When a match is found, the output object is returned.
expressions[].string
The actual input or value from the user or system.
expressions[].pattern
A regular expression pattern to validate or match the string.
expressions[].output
Defines the response or action to be taken when the pattern matches.
See output for details.
data_map.webhooks
An array of objects that define external API calls. If a webhook defines foreach, expressions, and output, they are evaluated in that order.
webhooks[].url
The endpoint for the external service or API. Authentication can also be set in the url in the format of username:password@url. See webhook runtime request for details on template variable substitution and request behavior.
webhooks[].method
The HTTP method (GET, POST, etc.) for the API call.
webhooks[].headers
Any necessary headers for the API call.
webhooks[].params
An object of any necessary parameters for the API call. The key is the parameter name and the value is the parameter value.
webhooks[].input_args_as_params
A boolean to determine if the input parameters should be passed as parameters.
webhooks[].required_args
A string or array of strings that represent the parameters that are required to make the webhook request.
webhooks[].error_keys
A string or array of strings that represent the keys to be used for error handling.
webhooks[].expressions
A list of expressions to be evaluated upon matching.
See expressions for details.
webhooks[].foreach
Iterates over an array of objects and processes an output based on each element in the array. Works similarly to JavaScript’s forEach method.
foreach.input_key
The key to be used to access the current element in the array.
foreach.output_key
The key that can be referenced in the output of the foreach iteration. The values that are stored from append will be stored in this key.
foreach.append
The values to append to the output_key.
Properties from the object can be referenced and added to the output_key by using the following syntax: ${this.property_name}.
The this keyword is used to reference the current object in the array.
foreach.max
The max amount of elements that are iterated over in the array. This will start at the beginning of the array.
webhooks[].output
Defines the response or action to be taken when the webhook is successfully triggered.
See output for details.
data_map.output
Similar to a return statement in conventional programming languages, the data_map.output object immediately
terminates function execution and returns control to the caller.
output.response
Static text that will be added to the AI agent’s context.
output.action
A list of SWML-compatible objects that are executed upon the execution of a SWAIG function. See list of valid actions for details.
List of valid actions
A SWML object to be executed.
A message to be spoken by the AI agent.
Whether to stop the conversation.
Whether to hang up the call. When set to true, the call will be terminated after the AI agent finishes speaking.
Places the caller on hold while playing hold music (configured via the params.hold_music parameter).
During hold, speech detection is paused and the AI agent will not respond to the caller.
The value specifies the hold timeout in seconds. Can be:
- An integer (e.g.,
120for 120 seconds) - An object with a
timeoutproperty
Default timeout is 300 seconds (5 minutes). Maximum timeout is 900 seconds (15 minutes).
Unholding a call
There is no unhold SWAIG action because the AI agent is inactive during hold and cannot process actions.
To take a caller off hold, either:
- Let the hold timeout expire (the AI will automatically resume with a default message), or
- Use the Calling API
ai_unholdcommand to programmatically unhold the call with a custom prompt.
The duration to hold the caller in seconds. Maximum is 900 seconds (15 minutes).
The name of the context to switch to. The context must be defined in the AI’s prompt.contexts configuration.
This action triggers an immediate context switch during the execution of a SWAIG function.
Visit the contexts documentation for details on defining contexts.
The name of the step to switch to. The step must be defined in prompt.contexts.{context_name}.steps for the current context.
This action triggers an immediate step transition during the execution of a SWAIG function.
Visit the steps documentation for details on defining steps.
An array of objects to toggle SWAIG functions on or off during the conversation. Each object identifies a function by name and sets its active state.
See toggle_functions for additional details.
The name of the SWAIG function to toggle.
Whether to activate or deactivate the function.
A JSON object containing any global data, as a key-value map. This action sets the data in the global_data to be globally referenced.
A JSON object containing any metadata, as a key-value map. This action sets the data in the meta_data to be referenced locally in the function.
See set_meta_data for additional details.
The key of the global data to unset from the global_data. You can also reset the global_data by passing in a new object.
The key of the metadata to unset from the meta_data. You can also reset the meta_data by passing in a new object.
A JSON object containing the audio file to play.
URL or filepath of the audio file to play. Authentication can also be set in the url in the format of username:password@url.
Whether to wait for the audio file to finish playing before continuing.
Whether to stop the background audio file.
Used to inject text into the users queue as if they input the data themselves.
A JSON object containing the context to switch to.
See context_switch for additional details.
The instructions to send to the agent.
Whether to consolidate the context.
A string serving as simulated user input for the AI Agent. During a context_switch in the AI’s prompt, the user_prompt offers the AI pre-established context or guidance.
Transfer the call to a new destination.
The destination to transfer to (phone number, SIP URI, or SWML URL).
Whether to include a conversation summary when transferring.
Webhook runtime request
When the AI triggers a function that uses data_map.webhooks, SignalWire sends a request to each configured url.
Template variables
The url and params fields support %{variable} substitution.
Nested properties use dot notation — for example,
https://api.example.com/weather?city=%{args.location} substitutes the value the AI extracted for location.
For more on variables and scopes, see the Variables reference.
args
Function argument values extracted by the AI, keyed by argument name.
args.*
Individual argument value. The key matches an argument name from the function’s parameters schema.
call_id
Unique identifier for the current call.
ai_session_id
AI session identifier.
conversation_id
Conversation identifier.
function
Name of the function being executed.
caller_id_name
Caller’s display name.
caller_id_num
Caller’s phone number.
project_id
SignalWire project ID.
space_id
SignalWire space ID.
app_name
AI application name.
global_data
The application’s global data.
global_data.*
User-defined property.
meta_data
Function metadata (when meta_data_token is set).
meta_data.*
User-defined property.
Request body
When params is defined (or method is POST), SignalWire sends the params object as the JSON request body.
Template variables in params values are expanded before sending.
If no params are defined and method is not POST, the request is sent without a body.
If input_args_as_params is true, the function arguments extracted by the AI
are merged into params. If no params are defined, the arguments become the entire request body.
Response processing
The JSON response from the webhook is processed through the output template.
Fields from the response can be referenced using %{key} syntax in the output’s response string.
For example, if the webhook returns {"temp": 72, "conditions": "sunny"}, an output of
"The weather is %{temp}°F with %{conditions}" will produce "The weather is 72°F with sunny".
Examples
expressions
webhooks with explicit params
Sends the following request body to https://api.example.com/weather:
webhooks with input_args_as_params
Sends the AI-extracted arguments directly as the request body: