sendAction method
Sends an AMI action and returns the response.
name - Action name (e.g., 'Login', 'Originate', 'Status')
id - Optional ActionID for tracking (auto-generated if null)
args - Optional action parameters as key-value pairs
timeout - Optional timeout for waiting for response
Returns null if not connected or if timeout occurs.
Example:
final response = await sendAction(
'Originate',
args: {'Channel': 'SIP/123', 'Exten': '456'},
timeout: Duration(seconds: 5),
);
Implementation
Future<Response?> sendAction(
String name, {
String? id,
Map<String, String>? args,
Duration? timeout,
}) async {
if (!available()) {
return null;
}
id ??= '${prefix}_${DateTime.now().millisecondsSinceEpoch}';
print('send action $name id $id');
final data = <String, String>{'Action': name, 'ActionID': id}
..addAll(args ?? {});
// print('send action payload $data');
send(data);
if (timeout == null) {
return registerResponse(id).first;
} else {
return registerResponse(id).timeout(
timeout,
).first.then<Response?>((value) => value).catchError((_) => null);
}
}