{ "_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": "BridgeVideoSourceChanged", "description": "Notification that the source of video in a bridge has changed.", "properties": { "bridge": { "required": true, "type": "Bridge" }, "old_video_source_id": { "required": false, "type": "string" } } }, "BridgeBlindTransfer": { "id": "BridgeBlindTransfer", "description": "Notification that a blind transfer has occurred.", "properties": { "channel": { "description": "The channel performing the blind transfer", "required": true, "type": "Channel" }, "replace_channel": { "description": "The channel that is replacing transferer when the transferee(s) can not be transferred directly", "required": false, "type": "Channel" }, "transferee": { "description": "The channel that is being transferred", "required": false, "type": "Channel" }, "exten": { "description": "The extension transferred to", "required": true, "type": "string" }, "context": { "description": "The context transferred to", "required": true, "type": "string" }, "result": { "description": "The result of the transfer attempt", "required": true, "type": "string" }, "is_external": { "description": "Whether the transfer was externally initiated or not", "required": true, "type": "boolean" }, "bridge": { "description": "The bridge being transferred", "type": "Bridge" } } }, "BridgeAttendedTransfer": { "id": "BridgeAttendedTransfer", "description": "Notification that an attended transfer has occurred.", "properties": { "transferer_first_leg": { "description": "First leg of the transferer", "required": true, "type": "Channel" }, "transferer_second_leg": { "description": "Second leg of the transferer", "required": true, "type": "Channel" }, "replace_channel": { "description": "The channel that is replacing transferer_first_leg in the swap", "required": false, "type": "Channel" }, "transferee": { "description": "The channel that is being transferred", "required": false, "type": "Channel" }, "transfer_target": { "description": "The channel that is being transferred to", "required": false, "type": "Channel" }, "result": { "description": "The result of the transfer attempt", "required": true, "type": "string" }, "is_external": { "description": "Whether the transfer was externally initiated or not", "required": true, "type": "boolean" }, "transferer_first_leg_bridge": { "description": "Bridge the transferer first leg is in", "type": "Bridge" }, "transferer_second_leg_bridge": { "description": "Bridge the transferer second leg is in", "type": "Bridge" }, "destination_type": { "description": "How the transfer was accomplished", "required": true, "type": "string" }, "destination_bridge": { "description": "Bridge that survived the merge result", "type": "string" }, "destination_application": { "description": "Application that has been transferred into", "type": "string" }, "destination_link_first_leg": { "description": "First leg of a link transfer result", "type": "Channel" }, "destination_link_second_leg": { "description": "Second leg of a link transfer result", "type": "Channel" }, "destination_threeway_channel": { "description": "Transferer channel that survived the threeway result", "type": "Channel" }, "destination_threeway_bridge": { "description": "Bridge that survived the threeway result", "type": "Bridge" } } }, "ChannelCreated": { "id": "ChannelCreated", "description": "Notification that a channel has been created.", "properties": { "channel": { "required": true, "type": "Channel" } } }, "ChannelDestroyed": { "id": "ChannelDestroyed", "description": "Notification that a channel has been destroyed.", "properties": { "cause": { "required": true, "description": "Integer representation of the cause of the hangup", "type": "int" }, "cause_txt": { "required": true, "description": "Text representation of the cause of the hangup", "type": "string" }, "channel": { "required": true, "type": "Channel" } } }, "ChannelEnteredBridge": { "id": "ChannelEnteredBridge", "description": "Notification that a channel has entered a bridge.", "properties": { "bridge": { "required": true, "type": "Bridge" }, "channel": { "type": "Channel" } } }, "ChannelLeftBridge": { "id": "ChannelLeftBridge", "description": "Notification that a channel has left a bridge.", "properties": { "bridge": { "required": true, "type": "Bridge" }, "channel": { "required": true, "type": "Channel" } } }, "ChannelStateChange": { "id": "ChannelStateChange", "description": "Notification of a channel's state change.", "properties": { "channel": { "required": true, "type": "Channel" } } }, "ChannelDtmfReceived": { "id": "ChannelDtmfReceived", "description": "DTMF received on a channel.\n\nThis event is sent when the DTMF ends. There is no notification about the start of DTMF", "properties": { "digit": { "required": true, "type": "string", "description": "DTMF digit received (0-9, A-E, # or *)" }, "duration_ms": { "required": true, "type": "int", "description": "Number of milliseconds DTMF was received" }, "channel": { "required": true, "type": "Channel", "description": "The channel on which DTMF was received" } } }, "ChannelDialplan": { "id": "ChannelDialplan", "description": "Channel changed location in the dialplan.", "properties": { "channel": { "required": true, "type": "Channel", "description": "The channel that changed dialplan location." }, "dialplan_app": { "required": true, "type": "string", "description": "The application about to be executed." }, "dialplan_app_data": { "required": true, "type": "string", "description": "The data to be passed to the application." } } }, "ChannelCallerId": { "id": "ChannelCallerId", "description": "Channel changed Caller ID.", "properties": { "caller_presentation": { "required": true, "type": "int", "description": "The integer representation of the Caller Presentation value." }, "caller_presentation_txt": { "required": true, "type": "string", "description": "The text representation of the Caller Presentation value." }, "channel": { "required": true, "type": "Channel", "description": "The channel that changed Caller ID." } } }, "ChannelUserevent": { "id": "ChannelUserevent", "description": "User-generated event with additional user-defined fields in the object.", "properties": { "eventname": { "required": true, "type": "string", "description": "The name of the user event." }, "channel": { "required": false, "type": "Channel", "description": "A channel that is signaled with the user event." }, "bridge": { "required": false, "type": "Bridge", "description": "A bridge that is signaled with the user event." }, "endpoint": { "required": false, "type": "Endpoint", "description": "A endpoint that is signaled with the user event." }, "userevent": { "required": true, "type": "object", "description": "Custom Userevent data" } } }, "ChannelHangupRequest": { "id": "ChannelHangupRequest", "description": "A hangup was requested on the channel.", "properties": { "cause": { "type": "int", "description": "Integer representation of the cause of the hangup." }, "soft": { "type": "boolean", "description": "Whether the hangup request was a soft hangup request." }, "channel": { "required": true, "type": "Channel", "description": "The channel on which the hangup was requested." } } }, "ChannelVarset": { "id": "ChannelVarset", "description": "Channel variable changed.", "properties": { "variable": { "required": true, "type": "string", "description": "The variable that changed." }, "value": { "required": true, "type": "string", "description": "The new value of the variable." }, "channel": { "required": false, "type": "Channel", "description": "The channel on which the variable was set.\n\nIf missing, the variable is a global variable." } } }, "ChannelHold": { "id": "ChannelHold", "description": "A channel initiated a media hold.", "properties": { "channel": { "required": true, "type": "Channel", "description": "The channel that initiated the hold event." }, "musicclass": { "required": false, "type": "string", "description": "The music on hold class that the initiator requested." } } }, "ChannelUnhold": { "id": "ChannelUnhold", "description": "A channel initiated a media unhold.", "properties": { "channel": { "required": true, "type": "Channel", "description": "The channel that initiated the unhold event." } } }, "ChannelTalkingStarted": { "id": "ChannelTalkingStarted", "description": "Talking was detected on the channel.", "properties": { "channel": { "required": true, "type": "Channel", "description": "The channel on which talking started." } } }, "ChannelTalkingFinished": { "id": "ChannelTalkingFinished", "description": "Talking is no longer detected on the channel.", "properties": { "channel": { "required": true, "type": "Channel", "description": "The channel on which talking completed." }, "duration": { "required": true, "type": "int", "description": "The length of time, in milliseconds, that talking was detected on the channel" } } }, "ContactStatusChange": { "id": "ContactStatusChange", "description": "The state of a contact on an endpoint has changed.", "properties": { "endpoint": { "required": true, "type": "Endpoint" }, "contact_info": { "required": true, "type": "ContactInfo" } } }, "PeerStatusChange": { "id": "PeerStatusChange", "description": "The state of a peer associated with an endpoint has changed.", "properties": { "endpoint": { "required": true, "type": "Endpoint" }, "peer": { "required": true, "type": "Peer" } } }, "EndpointStateChange": { "id": "EndpointStateChange", "description": "Endpoint state changed.", "properties": { "endpoint": { "required": true, "type": "Endpoint" } } }, "Dial": { "id": "Dial", "description": "Dialing state has changed.", "properties": { "caller": { "required": false, "type": "Channel", "description": "The calling channel." }, "peer": { "required": true, "type": "Channel", "description": "The dialed channel." }, "forward": { "required": false, "type": "string", "description": "Forwarding target requested by the original dialed channel." }, "forwarded": { "required": false, "type": "Channel", "description": "Channel that the caller has been forwarded to." }, "dialstring": { "required": false, "type": "string", "description": "The dial string for calling the peer channel." }, "dialstatus": { "required": true, "type": "string", "description": "Current status of the dialing attempt to the peer." } } }, "StasisEnd": { "id": "StasisEnd", "description": "Notification that a channel has left a Stasis application.", "properties": { "channel": { "required": true, "type": "Channel" } } }, "StasisStart": { "id": "StasisStart", "description": "Notification that a channel has entered a Stasis application.", "properties": { "args": { "required": true, "type": "List[string]", "description": "Arguments to the application" }, "channel": { "required": true, "type": "Channel" }, "replace_channel": { "required": false, "type": "Channel" } } }, "TextMessageReceived": { "id": "TextMessageReceived", "description": "A text message was received from an endpoint.", "properties": { "message": { "required": true, "type": "TextMessage" }, "endpoint": { "required": false, "type": "Endpoint" } } }, "ChannelConnectedLine": { "id": "ChannelConnectedLine", "description": "Channel changed Connected Line.", "properties": { "channel": { "required": true, "type": "Channel", "description": "The channel whose connected line has changed." } } } } }