Metadata-Version: 2.4
Name: basicami
Version: 0.1.0
Summary: AsyncIO-based Asterisk Manager Interface (AMI) client for Python
Author-email: Andrius Kairiukstis <k@andrius.mobi>
License: MIT
Project-URL: Homepage, https://github.com/andrius/asterisk-basicami
Project-URL: Repository, https://github.com/andrius/asterisk-basicami
Project-URL: Documentation, https://github.com/andrius/asterisk-basicami/blob/main/README.md
Project-URL: Bug Reports, https://github.com/andrius/asterisk-basicami/issues
Keywords: asterisk,ami,pbx,telephony,voip,asyncio
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Telecommunications Industry
Classifier: Topic :: Communications :: Internet Phone
Classifier: Topic :: Communications :: Telephony
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Operating System :: OS Independent
Classifier: Framework :: AsyncIO
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# basicami

AsyncIO-based Asterisk Manager Interface (AMI) client for Python.

Companion to [basicagi](https://github.com/andrius/asterisk-basicagi).

## Install

```bash
pip install basicami
```

## Usage

```python
import asyncio
from basicami import BasicAMI

async def main():
    ami = await BasicAMI.connect("localhost", 5038, "admin", "secret")

    # Send any AMI action
    resp = await ami.send_action({"Action": "Ping"})
    print(resp)

    # Originate a call
    resp = await ami.originate(
        channel="Local/100@from-internal",
        application="Wait",
        data="30",
        caller_id="Test <15550099999>",
        timeout=30,
    )

    # Collect events
    events = await ami.get_events(timeout=2.0)
    for event in events:
        print(event)

    await ami.close()

asyncio.run(main())
```

## Marker Parsing

Includes a marker parser for Asterisk Verbose/Log markers used in PBX testing:

```python
from basicami import parse_marker, MarkerTrace

marker = parse_marker("SBC_ENTER: 001D tenant=001D-dev-testing")
print(marker.name)     # "SBC_ENTER"
print(marker.context)  # "001D"
print(marker.kv)       # {"tenant": "001D-dev-testing"}
```

## License

MIT
