sendAction method

Future<Response?> sendAction(
  1. String name, {
  2. String? id,
  3. Map<String, String>? args,
  4. Duration? timeout,
})
inherited

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);
  }
}