forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
883 lines
33 KiB
883 lines
33 KiB
{ |
|
"_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", |
|
"_author": "David M. Lee, II <dlee@digium.com>", |
|
"_svn_revision": "$Revision$", |
|
"apiVersion": "1.10.0", |
|
"swaggerVersion": "1.2", |
|
"basePath": "http://localhost:8088/ari", |
|
"resourcePath": "/api-docs/events.{format}", |
|
"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": false |
|
} |
|
}, |
|
"subTypes": [ |
|
"DeviceStateChanged", |
|
"PlaybackStarted", |
|
"PlaybackFinished", |
|
"RecordingStarted", |
|
"RecordingFinished", |
|
"RecordingFailed", |
|
"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", |
|
"Created", |
|
"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 |
|
} |
|
} |
|
}, |
|
"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 |
|
} |
|
} |
|
}, |
|
"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." |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|