mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 03:20:57 +00:00
and GET /playback/{playbackId}. This allows an external application to initiate playback of a sound on a channel while the channel is in the Stasis application. /play commands are issued asynchronously, and return immediately with the URL of the associated /playback resource. Playback commands queue up, playing in succession. The /playback resource shows the state of a playback operation as enqueued, playing or complete. (Although the operation will only be in the 'complete' state for a very short time, since it is almost immediately freed up). (closes issue ASTERISK-21283) (closes issue ASTERISK-21586) Review: https://reviewboard.asterisk.org/r/2531/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@389587 65c4cc65-6c06-0410-ace0-fbb531ad65f3
692 lines
16 KiB
JSON
692 lines
16 KiB
JSON
{
|
|
"_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.",
|
|
"_author": "David M. Lee, II <dlee@digium.com>",
|
|
"_svn_revision": "$Revision$",
|
|
"apiVersion": "0.0.1",
|
|
"swaggerVersion": "1.1",
|
|
"basePath": "http://localhost:8088/stasis",
|
|
"resourcePath": "/api-docs/channels.{format}",
|
|
"apis": [
|
|
{
|
|
"path": "/channels",
|
|
"description": "Active channels",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "GET",
|
|
"summary": "List active channels.",
|
|
"nickname": "getChannels",
|
|
"responseClass": "List[Channel]"
|
|
},
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Create a new channel (originate).",
|
|
"nickname": "originate",
|
|
"responseClass": "Originated",
|
|
"parameters": [
|
|
{
|
|
"name": "endpoint",
|
|
"description": "Endpoint to call. If not specified, originate is routed via dialplan",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "extension",
|
|
"description": "Extension to dial",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "context",
|
|
"description": "When routing via dialplan, the context use. If omitted, uses 'default'",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}",
|
|
"description": "Active channel",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "GET",
|
|
"summary": "Channel details.",
|
|
"nickname": "getChannel",
|
|
"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": "DELETE",
|
|
"summary": "Delete (i.e. hangup) a channel.",
|
|
"nickname": "deleteChannel",
|
|
"responseClass": "void",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}/dial",
|
|
"description": "Create a new channel (originate) and bridge to this channel",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Create a new channel (originate) and bridge to this channel.",
|
|
"nickname": "dial",
|
|
"responseClass": "Dialed",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "endpoint",
|
|
"description": "Endpoint to call. If not specified, dial is routed via dialplan",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "extension",
|
|
"description": "Extension to dial",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "context",
|
|
"description": "When routing via dialplan, the context use. If omitted, uses 'default'",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
},
|
|
{
|
|
"code": 409,
|
|
"reason": "Channel not in a Stasis application"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}/continue",
|
|
"description": "Exit application; continue execution in the dialplan",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Exit application; continue execution in the dialplan.",
|
|
"nickname": "continueInDialplan",
|
|
"responseClass": "void",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
},
|
|
{
|
|
"code": 409,
|
|
"reason": "Channel not in a Stasis application"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}/answer",
|
|
"description": "Answer a channel",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Answer a channel.",
|
|
"nickname": "answerChannel",
|
|
"responseClass": "void",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}/mute",
|
|
"description": "Mute a channel",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Mute a channel.",
|
|
"nickname": "muteChannel",
|
|
"responseClass": "void",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "direction",
|
|
"description": "Direction in which to mute audio",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string",
|
|
"defaultValue": "both",
|
|
"allowableValues": {
|
|
"valueType": "LIST",
|
|
"values": [
|
|
"both",
|
|
"in",
|
|
"out"
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
},
|
|
{
|
|
"code": 409,
|
|
"reason": "Channel not in a Stasis application"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}/unmute",
|
|
"description": "Unmute a channel",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Unmute a channel.",
|
|
"nickname": "unmuteChannel",
|
|
"responseClass": "void",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "direction",
|
|
"description": "Direction in which to unmute audio",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string",
|
|
"defaultValue": "both",
|
|
"allowableValues": {
|
|
"valueType": "LIST",
|
|
"values": [
|
|
"both",
|
|
"in",
|
|
"out"
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
},
|
|
{
|
|
"code": 409,
|
|
"reason": "Channel not in a Stasis application"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}/hold",
|
|
"description": "Put a channel on hold",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Hold a channel.",
|
|
"nickname": "holdChannel",
|
|
"responseClass": "void",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
},
|
|
{
|
|
"code": 409,
|
|
"reason": "Channel not in a Stasis application"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}/unhold",
|
|
"description": "Remove a channel from hold",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Remove a channel from hold.",
|
|
"nickname": "unholdChannel",
|
|
"responseClass": "void",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
},
|
|
{
|
|
"code": 409,
|
|
"reason": "Channel not in a Stasis application"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}/play",
|
|
"description": "Play media to a channel",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Start playback of media.",
|
|
"notes": "The media URI may be any of a number of URI's. You may use http: and https: URI's, as well as sound: and recording: URI's. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)",
|
|
"nickname": "playOnChannel",
|
|
"responseClass": "Playback",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "media",
|
|
"description": "Media's URI to play.",
|
|
"paramType": "query",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "lang",
|
|
"description": "For sounds, selects language for sound",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
},
|
|
{
|
|
"code": 409,
|
|
"reason": "Channel not in a Stasis application"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"path": "/channels/{channelId}/record",
|
|
"description": "Record audio from a channel",
|
|
"operations": [
|
|
{
|
|
"httpMethod": "POST",
|
|
"summary": "Start a recording.",
|
|
"notes": "Record audio from a channel. Note that this will not capture audio sent to the channel. The bridge itself has a record feature if that's what you want.",
|
|
"nickname": "recordChannel",
|
|
"responseClass": "void",
|
|
"parameters": [
|
|
{
|
|
"name": "channelId",
|
|
"description": "Channel's id",
|
|
"paramType": "path",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "name",
|
|
"description": "Recording's filename",
|
|
"paramType": "query",
|
|
"required": true,
|
|
"allowMultiple": false,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "format",
|
|
"description": "Format to encode audio in",
|
|
"paramType": "query",
|
|
"required": true,
|
|
"allowMultiple": true,
|
|
"dataType": "string"
|
|
},
|
|
{
|
|
"name": "maxDurationSeconds",
|
|
"description": "Maximum duration of the recording, in seconds. 0 for no limit",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "int",
|
|
"defaultValue": 0
|
|
},
|
|
{
|
|
"name": "maxSilenceSeconds",
|
|
"description": "Maximum duration of silence, in seconds. 0 for no limit",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "int",
|
|
"defaultValue": 0
|
|
},
|
|
{
|
|
"name": "append",
|
|
"description": "If true, and recording already exists, append to recording",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "boolean",
|
|
"defaultValue": false
|
|
},
|
|
{
|
|
"name": "beep",
|
|
"description": "Play beep when recording begins",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "boolean",
|
|
"defaultValue": false
|
|
},
|
|
{
|
|
"name": "terminateOn",
|
|
"description": "DTMF input to terminate recording",
|
|
"paramType": "query",
|
|
"required": false,
|
|
"allowMultiple": false,
|
|
"dataType": "string",
|
|
"defaultValue": "none",
|
|
"allowableValues": {
|
|
"valueType": "LIST",
|
|
"values": [
|
|
"none",
|
|
"any",
|
|
"*",
|
|
"#"
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"errorResponses": [
|
|
{
|
|
"code": 404,
|
|
"reason": "Channel not found"
|
|
},
|
|
{
|
|
"code": 409,
|
|
"reason": "Channel is not in a Stasis application."
|
|
},
|
|
{
|
|
"code": 409,
|
|
"reason": "The channel is currently bridges with other channels."
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"models": {
|
|
"Originated": {
|
|
"id": "Originated",
|
|
"properties": {}
|
|
},
|
|
"Dialed": {
|
|
"id": "Dialed",
|
|
"properties": {}
|
|
},
|
|
"DialplanCEP": {
|
|
"id": "DialplanCEP",
|
|
"properties": {
|
|
"context": {
|
|
"required": true,
|
|
"type": "string",
|
|
"description": "Context in the dialplan"
|
|
},
|
|
"exten": {
|
|
"required": true,
|
|
"type": "string",
|
|
"description": "Extension in the dialplan"
|
|
},
|
|
"priority": {
|
|
"required": true,
|
|
"type": "long",
|
|
"description": "Priority in the dialplan"
|
|
}
|
|
}
|
|
},
|
|
"CallerID": {
|
|
"id": "CallerID",
|
|
"properties": {
|
|
"name": {
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
"number": {
|
|
"required": true,
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"Channel": {
|
|
"id": "Channel",
|
|
"properties": {
|
|
"uniqueid": {
|
|
"required": true,
|
|
"type": "string",
|
|
"description": "Unique identifier of the channel"
|
|
},
|
|
"name": {
|
|
"required": true,
|
|
"type": "string",
|
|
"description": "Name of the channel (i.e. SIP/foo-0000a7e3)"
|
|
},
|
|
"state": {
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
"accountcode": {
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
"peeraccount": {
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
"userfield": {
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
"linkedid": {
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
"parkinglot": {
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
"hangupsource": {
|
|
"required": true,
|
|
"type": "string"
|
|
},
|
|
"appl": {
|
|
"required": true,
|
|
"type": "string",
|
|
"description": "Currently executing dialplan application"
|
|
},
|
|
"data": {
|
|
"required": true,
|
|
"type": "string",
|
|
"description": "Arguments passed to appl"
|
|
},
|
|
"dialplan": {
|
|
"required": true,
|
|
"type": "DialplanCEP",
|
|
"description": "Current location in the dialplan"
|
|
},
|
|
"caller": {
|
|
"required": true,
|
|
"type": "CallerID"
|
|
},
|
|
"connected": {
|
|
"required": true,
|
|
"type": "CallerID"
|
|
},
|
|
"creationtime": {
|
|
"required": true,
|
|
"type": "Date",
|
|
"description": "Timestamp when channel was created"
|
|
}
|
|
}
|
|
},
|
|
"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": "URI for the media to play back.",
|
|
"required": true
|
|
},
|
|
"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",
|
|
"complete"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|