Package: pyami-asterisk
AsyncIO python library with Asterisk AMIPyami_asterisk is a library based on python’s AsyncIO with Asterisk AMIInstallInstall pyami_asteriskpipinstallpyami-asteriskUsageAsterisk AMI Listen all Eventsimportasynciofrompyami_asteriskimportAMIClientdefall_events(events):print(events)asyncdefhangup_call(events):"""asynchronous callbacks"""awaitasyncio.sleep(3)print(events)ami=AMIClient(host='127.0.0.1',port=5038,username='username',secret='password')ami.register_event(["*"],all_events)ami.register_event(["Hangup"],hangup_call)ami.connect()Asterisk AMI Listen Events: Registry, ContactStatus, PeerStatusfrompyami_asteriskimportAMIClientdefregister_multiple_events(events):print(events)asyncdefcallback_peer_status(events):"""Response event:{'Event': 'PeerStatus','Privilege': 'system,all','ChannelType': 'PJSIP','Peer': 'PJSIP/888','PeerStatus': 'Unreachable',}"""ifevents.get('PeerStatus')=='Unreachable':awaitasyncio.sleep(2)print(events)asyncdefping(events):"""asynchronous callbacks"""awaitasyncio.sleep(3)print(events)ami.create_action({"Action":"Ping"},ping)ami=AMIClient(host='127.0.0.1',port=5038,username='username',secret='password')ami.register_event(patterns=["Registry","ContactStatus"],callbacks=register_multiple_events)ami.register_event(["PeerStatus"],callback_peer_status)ami.connect()Asterisk AMI Actions: CoreSettingsimportasynciofrompyami_asteriskimportAMIClientdefcore_settings(events):print(events)asyncdefcore_status(events):"""asynchronous callbacks"""awaitasyncio.sleep(4)print(events)ami=AMIClient(host='127.0.0.1',port=5038,username='username',secret='password')ami.create_action({"Action":"CoreSettings"},core_settings)ami.create_action({"Action":"CoreStatus"},core_status)ami.connect()Asterisk AMI Actions: CoreSettings, CoreStatus (repeat 3 seconds)frompyami_asteriskimportAMIClientdefcore_settings(events):print(events)defcore_status(events):print(events)print(events['CoreCurrentCalls'])ami=AMIClient(host='127.0.0.1',port=5038,username='username',secret='password')ami.create_action({"Action":"CoreSettings"},core_settings)ami.create_action({"Action":"CoreStatus"},core_status,repeat=3)ami.connect()Asterisk AMI Action Originatefrompyami_asteriskimportAMIClientdefcallback_originate(events):print(events)ami=AMIClient(host='127.0.0.1',port=5038,username='username',secret='password')ami.create_action({"Action":"Originate","Channel":"pjsip/203","Timeout":"20000","CallerID":"+37529XXXXXXX <203>","Exten":"+37529XXXXXXX","Context":"from-internal","Async":"true","Variable":r"PJSIP_HEADER(add,Call-Info)=\;Answer-After=0",# or multiple Variable ['var=1', 'var=2']"Priority":"1",},callback_originate,)ami.connect()Asterisk AMI Listen Events + Actionfrompyami_asteriskimportAMIClientdefcallback_peer_status(events):defcallback_ping(response_ping):print("Response Ping",response_ping)print("PeerStatus",events)ami.create_action({"Action":"Ping"},callback_ping)ami=AMIClient(host='127.0.0.1',port=5038,username='username',secret='password')ami.register_event(["PeerStatus"],callback_peer_status)ami.connect()Create asyncio taskimportasyncioimportrandomfrompyami_asteriskimportAMIClientasyncdefrefresh_tokens(timeout=4):"""Example: Refresh tokens"""whileTrue:print(random.randrange(0,1000))awaitasyncio.sleep(timeout)ami=AMIClient(host='127.0.0.1',port=5038,username='username',secret='password')ami.create_asyncio_task(tasks=[refresh_tokens(timeout=2)])ami.connect()Run / stop asyncimportasynciofrompyami_asteriskimportAMIClientasyncdefall_events(event):print(event)ifevent.get('Event')=='SuccessfulAuth':# connection closeawaitami.connection_close()asyncdefrun_async():awaitasyncio.sleep(2)awaitami.connect_ami()ami=AMIClient(host='127.0.0.1',port=5038,username='username',secret='password')ami.register_event(["*"],all_events)asyncio.run(run_async())