Debugging on all applications enabled <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"4.0.2","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","apis":[{"path":"/api-docs/asterisk.{format}","description":"Asterisk resources"},{"path":"/api-docs/endpoints.{format}","description":"Endpoint resources"},{"path":"/api-docs/channels.{format}","description":"Channel resources"},{"path":"/api-docs/bridges.{format}","description":"Bridge resources"},{"path":"/api-docs/recordings.{format}","description":"Recording resources"},{"path":"/api-docs/sounds.{format}","description":"Sound resources"},{"path":"/api-docs/playbacks.{format}","description":"Playback control resources"},{"path":"/api-docs/deviceStates.{format}","description":"Device state resources"},{"path":"/api-docs/mailboxes.{format}","description":"Mailboxes resources"},{"path":"/api-docs/events.{format}","description":"WebSocket resource"},{"path":"/api-docs/applications.{format}","description":"Stasis application resources"}]} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/asterisk.{format}","apis":[{"path":"/asterisk/config/dynamic/{configClass}/{objectType}/{id}","description":"Asterisk dynamic configuration","operations":[{"httpMethod":"GET","summary":"Retrieve a dynamic configuration object.","nickname":"getObject","responseClass":"List[ConfigTuple]","parameters":[{"name":"configClass","description":"The configuration class containing dynamic configuration objects.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"objectType","description":"The type of configuration object to retrieve.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"id","description":"The unique identifier of the object to retrieve.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"{configClass|objectType|id} not found"}]},{"httpMethod":"PUT","summary":"Create or update a dynamic configuration object.","nickname":"updateObject","responseClass":"List[ConfigTuple]","parameters":[{"name":"configClass","description":"The configuration class containing dynamic configuration objects.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"objectType","description":"The type of configuration object to create or update.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"id","description":"The unique identifier of the object to create or update.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"fields","description":"The body object should have a value that is a list of ConfigTuples, which provide the fields to update. Ex. [ { \"attribute\": \"directmedia\", \"value\": \"false\" } ]","paramType":"body","required":false,"dataType":"containers","allowMultiple":false}],"errorResponses":[{"code":400,"reason":"Bad request body"},{"code":403,"reason":"Could not create or update object"},{"code":404,"reason":"{configClass|objectType} not found"}]},{"httpMethod":"DELETE","summary":"Delete a dynamic configuration object.","nickname":"deleteObject","responseClass":"void","parameters":[{"name":"configClass","description":"The configuration class containing dynamic configuration objects.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"objectType","description":"The type of configuration object to delete.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"id","description":"The unique identifier of the object to delete.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":403,"reason":"Could not delete object"},{"code":404,"reason":"{configClass|objectType|id} not found"}]}]},{"path":"/asterisk/info","description":"Asterisk system information (similar to core show settings)","operations":[{"httpMethod":"GET","summary":"Gets Asterisk system information.","nickname":"getInfo","responseClass":"AsteriskInfo","parameters":[{"name":"only","description":"Filter information returned","paramType":"query","required":false,"allowMultiple":true,"dataType":"string","allowableValues":{"valueType":"LIST","values":["build","system","config","status"]}}]}]},{"path":"/asterisk/ping","description":"Asterisk ping","operations":[{"httpMethod":"GET","summary":"Response pong message.","nickname":"ping","responseClass":"AsteriskPing"}]},{"path":"/asterisk/modules","description":"Asterisk modules","operations":[{"httpMethod":"GET","summary":"List Asterisk modules.","nickname":"listModules","responseClass":"List[Module]"}]},{"path":"/asterisk/modules/{moduleName}","description":"Asterisk module","operations":[{"httpMethod":"GET","summary":"Get Asterisk module information.","nickname":"getModule","responseClass":"Module","parameters":[{"name":"moduleName","description":"Module's name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Module could not be found in running modules."},{"code":409,"reason":"Module information could not be retrieved."}]},{"httpMethod":"POST","summary":"Load an Asterisk module.","nickname":"loadModule","responseClass":"void","parameters":[{"name":"moduleName","description":"Module's name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":409,"reason":"Module could not be loaded."}]},{"httpMethod":"DELETE","summary":"Unload an Asterisk module.","nickname":"unloadModule","responseClass":"void","parameters":[{"name":"moduleName","description":"Module's name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Module not found in running modules."},{"code":409,"reason":"Module could not be unloaded."}]},{"httpMethod":"PUT","summary":"Reload an Asterisk module.","nickname":"reloadModule","responseClass":"void","parameters":[{"name":"moduleName","description":"Module's name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Module not found in running modules."},{"code":409,"reason":"Module could not be reloaded."}]}]},{"path":"/asterisk/logging","description":"Asterisk log channels","operations":[{"httpMethod":"GET","summary":"Gets Asterisk log channel information.","nickname":"listLogChannels","responseClass":"List[LogChannel]"}]},{"path":"/asterisk/logging/{logChannelName}","description":"Asterisk log channel","operations":[{"httpMethod":"POST","summary":"Adds a log channel.","nickname":"addLog","responseClass":"void","parameters":[{"name":"logChannelName","description":"The log channel to add","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"configuration","description":"levels of the log channel","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":400,"reason":"Bad request body"},{"code":409,"reason":"Log channel could not be created."}]},{"httpMethod":"DELETE","summary":"Deletes a log channel.","nickname":"deleteLog","responseClass":"void","parameters":[{"name":"logChannelName","description":"Log channels name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Log channel does not exist."}]}]},{"path":"/asterisk/logging/{logChannelName}/rotate","description":"Asterisk log channel","operations":[{"httpMethod":"PUT","summary":"Rotates a log channel.","nickname":"rotateLog","responseClass":"void","parameters":[{"name":"logChannelName","description":"Log channel's name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Log channel does not exist."}]}]},{"path":"/asterisk/variable","description":"Global variables","operations":[{"httpMethod":"GET","summary":"Get the value of a global variable.","nickname":"getGlobalVar","responseClass":"Variable","parameters":[{"name":"variable","description":"The variable to get","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":400,"reason":"Missing variable parameter."}]},{"httpMethod":"POST","summary":"Set the value of a global variable.","nickname":"setGlobalVar","responseClass":"void","parameters":[{"name":"variable","description":"The variable to set","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"},{"name":"value","description":"The value to set the variable to","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":400,"reason":"Missing variable parameter."}]}]}],"models":{"BuildInfo":{"id":"BuildInfo","description":"Info about how Asterisk was built","properties":{"os":{"required":true,"type":"st<--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/endpoints.{format}","apis":[{"path":"/endpoints","description":"Asterisk endpoints","operations":[{"httpMethod":"GET","summary":"List all endpoints.","nickname":"list","responseClass":"List[Endpoint]"}]},{"path":"/endpoints/sendMessage","description":"Send a message to some technology URI or endpoint.","operations":[{"httpMethod":"PUT","summary":"Send a message to some technology URI or endpoint.","nickname":"sendMessage","responseClass":"void","parameters":[{"name":"to","description":"The endpoint resource or technology specific URI to send the message to. Valid resources are sip, pjsip, and xmpp.","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"},{"name":"from","description":"The endpoint resource or technology specific identity to send this message from. Valid resources are sip, pjsip, and xmpp.","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"},{"name":"body","description":"The body of the message","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"variables","descriptioni":"The \"variables\" key in the body object holds technology specific key/value pairs to append to the message. These can be interpreted and used by the various resource types; for example, pjsip and sip resource types will add the key/value pairs as SIP headers,","paramType":"body","required":false,"dataType":"containers","allowMultiple":false}],"errorResponses":[{"code":400,"reason":"Invalid parameters for sending a message."},{"code":404,"reason":"Endpoint not found"}]}]},{"path":"/endpoints/{tech}","description":"Asterisk endpoints","operations":[{"httpMethod":"GET","summary":"List available endoints for a given endpoint technology.","nickname":"listByTech","responseClass":"List[Endpoint]","parameters":[{"name":"tech","description":"Technology of the endpoints (sip,iax2,...)","paramType":"path","dataType":"string"}],"errorResponses":[{"code":404,"reason":"Endpoints not found"}]}]},{"path":"/endpoints/{tech}/{resource}","description":"Single endpoint","operations":[{"httpMethod":"GET","summary":"Details for an endpoint.","nickname":"get","responseClass":"Endpoint","parameters":[{"name":"tech","description":"Technology of the endpoint","paramType":"path","dataType":"string"},{"name":"resource","description":"ID of the endpoint","paramType":"path","dataType":"string"}],"errorResponses":[{"code":400,"reason":"Invalid parameters for sending a message."},{"code":404,"reason":"Endpoints not found"}]}]},{"path":"/endpoints/{tech}/{resource}/sendMessage","description":"Send a message to some endpoint in a technology.","operations":[{"httpMethod":"PUT","summary":"Send a message to some endpoint in a technology.","nickname":"sendMessageToEndpoint","responseClass":"void","parameters":[{"name":"tech","description":"Technology of the endpoint","paramType":"path","dataType":"string"},{"name":"resource","description":"ID of the endpoint","paramType":"path","dataType":"string"},{"name":"from","description":"The endpoint resource or technology specific identity to send this message from. Valid resources are sip, pjsip, and xmpp.","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"},{"name":"body","description":"The body of the message","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"variables","descriptioni":"The \"variables\" key in the body object holds technology specific key/value pairs to append to the message. These can be interpreted and used by the various resource types; for example, pjsip and sip resource types will add the key/value pairs as SIP headers,","paramType":"body","required":false,"dataType":"containers","allowMultiple":false}],"errorResponses":[{"code":400,"reason":"Invalid parameters for sending a message."},{"code":404,"reason":"Endpoint not found"}]}]}],"models":{"Endpoint":{"id":"Endpoint","description":"An external device that may offer/accept calls to/from Asterisk.\n\nUnlike most resources, which have a single unique identifier, an endpoint is uniquely identified by the technology/resource pair.","properties":{"technology":{"type":"string","description":"Technology of the endpoint","required":true},"resource":{"type":"string","description":"Identifier of the endpoint, specific to the given technology.","required":true},"state":{"type":"string","description":"Endpoint's state","required":false,"allowableValues":{"valueType":"LIST","values":["unknown","offline","online"]}},"channel_ids":{"type":"List[string]","description":"Id's of channels associated with this endpoint","required":true}}},"TextMessageVariable":{"id":"TextMessageVariable","description":"A key/value pair variable in a text message.","properties":{"key":{"type":"string","description":"A unique key identifying the variable.","required":true},"value":{"type":"string","description":"The value of the variable.","required":true}}},"TextMessage":{"id":"TextMessage","description":"A text message.","properties":{"from":{"type":"string","description":"A technology specific URI specifying the source of the message. For sip and pjsip technologies, any SIP URI can be specified. For xmpp, the URI must correspond to the client connection being used to send the message.","required":true},"to":{"type":"string","description":"A technology specific URI specifying the destination of the message. Valid technologies include sip, pjsip, and xmp. The destination of a message should be an endpoint.","required":true},"body":{"type":"string","description":"The text of the message.","required":true},"variables":{"type":"List[TextMessageVariable]","description":"Technology specific key/value pairs associated with the message.","required":false}}}}} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/channels.{format}","requiresModules":["res_stasis_answer","res_stasis_playback","res_stasis_recording","res_stasis_snoop"],"apis":[{"path":"/channels","description":"Active channels","operations":[{"httpMethod":"GET","summary":"List all active channels in Asterisk.","nickname":"list","responseClass":"List[Channel]"},{"httpMethod":"POST","summary":"Create a new channel (originate).","notes":"The new channel is created immediately and a snapshot of it returned. If a Stasis application is provided it will be automatically subscribed to the originated channel for further events and updates.","nickname":"originate","responseClass":"Channel","parameters":[{"name":"endpoint","description":"Endpoint to call.","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"},{"name":"extension","description":"The extension to dial after the endpoint answers. Mutually exclusive with 'app'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"context","description":"The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"priority","description":"The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"long"},{"name":"label","description":"The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"app","description":"The application that is subscribed to the originated channel. When the channel is answered, it will be passed to this Stasis application. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"appArgs","description":"The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"callerId","description":"CallerID to use when dialing the endpoint or extension.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"timeout","description":"Timeout (in seconds) before giving up dialing, or -1 for no timeout.","paramType":"query","required":false,"allowMultiple":false,"dataType":"int","defaultValue":30},{"name":"variables","description":"The \"variables\" key in the body object holds variable key/value pairs to set on the channel on creation. Other keys in the body object are interpreted as query parameters. Ex. { \"endpoint\": \"SIP/Alice\", \"variables\": { \"CALLERID(name)\": \"Alice\" } }","paramType":"body","required":false,"dataType":"containers","allowMultiple":false},{"name":"channelId","description":"The unique id to assign the channel on creation.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"otherChannelId","description":"The unique id to assign the second channel when using local channels.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"originator","description":"The unique id of the channel which is originating this one.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"formats","description":"The format name capability list to use if originator is not specified. Ex. \"ulaw,slin16\". Format names can be found with \"core show codecs\".","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":400,"reason":"Invalid parameters for originating a channel."},{"code":409,"reason":"Channel with given unique ID already exists."}]}]},{"path":"/channels/create","description":"Create a channel and place it in a Stasis app, but do not dial the channel yet.","operations":[{"httpMethod":"POST","summary":"Create channel.","nickname":"create","responseClass":"Channel","parameters":[{"name":"endpoint","description":"Endpoint for channel communication","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"},{"name":"app","description":"Stasis Application to place channel into","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"},{"name":"appArgs","description":"The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"channelId","description":"The unique id to assign the channel on creation.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"otherChannelId","description":"The unique id to assign the second channel when using local channels.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"originator","description":"Unique ID of the calling channel","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"formats","description":"The format name capability list to use if originator is not specified. Ex. \"ulaw,slin16\". Format names can be found with \"core show codecs\".","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":409,"reason":"Channel with given unique ID already exists."}]}]},{"path":"/channels/{channelId}","description":"Active channel","operations":[{"httpMethod":"GET","summary":"Channel details.","nickname":"get","responseClass":"Channel","parameters":[{"name":"channelId","description":"Channel's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Channel not found"}]},{"httpMethod":"POST","summary":"Create a new channel (originate with id).","notes":"The new channel is created immediately and a snapshot of it returned. If a Stasis application is provided it will be automatically subscribed to the originated channel for further events and updates.","nickname":"originateWithId","responseClass":"Channel","parameters":[{"name":"channelId","description":"The unique id to assign the channel on creation.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"endpoint","description":"Endpoint to call.","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"},{"name":"extension","description":"The extension to dial after the endpoint answers. Mutually exclusive with 'app'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"context","description":"The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"priority","description":"The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"long"},{"name":"label","description":"The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"app","description":"The application that is subscribed to the originated channel. When the channel is answered, it will be passed to this Stasis application. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"appArgs","description":"The applicatio<--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/bridges.{format}","requiresModules":["res_stasis_recording","res_stasis_playback"],"apis":[{"path":"/bridges","description":"Active bridges","operations":[{"httpMethod":"GET","summary":"List all active bridges in Asterisk.","nickname":"list","responseClass":"List[Bridge]"},{"httpMethod":"POST","summary":"Create a new bridge.","notes":"This bridge persists until it has been shut down, or Asterisk has been shut down.","nickname":"create","responseClass":"Bridge","parameters":[{"name":"type","description":"Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media, video_sfu).","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"bridgeId","description":"Unique ID to give to the bridge being created.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"name","description":"Name to give to the bridge being created.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"}]}]},{"path":"/bridges/{bridgeId}","description":"Individual bridge","operations":[{"httpMethod":"POST","summary":"Create a new bridge or updates an existing one.","notes":"This bridge persists until it has been shut down, or Asterisk has been shut down.","nickname":"createWithId","responseClass":"Bridge","parameters":[{"name":"type","description":"Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media, video_sfu) to set.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"bridgeId","description":"Unique ID to give to the bridge being created.","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"name","description":"Set the name of the bridge.","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"}]},{"httpMethod":"GET","summary":"Get bridge details.","nickname":"get","responseClass":"Bridge","parameters":[{"name":"bridgeId","description":"Bridge's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Bridge not found"}]},{"httpMethod":"DELETE","summary":"Shut down a bridge.","notes":"If any channels are in this bridge, they will be removed and resume whatever they were doing beforehand.","nickname":"destroy","responseClass":"void","parameters":[{"name":"bridgeId","description":"Bridge's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Bridge not found"}]}]},{"path":"/bridges/{bridgeId}/addChannel","description":"Add a channel to a bridge","operations":[{"httpMethod":"POST","summary":"Add a channel to a bridge.","nickname":"addChannel","responseClass":"void","parameters":[{"name":"bridgeId","description":"Bridge's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"channel","description":"Ids of channels to add to bridge","paramType":"query","required":true,"allowMultiple":true,"dataType":"string"},{"name":"role","description":"Channel's role in the bridge","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"},{"name":"absorbDTMF","description":"Absorb DTMF coming from this channel, preventing it to pass through to the bridge","paramType":"query","required":false,"allowMultiple":false,"dataType":"boolean","defaultValue":false},{"name":"mute","description":"Mute audio from this channel, preventing it to pass through to the bridge","paramType":"query","required":false,"allowMultiple":false,"dataType":"boolean","defaultValue":false}],"errorResponses":[{"code":400,"reason":"Channel not found"},{"code":404,"reason":"Bridge not found"},{"code":409,"reason":"Bridge not in Stasis application; Channel currently recording"},{"code":422,"reason":"Channel not in Stasis application"}]}]},{"path":"/bridges/{bridgeId}/removeChannel","description":"Remove a channel from a bridge","operations":[{"httpMethod":"POST","summary":"Remove a channel from a bridge.","nickname":"removeChannel","responseClass":"void","parameters":[{"name":"bridgeId","description":"Bridge's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"channel","description":"Ids of channels to remove from bridge","paramType":"query","required":true,"allowMultiple":true,"dataType":"string"}],"errorResponses":[{"code":400,"reason":"Channel not found"},{"code":404,"reason":"Bridge not found"},{"code":409,"reason":"Bridge not in Stasis application"},{"code":422,"reason":"Channel not in this bridge"}]}]},{"path":"/bridges/{bridgeId}/videoSource/{channelId}","description":"Set a channel as the video source in a multi-party bridge","operations":[{"httpMethod":"POST","summary":"Set a channel as the video source in a multi-party mixing bridge. This operation has no effect on bridges with two or fewer participants.","nickname":"setVideoSource","responseClass":"void","parameters":[{"name":"bridgeId","description":"Bridge's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"channelId","description":"Channel's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Bridge or Channel not found"},{"code":409,"reason":"Channel not in Stasis application"},{"code":422,"reason":"Channel not in this Bridge"}]}]},{"path":"/bridges/{bridgeId}/videoSource","description":"Removes any explicit video source","operations":[{"httpMethod":"DELETE","summary":"Removes any explicit video source in a multi-party mixing bridge. This operation has no effect on bridges with two or fewer participants. When no explicit video source is set, talk detection will be used to determine the active video stream.","nickname":"clearVideoSource","responseClass":"void","parameters":[{"name":"bridgeId","description":"Bridge's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Bridge not found"}]}]},{"path":"/bridges/{bridgeId}/moh","description":"Play music on hold to a bridge","operations":[{"httpMethod":"POST","summary":"Play music on hold to a bridge or change the MOH class that is playing.","nickname":"startMoh","responseClass":"void","parameters":[{"name":"bridgeId","description":"Bridge's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"mohClass","description":"Channel's id","paramType":"query","required":false,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Bridge not found"},{"code":409,"reason":"Bridge not in Stasis application"}]},{"httpMethod":"DELETE","summary":"Stop playing music on hold to a bridge.","notes":"This will only stop music on hold being played via POST bridges/{bridgeId}/moh.","nickname":"stopMoh","responseClass":"void","parameters":[{"name":"bridgeId","description":"Bridge's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Bridge not found"},{"code":409,"reason":"Bridge not in Stasis application"}]}]},{"path":"/bridges/{bridgeId}/play","description":"Play media to the participants of a bridge","operations":[{"httpMethod":"POST","summary":"Start playback of media on a bridge.","notes":"The media URI may be any of a number of URI's. Currently sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)","nickname":"play","responseClass":"Playback","parameters":[{"name":"bridgeId","description":"Bridge's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"media","description":"Media URIs to play.","paramType":"query","<--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/recordings.{format}","requiresModules":["res_stasis_recording"],"apis":[{"path":"/recordings/stored","description":"Recordings","operations":[{"httpMethod":"GET","summary":"List recordings that are complete.","nickname":"listStored","responseClass":"List[StoredRecording]"}]},{"path":"/recordings/stored/{recordingName}","description":"Individual recording","operations":[{"httpMethod":"GET","summary":"Get a stored recording's details.","nickname":"getStored","responseClass":"StoredRecording","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"}]},{"httpMethod":"DELETE","summary":"Delete a stored recording.","nickname":"deleteStored","responseClass":"void","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"}]}]},{"path":"/recordings/stored/{recordingName}/file","description":"The actual file associated with the stored recording","operations":[{"httpMethod":"GET","summary":"Get the file associated with the stored recording.","nickname":"getStoredFile","responseClass":"binary","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":403,"reason":"The recording file could not be opened"},{"code":404,"reason":"Recording not found"}]}]},{"path":"/recordings/stored/{recordingName}/copy","description":"Copy an individual recording","operations":[{"httpMethod":"POST","summary":"Copy a stored recording.","nickname":"copyStored","responseClass":"StoredRecording","parameters":[{"name":"recordingName","description":"The name of the recording to copy","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"destinationRecordingName","description":"The destination name of the recording","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"},{"code":409,"reason":"A recording with the same name already exists on the system"}]}]},{"path":"/recordings/live/{recordingName}","description":"A recording that is in progress","operations":[{"httpMethod":"GET","summary":"List live recordings.","nickname":"getLive","responseClass":"LiveRecording","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"}]},{"httpMethod":"DELETE","summary":"Stop a live recording and discard it.","nickname":"cancel","responseClass":"void","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"}]}]},{"path":"/recordings/live/{recordingName}/stop","operations":[{"httpMethod":"POST","summary":"Stop a live recording and store it.","nickname":"stop","responseClass":"void","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"}]}]},{"path":"/recordings/live/{recordingName}/pause","operations":[{"httpMethod":"POST","summary":"Pause a live recording.","notes":"Pausing a recording suspends silence detection, which will be restarted when the recording is unpaused. Paused time is not included in the accounting for maxDurationSeconds.","nickname":"pause","responseClass":"void","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"},{"code":409,"reason":"Recording not in session"}]},{"httpMethod":"DELETE","summary":"Unpause a live recording.","nickname":"unpause","responseClass":"void","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"},{"code":409,"reason":"Recording not in session"}]}]},{"path":"/recordings/live/{recordingName}/mute","operations":[{"httpMethod":"POST","summary":"Mute a live recording.","notes":"Muting a recording suspends silence detection, which will be restarted when the recording is unmuted.","nickname":"mute","responseClass":"void","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"},{"code":409,"reason":"Recording not in session"}]},{"httpMethod":"DELETE","summary":"Unmute a live recording.","nickname":"unmute","responseClass":"void","parameters":[{"name":"recordingName","description":"The name of the recording","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Recording not found"},{"code":409,"reason":"Recording not in session"}]}]}],"models":{"StoredRecording":{"id":"StoredRecording","description":"A past recording that may be played back.","properties":{"name":{"required":true,"type":"string"},"format":{"required":true,"type":"string"}}},"LiveRecording":{"id":"LiveRecording","description":"A recording that is in progress","properties":{"name":{"required":true,"type":"string","description":"Base name for the recording"},"format":{"required":true,"type":"string","description":"Recording format (wav, gsm, etc.)"},"target_uri":{"required":true,"type":"string","description":"URI for the channel or bridge being recorded"},"state":{"required":true,"type":"string","allowableValues":{"valueType":"LIST","values":["queued","recording","paused","done","failed","canceled"]}},"duration":{"required":false,"type":"int","description":"Duration in seconds of the recording"},"talking_duration":{"required":false,"type":"int","description":"Duration of talking, in seconds, detected in the recording. This is only available if the recording was initiated with a non-zero maxSilenceSeconds."},"silence_duration":{"required":false,"type":"int","description":"Duration of silence, in seconds, detected in the recording. This is only available if the recording was initiated with a non-zero maxSilenceSeconds."},"cause":{"required":false,"type":"string","description":"Cause for recording failure if failed"}}}}} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/sounds.{format}","apis":[{"path":"/sounds","description":"Sounds","operations":[{"httpMethod":"GET","summary":"List all sounds.","nickname":"list","responseClass":"List[Sound]","parameters":[{"name":"lang","description":"Lookup sound for a specific language.","paramType":"query","dataType":"string","required":false},{"name":"format","description":"Lookup sound in a specific format.","paramType":"query","dataType":"string","required":false,"__note":"core show translation can show translation paths between formats, along with relative costs. so this could be just installed format, or we could follow that for transcoded formats."}]}]},{"path":"/sounds/{soundId}","description":"Individual sound","operations":[{"httpMethod":"GET","summary":"Get a sound's details.","nickname":"get","responseClass":"Sound","parameters":[{"name":"soundId","description":"Sound's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}]}]}],"models":{"FormatLangPair":{"id":"FormatLangPair","description":"Identifies the format and language of a sound file","properties":{"language":{"required":true,"type":"string"},"format":{"required":true,"type":"string"}}},"Sound":{"id":"Sound","description":"A media file that may be played back.","properties":{"id":{"required":true,"description":"Sound's identifier.","type":"string"},"text":{"required":false,"description":"Text description of the sound, usually the words spoken.","type":"string"},"formats":{"required":true,"description":"The formats and languages in which this sound is available.","type":"List[FormatLangPair]"}}}}} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/playbacks.{format}","requiresModules":["res_stasis_playback"],"apis":[{"path":"/playbacks/{playbackId}","description":"Control object for a playback operation.","operations":[{"httpMethod":"GET","summary":"Get a playback's details.","nickname":"get","responseClass":"Playback","parameters":[{"name":"playbackId","description":"Playback's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"The playback cannot be found"}]},{"httpMethod":"DELETE","summary":"Stop a playback.","nickname":"stop","responseClass":"void","parameters":[{"name":"playbackId","description":"Playback's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"The playback cannot be found"}]}]},{"path":"/playbacks/{playbackId}/control","description":"Control object for a playback operation.","operations":[{"httpMethod":"POST","summary":"Control a playback.","nickname":"control","responseClass":"void","parameters":[{"name":"playbackId","description":"Playback's id","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"operation","description":"Operation to perform on the playback.","paramType":"query","required":true,"allowMultiple":false,"dataType":"string","allowableValues":{"valueType":"LIST","values":["restart","pause","unpause","reverse","forward"]}}],"errorResponses":[{"code":400,"reason":"The provided operation parameter was invalid"},{"code":404,"reason":"The playback cannot be found"},{"code":409,"reason":"The operation cannot be performed in the playback's current state"}]}]}],"models":{"Playback":{"id":"Playback","description":"Object representing the playback of media to a channel","properties":{"id":{"type":"string","description":"ID for this playback operation","required":true},"media_uri":{"type":"string","description":"The URI for the media currently being played back.","required":true},"next_media_uri":{"type":"string","description":"If a list of URIs is being played, the next media URI to be played back.","required":false},"target_uri":{"type":"string","description":"URI for the channel or bridge to play the media on","required":true},"language":{"type":"string","description":"For media types that support multiple languages, the language requested for playback."},"state":{"type":"string","description":"Current state of the playback operation.","required":true,"allowableValues":{"valueType":"LIST","values":["queued","playing","continuing","done"]}}}}}} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"Kevin Harwell ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/deviceStates.{format}","requiresModules":["res_stasis_device_state"],"apis":[{"path":"/deviceStates","description":"Device states","operations":[{"httpMethod":"GET","summary":"List all ARI controlled device states.","nickname":"list","responseClass":"List[DeviceState]"}]},{"path":"/deviceStates/{deviceName}","description":"Device state","operations":[{"httpMethod":"GET","summary":"Retrieve the current state of a device.","nickname":"get","responseClass":"DeviceState","parameters":[{"name":"deviceName","description":"Name of the device","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}]},{"httpMethod":"PUT","summary":"Change the state of a device controlled by ARI. (Note - implicitly creates the device state).","nickname":"update","responseClass":"void","parameters":[{"name":"deviceName","description":"Name of the device","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"deviceState","description":"Device state value","paramType":"query","required":true,"allowMultiple":false,"dataType":"string","allowableValues":{"valueType":"LIST","values":["NOT_INUSE","INUSE","BUSY","INVALID","UNAVAILABLE","RINGING","RINGINUSE","ONHOLD"]}}],"errorResponses":[{"code":404,"reason":"Device name is missing"},{"code":409,"reason":"Uncontrolled device specified"}]},{"httpMethod":"DELETE","summary":"Destroy a device-state controlled by ARI.","nickname":"delete","responseClass":"void","parameters":[{"name":"deviceName","description":"Name of the device","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Device name is missing"},{"code":409,"reason":"Uncontrolled device specified"}]}]}],"models":{"DeviceState":{"id":"DeviceState","description":"Represents the state of a device.","properties":{"name":{"type":"string","description":"Name of the device.","required":true},"state":{"type":"string","description":"Device's state","required":true,"allowableValues":{"valueType":"LIST","values":["UNKNOWN","NOT_INUSE","INUSE","BUSY","INVALID","UNAVAILABLE","RINGING","RINGINUSE","ONHOLD"]}}}}}} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2013, Digium, Inc.","_author":"Jonathan Rose ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/mailboxes.{format}","requiresModules":["res_stasis_mailbox"],"apis":[{"path":"/mailboxes","description":"Mailboxes","operations":[{"httpMethod":"GET","summary":"List all mailboxes.","nickname":"list","responseClass":"List[Mailbox]"}]},{"path":"/mailboxes/{mailboxName}","description":"Mailbox state","operations":[{"httpMethod":"GET","summary":"Retrieve the current state of a mailbox.","nickname":"get","responseClass":"Mailbox","parameters":[{"name":"mailboxName","description":"Name of the mailbox","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Mailbox not found"}]},{"httpMethod":"PUT","summary":"Change the state of a mailbox. (Note - implicitly creates the mailbox).","nickname":"update","responseClass":"void","parameters":[{"name":"mailboxName","description":"Name of the mailbox","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"oldMessages","description":"Count of old messages in the mailbox","paramType":"query","required":true,"allowMultiple":false,"dataType":"int"},{"name":"newMessages","description":"Count of new messages in the mailbox","paramType":"query","required":true,"allowMultiple":false,"dataType":"int"}],"errorResponses":[{"code":404,"reason":"Mailbox not found"}]},{"httpMethod":"DELETE","summary":"Destroy a mailbox.","nickname":"delete","responseClass":"void","parameters":[{"name":"mailboxName","description":"Name of the mailbox","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Mailbox not found"}]}]}],"models":{"Mailbox":{"id":"Mailbox","description":"Represents the state of a mailbox.","properties":{"name":{"type":"string","description":"Name of the mailbox.","required":true},"old_messages":{"type":"int","description":"Count of old messages in the mailbox.","required":true},"new_messages":{"type":"int","description":"Count of new messages in the mailbox.","required":true}}}}} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2012 - 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.2","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/events.{format}","requiresModules":["res_http_websocket"],"apis":[{"path":"/events","description":"Events from Asterisk to applications","operations":[{"httpMethod":"GET","upgrade":"websocket","websocketProtocol":"ari","summary":"WebSocket connection for events.","nickname":"eventWebsocket","responseClass":"Message","parameters":[{"name":"app","description":"Applications to subscribe to.","paramType":"query","required":true,"allowMultiple":true,"dataType":"string"},{"name":"subscribeAll","description":"Subscribe to all Asterisk events. If provided, the applications listed will be subscribed to all events, effectively disabling the application specific subscriptions. Default is 'false'.","paramType":"query","required":false,"allowMultiple":false,"dataType":"boolean"}]}]},{"path":"/events/user/{eventName}","description":"Stasis application user events","operations":[{"httpMethod":"POST","summary":"Generate a user event.","nickname":"userEvent","responseClass":"void","parameters":[{"name":"eventName","description":"Event name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"application","description":"The name of the application that will receive this event","paramType":"query","required":true,"allowMultiple":false,"dataType":"string"},{"name":"source","description":"URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}/{resource}, deviceState:{deviceName}","paramType":"query","required":false,"allowMultiple":true,"dataType":"string"},{"name":"variables","description":"The \"variables\" key in the body object holds custom key/value pairs to add to the user event. Ex. { \"variables\": { \"key\": \"value\" } }","paramType":"body","required":false,"allowMultiple":false,"dataType":"containers"}],"errorResponses":[{"code":404,"reason":"Application does not exist."},{"code":422,"reason":"Event source not found."},{"code":400,"reason":"Invalid even tsource URI or userevent data."}]}]}],"models":{"Message":{"id":"Message","description":"Base type for errors and events","discriminator":"type","properties":{"type":{"type":"string","required":true,"description":"Indicates the type of this message."},"asterisk_id":{"type":"string","required":false,"description":"The unique ID for the Asterisk instance that raised this event."}},"subTypes":["MissingParams","Event"]},"MissingParams":{"id":"MissingParams","description":"Error event sent when required params are missing.","properties":{"params":{"required":true,"type":"List[string]","description":"A list of the missing parameters"}}},"Event":{"id":"Event","description":"Base type for asynchronous events from Asterisk.","properties":{"application":{"type":"string","description":"Name of the application receiving the event.","required":true},"timestamp":{"type":"Date","description":"Time at which this event was created.","required":true}},"subTypes":["DeviceStateChanged","PlaybackStarted","PlaybackContinuing","PlaybackFinished","RecordingStarted","RecordingFinished","RecordingFailed","ApplicationMoveFailed","ApplicationReplaced","BridgeCreated","BridgeDestroyed","BridgeMerged","BridgeBlindTransfer","BridgeAttendedTransfer","BridgeVideoSourceChanged","ChannelCreated","ChannelDestroyed","ChannelEnteredBridge","ChannelLeftBridge","ChannelStateChange","ChannelDtmfReceived","ChannelDialplan","ChannelCallerId","ChannelUserevent","ChannelHangupRequest","ChannelVarset","ChannelTalkingStarted","ChannelTalkingFinished","ChannelHold","ChannelUnhold","ContactStatusChange","EndpointStateChange","Dial","StasisEnd","StasisStart","TextMessageReceived","ChannelConnectedLine","PeerStatusChange"]},"ContactInfo":{"id":"ContactInfo","description":"Detailed information about a contact on an endpoint.","properties":{"uri":{"type":"string","description":"The location of the contact.","required":true},"contact_status":{"type":"string","description":"The current status of the contact.","required":true,"allowableValues":{"valueType":"LIST","values":["Unreachable","Reachable","Unknown","NonQualified","Removed"]}},"aor":{"type":"string","description":"The Address of Record this contact belongs to.","required":true},"roundtrip_usec":{"type":"string","description":"Current round trip time, in microseconds, for the contact.","required":false}}},"Peer":{"id":"Peer","description":"Detailed information about a remote peer that communicates with Asterisk.","properties":{"peer_status":{"type":"string","description":"The current state of the peer. Note that the values of the status are dependent on the underlying peer technology.","required":true},"cause":{"type":"string","description":"An optional reason associated with the change in peer_status.","required":false},"address":{"type":"string","description":"The IP address of the peer.","required":false},"port":{"type":"string","description":"The port of the peer.","required":false},"time":{"type":"string","description":"The last known time the peer was contacted.","required":false}}},"DeviceStateChanged":{"id":"DeviceStateChanged","description":"Notification that a device state has changed.","properties":{"device_state":{"type":"DeviceState","description":"Device state object","required":true}}},"PlaybackStarted":{"id":"PlaybackStarted","description":"Event showing the start of a media playback operation.","properties":{"playback":{"type":"Playback","description":"Playback control object","required":true}}},"PlaybackContinuing":{"id":"PlaybackContinuing","description":"Event showing the continuation of a media playback operation from one media URI to the next in the list.","properties":{"playback":{"type":"Playback","description":"Playback control object","required":true}}},"PlaybackFinished":{"id":"PlaybackFinished","description":"Event showing the completion of a media playback operation.","properties":{"playback":{"type":"Playback","description":"Playback control object","required":true}}},"RecordingStarted":{"id":"RecordingStarted","description":"Event showing the start of a recording operation.","properties":{"recording":{"type":"LiveRecording","description":"Recording control object","required":true}}},"RecordingFinished":{"id":"RecordingFinished","description":"Event showing the completion of a recording operation.","properties":{"recording":{"type":"LiveRecording","description":"Recording control object","required":true}}},"RecordingFailed":{"id":"RecordingFailed","description":"Event showing failure of a recording operation.","properties":{"recording":{"type":"LiveRecording","description":"Recording control object","required":true}}},"ApplicationMoveFailed":{"id":"ApplicationMoveFailed","description":"Notification that trying to move a channel to another Stasis application failed.","properties":{"channel":{"required":true,"type":"Channel"},"destination":{"required":true,"type":"string"},"args":{"required":true,"type":"List[string]","description":"Arguments to the application"}}},"ApplicationReplaced":{"id":"ApplicationReplaced","description":"Notification that another WebSocket has taken over for an application.\n\nAn application may only be subscribed to by a single WebSocket at a time. If multiple WebSockets attempt to subscribe to the same application, the newer WebSocket wins, and the older one receives this event.","properties":{}},"BridgeCreated":{"id":"BridgeCreated","description":"Notification that a bridge has been created.","properties":{"bridge":{"required":true,"type":"Bridge"}}},"BridgeDestroyed":{"id":"BridgeDestroyed","description":"Notification that a bridge has been destroyed.","properties":{"bridge":{"required":true,"type":"Bridge"}}},"BridgeMerged":{"id":"BridgeMerged","description":"Notification that one bridge has merged into another.","properties":{"bridge":{"required":true,"type":"Bridge"},"bridge_from":{"required":true,"type":"Bridge"}}},"BridgeVideoSourceChanged":{"id":"<--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Connection: keep-alive Accept: */* Accept-Encoding: gzip, deflate Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"_copyright":"Copyright (C) 2013, Digium, Inc.","_author":"David M. Lee, II ","_svn_revision":"$Revision$","apiVersion":"2.0.0","swaggerVersion":"1.1","basePath":"http://localhost:8088/ari","resourcePath":"/api-docs/applications.{format}","apis":[{"path":"/applications","description":"Stasis applications","operations":[{"httpMethod":"GET","summary":"List all applications.","nickname":"list","responseClass":"List[Application]"}]},{"path":"/applications/{applicationName}","description":"Stasis application","operations":[{"httpMethod":"GET","summary":"Get details of an application.","nickname":"get","responseClass":"Application","parameters":[{"name":"applicationName","description":"Application's name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"}],"errorResponses":[{"code":404,"reason":"Application does not exist."}]}]},{"path":"/applications/{applicationName}/subscription","description":"Stasis application","operations":[{"httpMethod":"POST","summary":"Subscribe an application to a event source.","notes":"Returns the state of the application after the subscriptions have changed","nickname":"subscribe","responseClass":"Application","parameters":[{"name":"applicationName","description":"Application's name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"eventSource","description":"URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}[/{resource}], deviceState:{deviceName}","paramType":"query","required":true,"allowMultiple":true,"dataType":"string"}],"errorResponses":[{"code":400,"reason":"Missing parameter."},{"code":404,"reason":"Application does not exist."},{"code":422,"reason":"Event source does not exist."}]},{"httpMethod":"DELETE","summary":"Unsubscribe an application from an event source.","notes":"Returns the state of the application after the subscriptions have changed","nickname":"unsubscribe","responseClass":"Application","parameters":[{"name":"applicationName","description":"Application's name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"eventSource","description":"URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}[/{resource}], deviceState:{deviceName}","paramType":"query","required":true,"allowMultiple":true,"dataType":"string"}],"errorResponses":[{"code":400,"reason":"Missing parameter; event source scheme not recognized."},{"code":404,"reason":"Application does not exist."},{"code":409,"reason":"Application not subscribed to event source."},{"code":422,"reason":"Event source does not exist."}]}]},{"path":"/applications/{applicationName}/eventFilter","description":"Stasis application","operations":[{"httpMethod":"PUT","summary":"Filter application events types.","notes":"Allowed and/or disallowed event type filtering can be done. The body (parameter) should specify a JSON key/value object that describes the type of event filtering needed. One, or both of the following keys can be designated:

\"allowed\" - Specifies an allowed list of event types
\"disallowed\" - Specifies a disallowed list of event types

Further, each of those key's value should be a JSON array that holds zero, or more JSON key/value objects. Each of these objects must contain the following key with an associated value:

\"type\" - The type name of the event to filter

The value must be the string name (case sensitive) of the event type that needs filtering. For example:

{ \"allowed\": [ { \"type\": \"StasisStart\" }, { \"type\": \"StasisEnd\" } ] }

As this specifies only an allowed list, then only those two event type messages are sent to the application. No other event messages are sent.

The following rules apply:

* If the body is empty, both the allowed and disallowed filters are set empty.
* If both list types are given then both are set to their respective values (note, specifying an empty array for a given type sets that type to empty).
* If only one list type is given then only that type is set. The other type is not updated.
* An empty \"allowed\" list means all events are allowed.
* An empty \"disallowed\" list means no events are disallowed.
* Disallowed events take precedence over allowed events if the event type is specified in both lists.","nickname":"filter","responseClass":"Application","parameters":[{"name":"applicationName","description":"Application's name","paramType":"path","required":true,"allowMultiple":false,"dataType":"string"},{"name":"filter","description":"Specify which event types to allow/disallow","paramType":"body","required":false,"dataType":"object","allowMultiple":false}],"errorResponses":[{"code":400,"reason":"Bad request."},{"code":404,"reason":"Application does not exist."}]}]}],"models":{"Application":{"id":"Application","description":"Details of a Stasis application","properties":{"name":{"type":"string","description":"Name of this application","required":true},"channel_ids":{"type":"List[string]","description":"Id's for channels subscribed to.","required":true},"bridge_ids":{"type":"List[string]","description":"Id's for bridges subscribed to.","required":true},"endpoint_ids":{"type":"List[string]","description":"{tech}/{resource} for endpoints subscribed to.","required":true},"device_names":{"type":"List[string]","description":"Names of the devices subscribed to.","required":true},"events_allowed":{"type":"List[object]","description":"Event types sent to the application.","required":true},"events_disallowed":{"type":"List[object]","description":"Event types not sent to the application.","required":true}}}}} <--- ARI request received from: 127.0.0.1:46582 ---> Upgrade: websocket Connection: Upgrade Host: localhost:8088 Origin: http://localhost:8088 Sec-WebSocket-Key: E8tEoWKIJHtDzJJhDWiUnw== Sec-WebSocket-Version: 13 Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= app: ari-test body: Activating Stasis app 'ari-test' == WebSocket connection from '127.0.0.1:46582' for protocol '' accepted using version '13' == Using SIP RTP CoS mark 5 > 0x7fd18000b4a0 -- Strict RTP learning after remote address set to: 192.168.0.40:46844 -- Executing [111@ari-test:1] NoOp("SIP/1000-0000000d", "") in new stack -- Executing [111@ari-test:2] Progress("SIP/1000-0000000d", "") in new stack -- Executing [111@ari-test:3] Stasis("SIP/1000-0000000d", "ari-test,incoming,111,1000") in new stack <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"StasisStart","timestamp":"2020-04-23T20:56:40.797+0900","args":["incoming","111","1000"],"channel":{"id":"1587643000.18","name":"SIP/1000-0000000d","state":"Ring","caller":{"name":"1000","number":"1000"},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"111","priority":3,"app_name":"Stasis","app_data":"ari-test,incoming,111,1000"},"creationtime":"2020-04-23T20:56:40.796+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Content-Length: 0 Accept-Encoding: gzip, deflate Accept: */* User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 Connection: keep-alive Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= originator: Channel(1587643000.18) app: ari-test endpoint: SIP/3000 appArgs: outgoing body: == Using SIP RTP CoS mark 5 <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Down","caller":{"name":"","number":""},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"","app_data":""},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"ChannelDialplan","timestamp":"2020-04-23T20:56:40.799+0900","dialplan_app":"Stasis","dialplan_app_data":"ari-test,outgoing","channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Down","caller":{"name":"","number":""},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"variable":"STASISSTATUS","value":"","type":"ChannelVarset","timestamp":"2020-04-23T20:56:40.799+0900","channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Down","caller":{"name":"","number":""},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"StasisStart","timestamp":"2020-04-23T20:56:40.799+0900","args":["outgoing"],"channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Down","caller":{"name":"","number":""},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Content-Length: 0 Accept-Encoding: gzip, deflate Accept: */* User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 Connection: keep-alive Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= type: mixing body: <--- Sending ARI response to 127.0.0.1:46578 ---> 200 OK Content-type: application/json {"id":"9fd4655d-1b6a-4830-81f4-66f070e7d7c9","technology":"simple_bridge","bridge_type":"mixing","bridge_class":"stasis","creator":"Stasis","name":"","channels":[],"creationtime":"2020-04-23T20:56:40.801+0900","video_mode":"talker"} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Content-Length: 0 Accept-Encoding: gzip, deflate Accept: */* User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 Connection: keep-alive Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= channel: 1587643000.18,1587643000.19 body: -- Channel SIP/1000-0000000d joined 'simple_bridge' stasis-bridge <9fd4655d-1b6a-4830-81f4-66f070e7d7c9> <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"ChannelEnteredBridge","timestamp":"2020-04-23T20:56:40.804+0900","bridge":{"id":"9fd4655d-1b6a-4830-81f4-66f070e7d7c9","technology":"simple_bridge","bridge_type":"mixing","bridge_class":"stasis","creator":"Stasis","name":"","channels":["1587643000.18"],"creationtime":"2020-04-23T20:56:40.801+0900","video_mode":"talker"},"channel":{"id":"1587643000.18","name":"SIP/1000-0000000d","state":"Ring","caller":{"name":"1000","number":"1000"},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"111","priority":3,"app_name":"Stasis","app_data":"ari-test,incoming,111,1000"},"creationtime":"2020-04-23T20:56:40.796+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} > 0x7fd18000b4a0 -- Strict RTP switching to RTP target address 192.168.0.40:46844 as source -- Channel SIP/3000-0000000e joined 'simple_bridge' stasis-bridge <9fd4655d-1b6a-4830-81f4-66f070e7d7c9> <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"ChannelEnteredBridge","timestamp":"2020-04-23T20:56:41.003+0900","bridge":{"id":"9fd4655d-1b6a-4830-81f4-66f070e7d7c9","technology":"simple_bridge","bridge_type":"mixing","bridge_class":"stasis","creator":"Stasis","name":"","channels":["1587643000.18","1587643000.19"],"creationtime":"2020-04-23T20:56:40.801+0900","video_mode":"talker"},"channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Down","caller":{"name":"","number":""},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI response to 127.0.0.1:46578 ---> 204 No Content <--- Sending ARI event to 127.0.0.1:46582 ---> {"variable":"BRIDGEPEER","value":"SIP/3000-0000000e","type":"ChannelVarset","timestamp":"2020-04-23T20:56:41.003+0900","channel":{"id":"1587643000.18","name":"SIP/1000-0000000d","state":"Ring","caller":{"name":"1000","number":"1000"},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"111","priority":3,"app_name":"Stasis","app_data":"ari-test,incoming,111,1000"},"creationtime":"2020-04-23T20:56:40.796+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"variable":"BRIDGEPVTCALLID","value":"5b8198f4154230d7531870e619cdb6fc@192.168.0.44:5060","type":"ChannelVarset","timestamp":"2020-04-23T20:56:41.003+0900","channel":{"id":"1587643000.18","name":"SIP/1000-0000000d","state":"Ring","caller":{"name":"1000","number":"1000"},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"111","priority":3,"app_name":"Stasis","app_data":"ari-test,incoming,111,1000"},"creationtime":"2020-04-23T20:56:40.796+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"variable":"BRIDGEPEER","value":"SIP/1000-0000000d","type":"ChannelVarset","timestamp":"2020-04-23T20:56:41.003+0900","channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Down","caller":{"name":"","number":""},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"variable":"BRIDGEPVTCALLID","value":"NDY5Y2EzN2Q5NjViZjAyNDI3MjVmMjI2OWUwNjQ3N2E.","type":"ChannelVarset","timestamp":"2020-04-23T20:56:41.003+0900","channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Down","caller":{"name":"","number":""},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"ChannelConnectedLine","timestamp":"2020-04-23T20:56:41.003+0900","channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Down","caller":{"name":"","number":""},"connected":{"name":"1000","number":"1000"},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Content-Length: 0 Accept-Encoding: gzip, deflate Accept: */* User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 Connection: keep-alive Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= caller: 1587643000.18 body: <--- Sending ARI response to 127.0.0.1:46578 ---> 204 No Content <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"Dial","timestamp":"2020-04-23T20:56:41.005+0900","dialstatus":"","forward":"","dialstring":"3000","peer":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Down","caller":{"name":"","number":""},"connected":{"name":"1000","number":"1000"},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"ChannelStateChange","timestamp":"2020-04-23T20:56:41.378+0900","channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Ringing","caller":{"name":"","number":""},"connected":{"name":"1000","number":"1000"},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"Dial","timestamp":"2020-04-23T20:56:41.378+0900","dialstatus":"RINGING","forward":"","dialstring":"","peer":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Ringing","caller":{"name":"","number":""},"connected":{"name":"1000","number":"1000"},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} > 0x7fd18000b4a0 -- Strict RTP learning complete - Locking on source address 192.168.0.40:46844 -- Got SIP response 486 "Busy Here" back from 192.168.0.63:38838 <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"Dial","timestamp":"2020-04-23T20:56:48.114+0900","dialstatus":"BUSY","forward":"","dialstring":"","peer":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Ringing","caller":{"name":"","number":""},"connected":{"name":"1000","number":"1000"},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} -- Channel SIP/1000-0000000d left 'simple_bridge' stasis-bridge <9fd4655d-1b6a-4830-81f4-66f070e7d7c9> <--- Sending ARI event to 127.0.0.1:46582 ---> {"variable":"BRIDGEPEER","value":"","type":"ChannelVarset","timestamp":"2020-04-23T20:56:48.114+0900","channel":{"id":"1587643000.18","name":"SIP/1000-0000000d","state":"Ring","caller":{"name":"1000","number":"1000"},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"111","priority":3,"app_name":"Stasis","app_data":"ari-test,incoming,111,1000"},"creationtime":"2020-04-23T20:56:40.796+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"variable":"BRIDGEPVTCALLID","value":"","type":"ChannelVarset","timestamp":"2020-04-23T20:56:48.114+0900","channel":{"id":"1587643000.18","name":"SIP/1000-0000000d","state":"Ring","caller":{"name":"1000","number":"1000"},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"111","priority":3,"app_name":"Stasis","app_data":"ari-test,incoming,111,1000"},"creationtime":"2020-04-23T20:56:40.796+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"ChannelLeftBridge","timestamp":"2020-04-23T20:56:48.114+0900","bridge":{"id":"9fd4655d-1b6a-4830-81f4-66f070e7d7c9","technology":"simple_bridge","bridge_type":"mixing","bridge_class":"stasis","creator":"Stasis","name":"","channels":["1587643000.19"],"creationtime":"2020-04-23T20:56:40.801+0900","video_mode":"talker"},"channel":{"id":"1587643000.18","name":"SIP/1000-0000000d","state":"Ring","caller":{"name":"1000","number":"1000"},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"111","priority":3,"app_name":"Stasis","app_data":"ari-test,incoming,111,1000"},"creationtime":"2020-04-23T20:56:40.796+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"StasisEnd","timestamp":"2020-04-23T20:56:48.114+0900","channel":{"id":"1587643000.18","name":"SIP/1000-0000000d","state":"Ring","caller":{"name":"1000","number":"1000"},"connected":{"name":"","number":""},"accountcode":"","dialplan":{"context":"ari-test","exten":"111","priority":3,"app_name":"Stasis","app_data":"ari-test,incoming,111,1000"},"creationtime":"2020-04-23T20:56:40.796+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- ARI request received from: 127.0.0.1:46578 ---> Host: localhost:8088 Content-Length: 0 Accept-Encoding: gzip, deflate Accept: */* User-Agent: python-requests/2.6.0 CPython/2.7.5 Linux/3.10.0-1062.1.2.el7.x86_64 Connection: keep-alive Authorization: Basic YXN0ZXJpc2s6YXN0ZXJpc2s= body: <--- Sending ARI response to 127.0.0.1:46578 ---> 204 No Content <--- Sending ARI event to 127.0.0.1:46582 ---> {"variable":"BRIDGEPEER","value":"","type":"ChannelVarset","timestamp":"2020-04-23T20:56:48.117+0900","channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Ringing","caller":{"name":"","number":""},"connected":{"name":"1000","number":"1000"},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} -- Channel SIP/3000-0000000e left 'simple_bridge' stasis-bridge <9fd4655d-1b6a-4830-81f4-66f070e7d7c9> <--- Sending ARI event to 127.0.0.1:46582 ---> {"variable":"BRIDGEPVTCALLID","value":"","type":"ChannelVarset","timestamp":"2020-04-23T20:56:48.117+0900","channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Ringing","caller":{"name":"","number":""},"connected":{"name":"1000","number":"1000"},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} <--- Sending ARI event to 127.0.0.1:46582 ---> {"type":"ChannelLeftBridge","timestamp":"2020-04-23T20:56:48.117+0900","bridge":{"id":"9fd4655d-1b6a-4830-81f4-66f070e7d7c9","technology":"simple_bridge","bridge_type":"mixing","bridge_class":"stasis","creator":"Stasis","name":"","channels":[],"creationtime":"2020-04-23T20:56:40.801+0900","video_mode":"talker"},"channel":{"id":"1587643000.19","name":"SIP/3000-0000000e","state":"Ringing","caller":{"name":"","number":""},"connected":{"name":"1000","number":"1000"},"accountcode":"","dialplan":{"context":"ari-test","exten":"","priority":1,"app_name":"Stasis","app_data":"ari-test,outgoing"},"creationtime":"2020-04-23T20:56:40.799+0900","language":"en"},"asterisk_id":"00:0c:29:f4:dd:80","application":"ari-test"} -- Channel SIP/3000-0000000e joined 'holding_bridge' stasis-bridge [Apr 23 20:57:01] NOTICE[3329]: chan_sip.c:28706 handle_request_subscribe: Received SIP subscribe for peer without mailbox: 1000 Deactivating Stasis app 'ari-test' == WebSocket connection from '127.0.0.1:46582' closed