Asterisk Manager Interface (AMI) Library for Flutter


  • support Android,iOS,Desktop and Web.
  • support listen events from stream.
  • support async/await for ami events.
  • functions organized by module, developers can combine them for other purpose.
  • easy to develop new actions or connection methods.


just add dependency into pubspec.yaml:

ami_flutter: ^0.0.2


  1. initialize derived classes of BaseManager (e.g. DefaultManager for TCP Socket or WebSocketManager for WebSocket at web platform) and connect:
final manager = DefaultManager();
// web platform need set prefix for send actions, like this: manager.prefix = 'prefix';
await manager.connect('', 5038);
  1. login ami:
final loginResult = await manager.login('user', 'pass');
  1. send actions and receive responses:
final statusResult = await manager.sendAction('Status');
final originateResult = await manager.sendAction(
      id: 'actionId',
      args: {
        'Channel': 'sip/12345',
        'Exten': '1234',
        'Context': 'default',
        'Async': 'yes',
  1. listen events:
      (event) {
        print('receive event ${} ${event.baseMsg.headers}');

or read events like response:

final bootedEvent = await manager.readEvent('FullyBooted');
final events = await manager.readAllEventsUntil(
  1. logoff and dispose resource:
await manager.logoff();

Web Platform Need Know

AMI only support TCP socket. If you need use the library at web platform:

  • Install and configure amiws.
  • Use WebSocketManager to connect web socket proxy by amiws

BTW. You can use function selectByPlatform to auto select the proper manager according to your platform.