-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathAdvancedDatamapDemo.java
More file actions
96 lines (82 loc) · 4.7 KB
/
Copy pathAdvancedDatamapDemo.java
File metadata and controls
96 lines (82 loc) · 4.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
* Advanced DataMap Features Demo.
*
* Demonstrates expression-based responses, webhook chains, foreach array
* processing, and fallback outputs -- all without custom webhook endpoints.
*/
import com.signalwire.sdk.agent.AgentBase;
import com.signalwire.sdk.datamap.DataMap;
import com.signalwire.sdk.swaig.FunctionResult;
import java.util.List;
import java.util.Map;
public class AdvancedDatamapDemo {
public static void main(String[] args) throws Exception {
var agent = AgentBase.builder()
.name("advanced-datamap")
.route("/")
.port(3000)
.build();
agent.promptAddSection("Role",
"You are an assistant that demonstrates advanced DataMap features.");
// 1. Expression-based command processor with pattern matching
var commandMap = new DataMap("command_processor")
.purpose("Process user commands with pattern matching")
.parameter("command", "string", "User command to process", true)
.parameter("target", "string", "Optional target for the command", false)
.expression("${args.command}", "^start",
new FunctionResult("Starting process: ${args.target}"))
.expression("${args.command}", "^stop",
new FunctionResult("Stopping process: ${args.target}"))
.expression("${args.command}", "^status",
new FunctionResult("Checking status of: ${args.target}"),
new FunctionResult("Unknown command: ${args.command}. Try start, stop, or status."));
agent.registerSwaigFunction(commandMap.toSwaigFunction());
// 2. Webhook with foreach array processing
var searchMap = new DataMap("search_results")
.purpose("Search and format results from API")
.parameter("query", "string", "Search query", true)
.parameter("limit", "string", "Maximum results", false)
.webhook("GET", "https://search-api.example.com/search",
Map.of("Authorization", "Bearer ${search_token}"))
.params(Map.of("q", "${args.query}"))
.foreach(Map.of(
"input_key", "results",
"output_key", "formatted_results",
"max", 5,
"append", "Title: ${this.title}\n${this.summary}\nURL: ${this.url}\n\n"
))
.output(new FunctionResult("Search results for \"${args.query}\":\n\n${formatted_results}"))
.errorKeys(List.of("error"));
agent.registerSwaigFunction(searchMap.toSwaigFunction());
// 3. POST webhook with body and fallback
var feedbackMap = new DataMap("submit_feedback")
.purpose("Submit customer feedback")
.parameter("rating", "integer", "Rating from 1-5", true)
.parameter("comment", "string", "Feedback comment", false)
.webhook("POST", "https://api.example.com/feedback",
Map.of("Content-Type", "application/json"))
.body(Map.of(
"rating", "${args.rating}",
"comment", "${args.comment}",
"timestamp", "${system.timestamp}"
))
.output(new FunctionResult("Thank you for your feedback!"))
.fallbackOutput(new FunctionResult("Feedback service is temporarily unavailable."))
.globalErrorKeys(List.of("error", "fault", "exception"));
agent.registerSwaigFunction(feedbackMap.toSwaigFunction());
// 4. Expression-based smart calculator
var calcMap = new DataMap("smart_calculator")
.purpose("Smart calculator with conditional responses")
.parameter("expression", "string", "Mathematical expression", true)
.parameter("format", "string", "Output format (simple/detailed)", false)
.expression("${args.expression}", "^\\s*\\d+\\s*[+\\-*/]\\s*\\d+\\s*$",
new FunctionResult("Quick calculation: ${args.expression} = @{expr ${args.expression}}"))
.expression("${args.format}", "^detailed$",
new FunctionResult("Detailed: ${args.expression} = @{expr ${args.expression}} at @{strftime_tz UTC %Y-%m-%d %H:%M:%S}"))
.fallbackOutput(new FunctionResult(
"Expression: ${args.expression}\nResult: @{expr ${args.expression}}"));
agent.registerSwaigFunction(calcMap.toSwaigFunction());
System.out.println("Starting Advanced DataMap agent on port 3000...");
agent.run();
}
}