asterisk-zmq icon indicating copy to clipboard operation
asterisk-zmq copied to clipboard

zmq/json support asterisk AMI module. (zeromq, 0MQ)

ZMQ manager Author: Sungtae Kim [email protected]

INFO:

  • This moudule aims to replicate asterisk manager interface using zmq and json.
  • For now, it just support any json-type of message pass to ami.
  • This module has two sockets. One is for action&reply, and the other one is for eventy notify.
  • It is asterisk-20.x compatible. For asterisk-13.x compatible, please use the asterisk-13 branch.

DESCRIPTION:

  • ZMQ manager uses 2 zmq sockets.
  • zmq_cmd, zmq_evt.
  • Default address is (addr_cmd=tcp://:967, addr_evt=tcp://:968)
  • zmq_cmd designed for REQ-REP pattern. (For AMI Action)
  • zmq_evt designed for PUB-SUB pattern. (For AMI Event)
  • AMI should be enabled.(MUST)
  • If AMI disabled, no event message would be received.(only Action/Response working)
  • zmq_cmd send message as an json_array.
  • zmq_evt send message as an json_object.

DEPENDENCIES:

  • zmq(zeromq-3.2.5)
  • compiled Asterisk with json support.

REFERENCE:

BUILDING:

  • cd asterisk-zmq/ && make

INSTALLING:

  • cp build/zmq_manager.so ASTERISK_INSTALL_PATH/lib/asterisk/modules/

USAGE:

  • Create a config file. See conf/zmq_manager.conf -- cp conf/zmq_manager.conf /etc/asterisk
  • Add: load => res_zmq_manager.so to the modules.conf file -- echo "load => res_zmq_manager.so" >> /etc/asterisk/modules.conf
  • AMI enable(MUST) -- edit /etc/asterisk/manager.conf. -- change "enabled = no" to "enabled = yes"
  • See samples.

Asterisk CLI HELP:

  • AsteriskCLI> zmq manager status [cmd address: tcp://:967] [evt address: tcp://*:968]

SAMPLES:

  • $ python samples/evt_receiver.py // Receive Asterisk event script.
  • $ python samples/cmd_sippeers.py.py
  • ...

TEST:

  • Send AMI message in json style, to tcp://localhost967 --Send {"Action": "SIPpeers"} -- It will reply AMI response in json style.(Json array) [ { "Response":"Success", "EventList":"start", "Message":"Peer status list will follow" }, { "IPport":"44151", "AutoComedia":"no", "Dynamic":"yes", "TextSupport":"no", "Event":"PeerEntry", "ChanObjectType":"peer", "Status":"Unmonitored", "Channeltype":"SIP", "AutoForcerport":"yes", "Comedia":"no", "VideoSupport":"no", "IPaddress":"127.0.0.1", "ObjectName":"test-01", "Forcerport":"no", "ACL":"no", "RealtimeDevice":"no", "Description":"" }, { "IPport":"0", "AutoComedia":"no", "Dynamic":"yes", "TextSupport":"no", "Event":"PeerEntry", "ChanObjectType":"peer", "Status":"Unmonitored", "Channeltype":"SIP", "AutoForcerport":"yes", "Comedia":"no", "VideoSupport":"no", "IPaddress":"-none-", "ObjectName":"test-02", "Forcerport":"no", "ACL":"no", "RealtimeDevice":"no", "Description":"" }, { "IPport":"0", "AutoComedia":"no", "Dynamic":"yes", "TextSupport":"no", "Event":"PeerEntry", "ChanObjectType":"peer", "Status":"Unmonitored", "Channeltype":"SIP", "AutoForcerport":"yes", "Comedia":"no", "VideoSupport":"no", "IPaddress":"-none-", "ObjectName":"test-03", "Forcerport":"no", "ACL":"no", "RealtimeDevice":"no", "Description":"" }, { "Event":"PeerlistComplete", "ListItems":"3", "EventList":"Complete" }

]

-- Send {"Action":"SIPShowPeer","Peer":"test-01"}

-- Response [ { "SIP-Sess-Expires":"1800", "LastMsgsSent":"0", "SecretExist":"Y", "Parkinglot":"", "SIP-Forcerport":"a", "SIP-DirectMedia":"Y", "Named Pickupgroup":"", "SIP-AuthInsecure":"no", "Busy-level":"0", "Named Callgroup":"", "ACL":"N", "Dynamic":"Y", "Response":"Success", "AMAflags":"Unknown", "RemoteSecretExist":"N", "Default-addr-port":"0", "SIP-UserPhone":"N", "MaxCallBR":"384 kbps", "VoiceMailbox":"", "Channeltype":"SIP", "QualifyFreq":"60000 ms", "SIP-RTP-Engine":"asterisk", "SIP-CanReinvite":"Y", "Language":"", "Callgroup":"", "Context":"public", "ChanObjectType":"peer", "CID-CallingPres":"Presentation Allowed, Not Screened", "Default-addr-IP":"(null)", "ToneZone":"<Not set>", "ToHost":"", "SIP-Sess-Refresh":"uas", "SIP-Useragent":"", "TransferMode":"open", "SIP-T.38MaxDtgrm":"4294967295", "SIP-DTMFmode":"rfc2833", "ObjectName":"test-01", "MD5SecretExist":"N", "Address-IP":"127.0.0.1", "Call-limit":"0", "Maxforwards":"0", "Pickupgroup":"", "MOHSuggest":"", "SIP-VideoSupport":"N", "Description":"", "Callerid":""" <>", "SIP-Comedia":"N", "Default-Username":"test-01", "RegExpire":"604 seconds", "SIP-Encryption":"N", "SIP-PromiscRedir":"N", "SIP-Sess-Timers":"Accept", "SIP-TextSupport":"N", "Reg-Contact":"sip:[email protected]:44151", "SIP-T.38Support":"N", "SIP-T.38EC":"Unknown", "SIP-Sess-Min":"90", "Address-Port":"44151", "Codecs":"(ulaw|alaw|gsm|h263)", "Status":"Unmonitored", "SIP-Use-Reason-Header":"N" } ]

LICENSING:

  • BSD License