2013-04-22 14:58:53 +00:00
{
"_copyright" : "Copyright (C) 2012 - 2013, Digium, Inc." ,
"_author" : "David M. Lee, II <dlee@digium.com>" ,
"_svn_revision" : "$Revision$" ,
2015-05-21 18:05:08 +00:00
"apiVersion" : "1.7.0" ,
2013-04-22 14:58:53 +00:00
"swaggerVersion" : "1.1" ,
2014-09-20 23:41:55 +00:00
"basePath" : "http://localhost:8088/ari" ,
2013-04-22 14:58:53 +00:00
"resourcePath" : "/api-docs/channels.{format}" ,
"apis" : [
{
"path" : "/channels" ,
"description" : "Active channels" ,
"operations" : [
{
"httpMethod" : "GET" ,
2013-10-16 14:02:06 +00:00
"summary" : "List all active channels in Asterisk." ,
2013-11-07 21:10:31 +00:00
"nickname" : "list" ,
2013-04-22 14:58:53 +00:00
"responseClass" : "List[Channel]"
} ,
{
"httpMethod" : "POST" ,
"summary" : "Create a new channel (originate)." ,
2013-10-19 14:45:14 +00:00
"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." ,
2013-04-22 14:58:53 +00:00
"nickname" : "originate" ,
2013-10-21 18:59:51 +00:00
"responseClass" : "Channel" ,
2013-04-22 14:58:53 +00:00
"parameters" : [
{
"name" : "endpoint" ,
2013-06-28 16:23:24 +00:00
"description" : "Endpoint to call." ,
2013-04-22 14:58:53 +00:00
"paramType" : "query" ,
2013-06-28 16:23:24 +00:00
"required" : true ,
2013-04-22 14:58:53 +00:00
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "extension" ,
2015-01-27 17:21:03 +00:00
"description" : "The extension to dial after the endpoint answers. Mutually exclusive with 'app'." ,
2013-04-22 14:58:53 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "context" ,
2015-01-27 17:21:03 +00:00
"description" : "The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'." ,
2013-06-07 18:39:42 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
2013-06-28 16:23:24 +00:00
"name" : "priority" ,
2015-01-27 17:21:03 +00:00
"description" : "The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'." ,
2013-06-07 18:39:42 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
2013-06-28 16:23:24 +00:00
"dataType" : "long"
2013-06-07 18:39:42 +00:00
} ,
2015-01-07 18:54:06 +00:00
{
"name" : "label" ,
2015-01-27 17:21:03 +00:00
"description" : "The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'." ,
2015-01-07 18:54:06 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
2013-06-07 18:39:42 +00:00
{
2013-06-28 16:23:24 +00:00
"name" : "app" ,
2015-01-27 17:21:03 +00:00
"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'." ,
2013-06-07 18:39:42 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
2013-06-28 16:23:24 +00:00
"dataType" : "string"
2013-06-07 18:39:42 +00:00
} ,
{
2013-06-28 16:23:24 +00:00
"name" : "appArgs" ,
2015-01-27 17:21:03 +00:00
"description" : "The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'." ,
2013-06-07 18:39:42 +00:00
"paramType" : "query" ,
2013-06-28 16:23:24 +00:00
"required" : false ,
2013-06-07 18:39:42 +00:00
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
2013-06-28 16:23:24 +00:00
"name" : "callerId" ,
"description" : "CallerID to use when dialing the endpoint or extension." ,
2013-04-22 14:58:53 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
2013-06-28 16:23:24 +00:00
} ,
{
"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
2014-01-21 14:27:21 +00:00
} ,
{
"name" : "variables" ,
2014-07-03 16:14:39 +00:00
"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\" } }" ,
2014-01-21 14:27:21 +00:00
"paramType" : "body" ,
"required" : false ,
"dataType" : "containers" ,
"allowMultiple" : false
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
} ,
{
"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"
2014-12-09 15:45:19 +00:00
} ,
{
"name" : "originator" ,
"description" : "The unique id of the channel which is originating this one." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
2013-04-22 14:58:53 +00:00
}
2013-07-10 17:13:21 +00:00
] ,
"errorResponses" : [
{
"code" : 400 ,
"reason" : "Invalid parameters for originating a channel."
}
2013-04-22 14:58:53 +00:00
]
}
]
} ,
{
"path" : "/channels/{channelId}" ,
"description" : "Active channel" ,
"operations" : [
{
"httpMethod" : "GET" ,
"summary" : "Channel details." ,
2013-11-07 21:10:31 +00:00
"nickname" : "get" ,
2013-04-22 14:58:53 +00:00
"responseClass" : "Channel" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
}
] ,
"errorResponses" : [
{
"code" : 404 ,
"reason" : "Channel not found"
}
]
} ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
{
"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" ,
2015-01-27 17:21:03 +00:00
"description" : "The extension to dial after the endpoint answers. Mutually exclusive with 'app'." ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "context" ,
2015-01-27 17:21:03 +00:00
"description" : "The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'." ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "priority" ,
2015-01-27 17:21:03 +00:00
"description" : "The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'." ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "long"
} ,
2015-01-07 18:54:06 +00:00
{
"name" : "label" ,
2015-01-27 17:21:03 +00:00
"description" : "The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'." ,
2015-01-07 18:54:06 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
{
"name" : "app" ,
2015-01-27 17:21:03 +00:00
"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'." ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "appArgs" ,
2015-01-27 17:21:03 +00:00
"description" : "The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'." ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
"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" ,
2014-07-03 16:14:39 +00:00
"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\" } }" ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
"paramType" : "body" ,
"required" : false ,
"dataType" : "containers" ,
"allowMultiple" : false
} ,
{
"name" : "otherChannelId" ,
"description" : "The unique id to assign the second channel when using local channels." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
2014-12-09 15:45:19 +00:00
} ,
{
"name" : "originator" ,
"description" : "The unique id of the channel which is originating this one." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
}
] ,
"errorResponses" : [
{
"code" : 400 ,
"reason" : "Invalid parameters for originating a channel."
}
]
} ,
2013-04-22 14:58:53 +00:00
{
"httpMethod" : "DELETE" ,
"summary" : "Delete (i.e. hangup) a channel." ,
2013-11-07 21:10:31 +00:00
"nickname" : "hangup" ,
2013-04-22 14:58:53 +00:00
"responseClass" : "void" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
2013-11-01 14:38:21 +00:00
} ,
{
"name" : "reason" ,
"description" : "Reason for hanging up the channel" ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string" ,
"defalutValue" : "normal" ,
"allowableValues" : {
"valueType" : "LIST" ,
"values" : [
"normal" ,
"busy" ,
2015-02-09 03:12:16 +00:00
"congestion" ,
"no_answer"
2013-11-01 14:38:21 +00:00
]
}
2013-04-22 14:58:53 +00:00
}
] ,
"errorResponses" : [
2013-11-01 14:38:21 +00:00
{
"code" : 400 ,
"reason" : "Invalid reason for hangup provided"
} ,
2013-04-22 14:58:53 +00:00
{
"code" : 404 ,
"reason" : "Channel not found"
}
]
}
]
} ,
{
"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"
2013-06-26 19:29:57 +00:00
} ,
{
"name" : "context" ,
"description" : "The context to continue to." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "extension" ,
"description" : "The extension to continue to." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "priority" ,
"description" : "The priority to continue to." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int"
2015-01-07 18:54:06 +00:00
} ,
{
"name" : "label" ,
"description" : "The label to continue to - will supersede 'priority' if both are provided." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
2013-04-22 14:58:53 +00:00
}
] ,
"errorResponses" : [
{
"code" : 404 ,
"reason" : "Channel not found"
} ,
{
"code" : 409 ,
"reason" : "Channel not in a Stasis application"
}
]
}
]
} ,
ARI/PJSIP: Add the ability to redirect (transfer) a channel in a Stasis app
This patch adds a new feature to ARI to redirect a channel to another server,
and fixes a few bugs in PJSIP's handling of the Transfer dialplan
application/ARI redirect capability.
*New Feature*
A new operation has been added to the ARI channels resource, redirect. With
this, a channel in a Stasis application can be redirected to another endpoint
of the same underlying channel technology.
*Bug fixes*
In the process of writing this new feature, two bugs were fixed in the PJSIP
stack:
(1) The existing .transfer channel callback had the limitation that it could
only transfer channels to a SIP URI, i.e., you had to pass
'PJSIP/sip:foo@my_provider.com' to the dialplan application. While this is
still supported, it is somewhat unintuitive - particularly in a world full
of endpoints. As such, we now also support specifying the PJSIP endpoint to
transfer to.
(2) res_pjsip_multihomed was, unfortunately, trying to 'help' a 302 redirect by
updating its Contact header. Alas, that resulted in the forwarding
destination set by the dialplan application/ARI resource/whatever being
rewritten with very incorrect information. Hence, we now don't bother
updating an outgoing response if it is a 302. Since this took a looong time
to find, some additional debug statements have been added to those modules
that update the Contact headers.
Review: https://reviewboard.asterisk.org/r/4316/
ASTERISK-24015 #close
Reported by: Private Name
ASTERISK-24703 #close
Reported by: Matt Jordan
........
Merged revisions 431717 from http://svn.asterisk.org/svn/asterisk/branches/13
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431718 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-02-12 20:34:37 +00:00
{
"path" : "/channels/{channelId}/redirect" ,
"description" : "Inform the channel that it should redirect itself to a different location. Note that this will almost certainly cause the channel to exit the application." ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Redirect the channel to a different location." ,
"nickname" : "redirect" ,
"responseClass" : "void" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "endpoint" ,
"description" : "The endpoint to redirect the channel to" ,
"paramType" : "query" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
}
] ,
"errorResponses" : [
{
"code" : 400 ,
"reason" : "Endpoint parameter not provided"
} ,
{
"code" : 404 ,
"reason" : "Channel or endpoint not found"
} ,
{
"code" : 409 ,
"reason" : "Channel not in a Stasis application"
} ,
{
"code" : 422 ,
"reason" : "Endpoint is not the same type as the channel"
}
]
}
]
} ,
2013-04-22 14:58:53 +00:00
{
"path" : "/channels/{channelId}/answer" ,
"description" : "Answer a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Answer a channel." ,
2013-11-07 21:10:31 +00:00
"nickname" : "answer" ,
2013-04-22 14:58:53 +00:00
"responseClass" : "void" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
}
] ,
"errorResponses" : [
{
"code" : 404 ,
"reason" : "Channel not found"
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
} ,
{
"code" : 409 ,
"reason" : "Channel not in a Stasis application"
2013-04-22 14:58:53 +00:00
}
]
}
]
} ,
2013-11-01 14:38:21 +00:00
{
"path" : "/channels/{channelId}/ring" ,
"description" : "Send a ringing indication to a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Indicate ringing to a channel." ,
2013-11-07 21:10:31 +00:00
"nickname" : "ring" ,
2013-11-01 14:38:21 +00:00
"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"
}
]
2013-11-13 23:11:32 +00:00
} ,
{
"httpMethod" : "DELETE" ,
"summary" : "Stop ringing indication on a channel if locally generated." ,
"nickname" : "ringStop" ,
"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"
}
]
2013-11-01 14:38:21 +00:00
}
]
} ,
{
"path" : "/channels/{channelId}/dtmf" ,
"description" : "Send DTMF to a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Send provided DTMF to a given channel." ,
2013-11-07 21:10:31 +00:00
"nickname" : "sendDTMF" ,
2013-11-01 14:38:21 +00:00
"responseClass" : "void" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "dtmf" ,
"description" : "DTMF To send." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "before" ,
"description" : "Amount of time to wait before DTMF digits (specified in milliseconds) start." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int" ,
"defaultValue" : 0
} ,
{
"name" : "between" ,
"description" : "Amount of time in between DTMF digits (specified in milliseconds)." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int" ,
"defaultValue" : 100
} ,
{
"name" : "duration" ,
"description" : "Length of each DTMF digit (specified in milliseconds)." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int" ,
"defaultValue" : 100
} ,
{
"name" : "after" ,
"description" : "Amount of time to wait after DTMF digits (specified in milliseconds) end." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int" ,
"defaultValue" : 0
}
] ,
"errorResponses" : [
{
"code" : 400 ,
"reason" : "DTMF is required"
} ,
{
"code" : 404 ,
"reason" : "Channel not found"
} ,
{
"code" : 409 ,
"reason" : "Channel not in a Stasis application"
}
]
}
]
} ,
2013-04-22 14:58:53 +00:00
{
"path" : "/channels/{channelId}/mute" ,
"description" : "Mute a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Mute a channel." ,
2013-11-07 21:10:31 +00:00
"nickname" : "mute" ,
2013-04-22 14:58:53 +00:00
"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"
}
]
2013-11-07 21:10:31 +00:00
} ,
2013-04-22 14:58:53 +00:00
{
2013-11-07 21:10:31 +00:00
"httpMethod" : "DELETE" ,
2013-04-22 14:58:53 +00:00
"summary" : "Unmute a channel." ,
2013-11-07 21:10:31 +00:00
"nickname" : "unmute" ,
2013-04-22 14:58:53 +00:00
"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." ,
2013-11-07 21:10:31 +00:00
"nickname" : "hold" ,
2013-04-22 14:58:53 +00:00
"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"
}
]
2013-11-07 21:10:31 +00:00
} ,
2013-04-22 14:58:53 +00:00
{
2013-10-15 15:30:39 +00:00
"httpMethod" : "DELETE" ,
2013-04-22 14:58:53 +00:00
"summary" : "Remove a channel from hold." ,
2013-11-07 21:10:31 +00:00
"nickname" : "unhold" ,
2013-04-22 14:58:53 +00:00
"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"
}
]
}
]
} ,
2013-07-19 19:40:27 +00:00
{
2013-10-15 15:30:39 +00:00
"path" : "/channels/{channelId}/moh" ,
2013-07-19 19:40:27 +00:00
"description" : "Play music on hold to a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Play music on hold to a channel." ,
2013-11-21 15:56:34 +00:00
"notes" : "Using media operations such as /play on a channel playing MOH in this manner will suspend MOH without resuming automatically. If continuing music on hold is desired, the stasis application must reinitiate music on hold." ,
2013-11-07 21:10:31 +00:00
"nickname" : "startMoh" ,
2013-07-19 19:40:27 +00:00
"responseClass" : "void" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "mohClass" ,
"description" : "Music on hold class to use" ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
}
] ,
"errorResponses" : [
{
"code" : 404 ,
"reason" : "Channel not found"
} ,
{
"code" : 409 ,
"reason" : "Channel not in a Stasis application"
}
]
2013-11-07 21:10:31 +00:00
} ,
2013-07-19 19:40:27 +00:00
{
2013-10-15 15:30:39 +00:00
"httpMethod" : "DELETE" ,
2013-07-19 19:40:27 +00:00
"summary" : "Stop playing music on hold to a channel." ,
2013-11-07 21:10:31 +00:00
"nickname" : "stopMoh" ,
2013-07-19 19:40:27 +00:00
"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"
}
]
}
]
} ,
2013-11-21 15:56:34 +00:00
{
"path" : "/channels/{channelId}/silence" ,
"description" : "Play silence to a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Play silence to a channel." ,
"notes" : "Using media operations such as /play on a channel playing silence in this manner will suspend silence without resuming automatically." ,
"nickname" : "startSilence" ,
"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"
}
]
} ,
{
"httpMethod" : "DELETE" ,
"summary" : "Stop playing silence to a channel." ,
"nickname" : "stopSilence" ,
"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"
}
]
}
]
} ,
2013-04-22 14:58:53 +00:00
{
"path" : "/channels/{channelId}/play" ,
"description" : "Play media to a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Start playback of media." ,
2014-04-17 21:57:36 +00:00
"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.)" ,
2013-11-07 21:10:31 +00:00
"nickname" : "play" ,
2013-04-22 14:58:53 +00:00
"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"
2013-05-23 20:11:35 +00:00
} ,
{
"name" : "lang" ,
2013-05-23 20:21:16 +00:00
"description" : "For sounds, selects language for sound." ,
2013-05-23 20:11:35 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
2013-05-23 20:21:16 +00:00
} ,
{
"name" : "offsetms" ,
"description" : "Number of media to skip before playing." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int"
} ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
{
"name" : "skipms" ,
"description" : "Number of milliseconds to skip for forward/reverse operations." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int" ,
"defaultValue" : 3000
} ,
{
"name" : "playbackId" ,
"description" : "Playback ID." ,
"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}/play/{playbackId}" ,
"description" : "Play media to a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Start playback of media and specify the playbackId." ,
2015-01-27 17:21:03 +00:00
"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.)" ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
"nickname" : "playWithId" ,
"responseClass" : "Playback" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "playbackId" ,
"description" : "Playback 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"
} ,
{
"name" : "offsetms" ,
"description" : "Number of media to skip before playing." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int"
} ,
2013-05-23 20:21:16 +00:00
{
"name" : "skipms" ,
"description" : "Number of milliseconds to skip for forward/reverse operations." ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int" ,
"defaultValue" : 3000
2013-04-22 14:58:53 +00:00
}
] ,
"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." ,
2013-11-07 21:10:31 +00:00
"nickname" : "record" ,
2013-07-19 19:35:21 +00:00
"responseClass" : "LiveRecording" ,
2013-04-22 14:58:53 +00:00
"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 ,
2013-08-02 14:36:32 +00:00
"allowMultiple" : false ,
2013-04-22 14:58:53 +00:00
"dataType" : "string"
} ,
{
"name" : "maxDurationSeconds" ,
"description" : "Maximum duration of the recording, in seconds. 0 for no limit" ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int" ,
2013-07-03 17:58:45 +00:00
"defaultValue" : 0 ,
"allowableValues" : {
"valueType" : "RANGE" ,
"min" : 0
}
2013-04-22 14:58:53 +00:00
} ,
{
"name" : "maxSilenceSeconds" ,
"description" : "Maximum duration of silence, in seconds. 0 for no limit" ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "int" ,
2013-07-03 17:58:45 +00:00
"defaultValue" : 0 ,
"allowableValues" : {
"valueType" : "RANGE" ,
"min" : 0
}
2013-04-22 14:58:53 +00:00
} ,
{
2013-07-03 17:58:45 +00:00
"name" : "ifExists" ,
"description" : "Action to take if a recording with the same name already exists." ,
2013-04-22 14:58:53 +00:00
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
2013-07-03 17:58:45 +00:00
"dataType" : "string" ,
"defaultValue" : "fail" ,
"allowableValues" : {
"valueType" : "LIST" ,
"values" : [
"fail" ,
"overwrite" ,
"append"
]
}
2013-04-22 14:58:53 +00:00
} ,
{
"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" : [
2013-07-03 17:58:45 +00:00
{
"code" : 400 ,
"reason" : "Invalid parameters"
} ,
2013-04-22 14:58:53 +00:00
{
"code" : 404 ,
"reason" : "Channel not found"
} ,
{
"code" : 409 ,
2013-10-25 21:28:32 +00:00
"reason" : "Channel is not in a Stasis application; the channel is currently bridged with other hcannels; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail"
2013-10-25 22:01:43 +00:00
} ,
{
"code" : 422 ,
"reason" : "The format specified is unknown on this system"
2013-04-22 14:58:53 +00:00
}
]
}
]
2013-07-08 14:46:20 +00:00
} ,
{
"path" : "/channels/{channelId}/variable" ,
"description" : "Variables on a channel" ,
"operations" : [
{
"httpMethod" : "GET" ,
"summary" : "Get the value of a channel variable or function." ,
"nickname" : "getChannelVar" ,
2013-07-10 13:50:48 +00:00
"responseClass" : "Variable" ,
2013-07-08 14:46:20 +00:00
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "variable" ,
"description" : "The channel variable or function to get" ,
"paramType" : "query" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
}
] ,
"errorResponses" : [
2013-08-21 16:23:59 +00:00
{
"code" : 400 ,
"reason" : "Missing variable parameter."
} ,
2013-07-08 14:46:20 +00:00
{
"code" : 404 ,
2015-02-21 20:48:17 +00:00
"reason" : "Channel or variable not found"
2013-07-08 14:46:20 +00:00
} ,
{
"code" : 409 ,
"reason" : "Channel not in a Stasis application"
}
]
} ,
{
"httpMethod" : "POST" ,
"summary" : "Set the value of a channel variable or function." ,
"nickname" : "setChannelVar" ,
"responseClass" : "void" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "variable" ,
"description" : "The channel variable or function 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" : [
2013-08-21 16:23:59 +00:00
{
"code" : 400 ,
"reason" : "Missing variable parameter."
} ,
2013-07-08 14:46:20 +00:00
{
"code" : 404 ,
"reason" : "Channel not found"
} ,
{
"code" : 409 ,
"reason" : "Channel not in a Stasis application"
}
]
}
]
2013-11-23 12:40:46 +00:00
} ,
{
"path" : "/channels/{channelId}/snoop" ,
"description" : "Snoop (spy/whisper) on a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Start snooping." ,
"notes" : "Snoop (spy/whisper) on a specific channel." ,
"nickname" : "snoopChannel" ,
"responseClass" : "Channel" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "spy" ,
"description" : "Direction of audio to spy on" ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string" ,
"defaultValue" : "none" ,
"allowableValues" : {
"valueType" : "LIST" ,
"values" : [
"none" ,
"both" ,
"out" ,
"in"
]
}
} ,
{
"name" : "whisper" ,
"description" : "Direction of audio to whisper into" ,
"paramType" : "query" ,
"required" : false ,
uniqueid: channel linkedid, ami, ari object creation with id's
Much needed was a way to assign id to objects on creation, and
much change was necessary to accomplish it. Channel uniqueids
and linkedids are split into separate string and creation time
components without breaking linkedid propgation. This allowed
the uniqueid to be specified by the user interface - and those
values are now carried through to channel creation, adding the
assignedids value to every function in the chain including the
channel drivers. For local channels, the second channel can be
specified or left to default to a ;2 suffix of first. In ARI,
bridge, playback, and snoop objects can also be created with a
specified uniqueid.
Along the way, the args order to allocating channels was fixed
in chan_mgcp and chan_gtalk, and linkedid is no longer lost as
masquerade occurs.
(closes issue ASTERISK-23120)
Review: https://reviewboard.asterisk.org/r/3191/
........
Merged revisions 410157 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2014-03-07 15:47:55 +00:00
"allowMultiple" : false ,
"dataType" : "string" ,
"defaultValue" : "none" ,
"allowableValues" : {
"valueType" : "LIST" ,
"values" : [
"none" ,
"both" ,
"out" ,
"in"
]
}
} ,
{
"name" : "app" ,
"description" : "Application the snooping channel is placed into" ,
"paramType" : "query" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "appArgs" ,
"description" : "The application arguments to pass to the Stasis application" ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "snoopId" ,
"description" : "Unique ID to assign to snooping channel" ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
}
] ,
"errorResponses" : [
{
"code" : 400 ,
"reason" : "Invalid parameters"
} ,
{
"code" : 404 ,
"reason" : "Channel not found"
}
]
}
]
} ,
{
"path" : "/channels/{channelId}/snoop/{snoopId}" ,
"description" : "Snoop (spy/whisper) on a channel" ,
"operations" : [
{
"httpMethod" : "POST" ,
"summary" : "Start snooping." ,
"notes" : "Snoop (spy/whisper) on a specific channel." ,
"nickname" : "snoopChannelWithId" ,
"responseClass" : "Channel" ,
"parameters" : [
{
"name" : "channelId" ,
"description" : "Channel's id" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "snoopId" ,
"description" : "Unique ID to assign to snooping channel" ,
"paramType" : "path" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "spy" ,
"description" : "Direction of audio to spy on" ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string" ,
"defaultValue" : "none" ,
"allowableValues" : {
"valueType" : "LIST" ,
"values" : [
"none" ,
"both" ,
"out" ,
"in"
]
}
} ,
{
"name" : "whisper" ,
"description" : "Direction of audio to whisper into" ,
"paramType" : "query" ,
"required" : false ,
2013-11-23 12:40:46 +00:00
"allowMultiple" : false ,
"dataType" : "string" ,
"defaultValue" : "none" ,
"allowableValues" : {
"valueType" : "LIST" ,
"values" : [
"none" ,
"both" ,
"out" ,
"in"
]
}
} ,
{
"name" : "app" ,
"description" : "Application the snooping channel is placed into" ,
"paramType" : "query" ,
"required" : true ,
"allowMultiple" : false ,
"dataType" : "string"
} ,
{
"name" : "appArgs" ,
"description" : "The application arguments to pass to the Stasis application" ,
"paramType" : "query" ,
"required" : false ,
"allowMultiple" : false ,
"dataType" : "string"
}
] ,
"errorResponses" : [
{
"code" : 400 ,
"reason" : "Invalid parameters"
} ,
{
"code" : 404 ,
"reason" : "Channel not found"
}
]
}
]
2013-04-22 14:58:53 +00:00
}
] ,
"models" : {
"Dialed" : {
"id" : "Dialed" ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"description" : "Dialed channel information." ,
2013-04-22 14:58:53 +00:00
"properties" : { }
} ,
"DialplanCEP" : {
"id" : "DialplanCEP" ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"description" : "Dialplan location (context/extension/priority)" ,
2013-04-22 14:58:53 +00:00
"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" ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"description" : "Caller identification" ,
2013-04-22 14:58:53 +00:00
"properties" : {
"name" : {
"required" : true ,
"type" : "string"
} ,
"number" : {
"required" : true ,
"type" : "string"
}
}
} ,
"Channel" : {
"id" : "Channel" ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"description" : "A specific communication connection between Asterisk and an Endpoint." ,
2013-04-22 14:58:53 +00:00
"properties" : {
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"id" : {
2013-04-22 14:58:53 +00:00
"required" : true ,
"type" : "string" ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"description" : "Unique identifier of the channel.\n\nThis is the same as the Uniqueid field in AMI."
2013-04-22 14:58:53 +00:00
} ,
"name" : {
"required" : true ,
"type" : "string" ,
"description" : "Name of the channel (i.e. SIP/foo-0000a7e3)"
} ,
"state" : {
"required" : true ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"type" : "string" ,
"allowableValues" : {
"valueType" : "LIST" ,
"values" : [
"Down" ,
"Rsrved" ,
"OffHook" ,
"Dialing" ,
"Ring" ,
"Ringing" ,
"Up" ,
"Busy" ,
"Dialing Offhook" ,
"Pre-ring" ,
"Unknown"
]
}
2013-04-22 14:58:53 +00:00
} ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"caller" : {
2013-04-22 14:58:53 +00:00
"required" : true ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"type" : "CallerID"
2013-04-22 14:58:53 +00:00
} ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"connected" : {
2013-04-22 14:58:53 +00:00
"required" : true ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"type" : "CallerID"
2013-04-22 14:58:53 +00:00
} ,
Update events to use Swagger 1.3 subtyping, and related aftermath
This patch started with the simple idea of changing the /events data
model to be more sane. The original model would send out events like:
{ "stasis_start": { "args": [], "channel": { ... } } }
The event discriminator was the field name instead of being a value in
the object, due to limitations in how Swagger 1.1 could model objects.
While technically sufficient in communicating event information, it was
really difficult to deal with in terms of client side JSON handling.
This patch takes advantage of a proposed extension[1] to Swagger which
allows type variance through the use of a discriminator field. This had
a domino effect that made this a surprisingly large patch.
[1]: https://groups.google.com/d/msg/wordnik-api/EC3rGajE0os/ey_5dBI_jWcJ
In changing the models, I also had to change the swagger_model.py
processor so it can handle the type discriminator and subtyping. I took
that a big step forward, and using that information to generate an
ari_model module, which can validate a JSON object against the Swagger
model.
The REST and WebSocket generators were changed to take advantage of the
validators. If compiled with AST_DEVMODE enabled, JSON objects that
don't match their corresponding models will not be sent out. For REST
API calls, a 500 Internal Server response is sent. For WebSockets, the
invalid JSON message is replaced with an error message.
Since this took over about half of the job of the existing JSON
generators, and the .to_json virtual function on messages took over the
other half, I reluctantly removed the generators.
The validators turned up all sorts of errors and inconsistencies in our
data models, and the code. These were cleaned up, with checks in the
code generator avoid some of the consistency problems in the future.
* The model for a channel snapshot was trimmed down to match the
information sent via AMI. Many of the field being sent were not
useful in the general case.
* The model for a bridge snapshot was updated to be more consistent
with the other ARI models.
Another impact of introducing subtyping was that the swagger-codegen
documentation generator was insufficient (at least until it catches up
with Swagger 1.2). I wanted it to be easier to generate docs for the API
anyways, so I ported the wiki pages to use the Asterisk Swagger
generator. In the process, I was able to clean up many of the model
links, which would occasionally give inconsistent results on the wiki. I
also added error responses to the wiki docs, making the wiki
documentation more complete.
Finally, since Stasis-HTTP will now be named Asterisk REST Interface
(ARI), any new functions and files I created carry the ari_ prefix. I
changed a few stasis_http references to ari where it was non-intrusive
and made sense.
(closes issue ASTERISK-21885)
Review: https://reviewboard.asterisk.org/r/2639/
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@393529 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2013-07-03 16:32:41 +00:00
"accountcode" : {
2013-04-22 14:58:53 +00:00
"required" : true ,
"type" : "string"
} ,
"dialplan" : {
"required" : true ,
"type" : "DialplanCEP" ,
"description" : "Current location in the dialplan"
} ,
"creationtime" : {
"required" : true ,
"type" : "Date" ,
"description" : "Timestamp when channel was created"
2014-12-09 20:20:27 +00:00
} ,
"language" : {
"required" : true ,
"type" : "string" ,
"description" : "The default spoken language"
2013-04-22 14:58:53 +00:00
}
}
}
}
}