{"id":25999543,"url":"https://github.com/denisstreltsov/pyami_asterisk","last_synced_at":"2025-09-13T19:06:42.808Z","repository":{"id":48982994,"uuid":"307807616","full_name":"denisstreltsov/pyami_asterisk","owner":"denisstreltsov","description":"AsyncIO python library to play with Asterisk Manager Interface (AMI)","archived":false,"fork":false,"pushed_at":"2023-01-22T10:44:06.000Z","size":33,"stargazers_count":29,"open_issues_count":0,"forks_count":14,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-24T05:18:37.071Z","etag":null,"topics":["asterisk","asyncio","python","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/denisstreltsov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-27T19:33:03.000Z","updated_at":"2025-04-04T09:52:07.000Z","dependencies_parsed_at":"2023-02-12T15:31:46.629Z","dependency_job_id":null,"html_url":"https://github.com/denisstreltsov/pyami_asterisk","commit_stats":null,"previous_names":["denisstreltsov/pyami_asterisk","streltsovdenis/pyami_asterisk"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/denisstreltsov/pyami_asterisk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisstreltsov%2Fpyami_asterisk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisstreltsov%2Fpyami_asterisk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisstreltsov%2Fpyami_asterisk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisstreltsov%2Fpyami_asterisk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/denisstreltsov","download_url":"https://codeload.github.com/denisstreltsov/pyami_asterisk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisstreltsov%2Fpyami_asterisk/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260101954,"owners_count":22959043,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asterisk","asyncio","python","python3"],"created_at":"2025-03-05T18:29:11.965Z","updated_at":"2025-06-16T05:07:17.633Z","avatar_url":"https://github.com/denisstreltsov.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"AsyncIO python library with Asterisk AMI\n========================================\n\n[![Build Status](https://travis-ci.com/streltsovdenis/pyami_asterisk.svg?branch=main)](https://travis-ci.com/streltsovdenis/pyami_asterisk)\n![PyPI](https://img.shields.io/pypi/v/pyami_asterisk)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/pyami_asterisk?color=green)\n![PyPI - License](https://img.shields.io/pypi/l/pyami-asterisk?color=green)\n\nPyami_asterisk is a library based on python’s AsyncIO with Asterisk AMI\n\nInstall\n-------\n\nInstall pyami_asterisk\n\n```bash\npip install pyami-asterisk\n```\n\nUsage\n-----\n\nAsterisk AMI Listen all Events\n\n```python\nimport asyncio\nfrom pyami_asterisk import AMIClient\n\n\ndef all_events(events):\n    print(events)\n\n\nasync def hangup_call(events):\n    \"\"\"asynchronous callbacks\"\"\"\n    await asyncio.sleep(3)\n    print(events)\n\n\nami = AMIClient(host='127.0.0.1', port=5038, username='username', secret='password')\nami.register_event([\"*\"], all_events)\nami.register_event([\"Hangup\"], hangup_call)\nami.connect()\n```\n\nAsterisk AMI Listen Events: Registry, ContactStatus, PeerStatus\n\n```python\nfrom pyami_asterisk import AMIClient\n\n\ndef register_multiple_events(events):\n    print(events)\n\n\nasync def callback_peer_status(events):\n    \"\"\"\n        Response event:\n        {\n            'Event': 'PeerStatus', \n            'Privilege': 'system,all',\n            'ChannelType': 'PJSIP', \n            'Peer': 'PJSIP/888', \n            'PeerStatus': 'Unreachable',\n        }\n    \"\"\"\n    if events.get('PeerStatus') == 'Unreachable':\n        await asyncio.sleep(2)\n        print(events)\n\n    async def ping(events):\n        \"\"\"asynchronous callbacks\"\"\"\n        await asyncio.sleep(3)\n        print(events)\n\n    ami.create_action({\"Action\": \"Ping\"}, ping)\n\n\nami = AMIClient(host='127.0.0.1', port=5038, username='username', secret='password')\nami.register_event(patterns=[\"Registry\", \"ContactStatus\"], callbacks=register_multiple_events)\nami.register_event([\"PeerStatus\"], callback_peer_status)\nami.connect()\n```\n\nAsterisk AMI Actions: CoreSettings\n\n```python\nimport asyncio\nfrom pyami_asterisk import AMIClient\n\n\ndef core_settings(events):\n    print(events)\n\n\nasync def core_status(events):\n    \"\"\"asynchronous callbacks\"\"\"\n    await asyncio.sleep(4)\n    print(events)\n\n\nami = AMIClient(host='127.0.0.1', port=5038, username='username', secret='password')\nami.create_action({\"Action\": \"CoreSettings\"}, core_settings)\nami.create_action({\"Action\": \"CoreStatus\"}, core_status)\nami.connect()\n```\n\nAsterisk AMI Actions: CoreSettings, CoreStatus (repeat 3 seconds)\n\n```python\nfrom pyami_asterisk import AMIClient\n\n\ndef core_settings(events):\n    print(events)\n\n\ndef core_status(events):\n    print(events)\n    print(events['CoreCurrentCalls'])\n\n\nami = AMIClient(host='127.0.0.1', port=5038, username='username', secret='password')\nami.create_action({\"Action\": \"CoreSettings\"}, core_settings)\nami.create_action({\"Action\": \"CoreStatus\"}, core_status, repeat=3)\nami.connect()\n```\n\nAsterisk AMI Action Originate\n\n```python\nfrom pyami_asterisk import AMIClient\n\n\ndef callback_originate(events):\n    print(events)\n\n\nami = AMIClient(host='127.0.0.1', port=5038, username='username', secret='password')\nami.create_action(\n    {\n        \"Action\": \"Originate\",\n        \"Channel\": \"pjsip/203\",\n        \"Timeout\": \"20000\",\n        \"CallerID\": \"+37529XXXXXXX \u003c203\u003e\",\n        \"Exten\": \"+37529XXXXXXX\",\n        \"Context\": \"from-internal\",\n        \"Async\": \"true\",\n        \"Variable\": r\"PJSIP_HEADER(add,Call-Info)=\\;Answer-After=0\",  # or multiple Variable ['var=1', 'var=2']\n        \"Priority\": \"1\",\n    },\n    callback_originate,\n)\nami.connect()\n```\n\nAsterisk AMI Listen Events + Action\n\n```python\nfrom pyami_asterisk import AMIClient\n\n\ndef callback_peer_status(events):\n    \n    def callback_ping(response_ping):\n        print(\"Response Ping\", response_ping)\n\n    print(\"PeerStatus\", events)\n    ami.create_action({\"Action\": \"Ping\"}, callback_ping)\n\n\nami = AMIClient(host='127.0.0.1', port=5038, username='username', secret='password')\nami.register_event([\"PeerStatus\"], callback_peer_status)\nami.connect()\n```\n\nCreate asyncio task\n\n``` python\nimport asyncio\nimport random\nfrom pyami_asterisk import AMIClient\n\n\nasync def refresh_tokens(timeout=4):\n    \"\"\"Example: Refresh tokens\"\"\"\n    while True:\n        print(random.randrange(0, 1000))\n        await asyncio.sleep(timeout)\n    \n\n\nami = AMIClient(host='127.0.0.1', port=5038, username='username', secret='password')\nami.create_asyncio_task(tasks=[refresh_tokens(timeout=2)])\nami.connect()\n```\n\nRun / stop async\n\n``` python\nimport asyncio\nfrom pyami_asterisk import AMIClient\n\n\nasync def all_events(event):\n    print(event)\n    if event.get('Event') == 'SuccessfulAuth':\n        # connection close\n        await ami.connection_close()\n\n\nasync def run_async():\n    await asyncio.sleep(2)\n    await ami.connect_ami()\n\nami = AMIClient(host='127.0.0.1', port=5038, username='username', secret='password')\nami.register_event([\"*\"], all_events)\nasyncio.run(run_async())\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenisstreltsov%2Fpyami_asterisk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenisstreltsov%2Fpyami_asterisk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenisstreltsov%2Fpyami_asterisk/lists"}