AgentsDataMap

foreach

View as MarkdownOpen in Claude

Process an array from the webhook response, building a formatted string from each element.

Parameters

foreach_config
dict[str, Any]Required

Configuration dictionary with the following keys:

foreach_config.input_key
strRequired

Key in the API response containing the array.

foreach_config.output_key
strRequired

Variable name for the built string (reference as ${output_key} in output).

foreach_config.max
int

Maximum number of items to process.

foreach_config.append
strRequired

Template string to append for each item. Use ${this.field} to reference fields on the current array element.

Returns

DataMap — Self for method chaining. Raises ValueError if no webhook has been added yet.

Example

1from signalwire import AgentBase, DataMap
2from signalwire import FunctionResult
3
4search_docs = (
5 DataMap("search_docs")
6 .purpose("Search documentation")
7 .parameter("query", "string", "Search query", required=True)
8 .webhook(
9 "POST",
10 "https://api.docs.example.com/search",
11 headers={"Authorization": "Bearer TOKEN"}
12 )
13 .body({"query": "${args.query}", "limit": 3})
14 .foreach({
15 "input_key": "results",
16 "output_key": "formatted_results",
17 "max": 3,
18 "append": "- ${this.title}: ${this.summary}\n"
19 })
20 .output(FunctionResult("Found:\n${formatted_results}"))
21 .fallback_output(FunctionResult("Search is currently unavailable."))
22)
23
24agent = AgentBase(name="docs-agent")
25agent.set_prompt_text("You are a helpful assistant.")
26agent.register_swaig_function(search_docs.to_swaig_function())
27
28if __name__ == "__main__":
29 agent.run()