[asterisk-app-dev] Question on implementation of "assigned" uniqueid when creating channels.

Matthew Jordan mjordan at digium.com
Tue Feb 25 11:06:45 CST 2014


On Fri, Feb 21, 2014 at 2:45 PM, Matthew Jordan <mjordan at digium.com> wrote:
> On Fri, Feb 21, 2014 at 12:04 PM, Richard Mudgett <rmudgett at digium.com> wrote:
>>
>>
>>
>> On Fri, Feb 21, 2014 at 10:56 AM, Scott Griepentrog
>> <sgriepentrog at digium.com> wrote:
>>>
>>> Hi all-
>>>
>>> I'm working on the ability to set the uniqueid on channel creation via ami
>>> and ari, and I've run into a quandary:
>>>
>>> When Asterisk dials over chan_local, it creates a LOCAL/something;1
>>> channel, and another LOCAL/something;2 channel to handle the other end of
>>> the call.  If I'm specifying the uniqueid when I originate the call, I would
>>> presume it would be set to the ;1 channel, as that's the one I'm actually
>>> talking to.  But should there be something identifiable (rather than the
>>> standard 012345678.123 uniqueid format) on the ;2 channel?  For example, if
>>> I create the ;1 channel as 'MyCustomId', would it be useful to have the
>>> uniqueid of the ;2 channel be 'MyCustomId;2' ?
>>>
>>> Although it's probably not a good idea, it's not technically impossible to
>>> set the same 'MyCustomId' to both channels.  Any other ideas on how best to
>>> handle this?
>>
>>
>> It is definitely not a good idea to have both the ;1 and ;2 channels to have
>> the same uniqueid.
>> They are different channels and if you look up a channel by uniqueid you
>> won't know which
>> local channel you will get.
>>
>> Pretty much the choices you have are:
>> 1) Give ;1 the requested id and let the ;2 generate its own id.
>>
>> 2) Give ;1 the requested id and give the ;2 the same id with an appended ;2
>> or some other differentiator that lets the two channels be associated by a
>> similar id.
>>
>> 3) Give ;1 the requested id and give the ;2 an extra given id by the
>> requester.  This option has the drawback of requiring the user to pass two
>> ids when creating a local channel.
>>
>
> I'd be very interested to hear more opinions on this one - but my
> inclination is either option (2) or option (3).

Ben Langfeld and I talked briefly about this in #adhearsion, and he
had the suggestion of doing Option 3 and falling back to Option 2.
Below is what this may look like from an API perspective:

AMI:

Originate a Local channel to extension foo at bar, with the other Local
channel half being placed in yackity at bar. The first Local channel half
would receive the channel ID of my-poorly-named-id-1, while the second
Local channel half would receive the channel ID of
my-poorly-named-id-2.

Action: Originate
Channel: Local/foo at bar
Exten: yackity
Context: bar
Priority: 1
Async: True
ChannelId: my-poorly-named-id-1
OtherChannelId: my-poorly-named-id-2

----

Originate a SIP channel to endpoint foo, and execute the dialplan at
yackity at bar. The channel would receive the channel ID of
my-poorly-named-id-1, while the second the channel ID of
my-poorly-named-id-2 would simply be ignored.

Action: Originate
Channel: SIP/foo
Exten: yackity
Context: bar
Priority: 1
Async: True
ChannelId: my-poorly-named-id-1
OtherChannelId: my-poorly-named-id-2 ; IGNORED

----

ARI:

Originate a Local channel to extension foo at bar, with the other Local
channel half being placed in a Stasis application. The first Local
channel half would receive the channel ID of my-poorly-named-id-1,
while the second Local channel half would receive the channel ID of
my-poorly-named-id-2.

POST /channels/?endpoint=Local/foo at bar&app=Stasis&appArgs=do_stuff&channelId=my-poorly-named-id-1&otherChannelId=my-pooly-named-id-2

----

Originate a Local channel to extension foo at bar, with the other Local
channel half being placed in a Stasis application. The first Local
channel half would receive the channel ID of my-poorly-named-id-1,
while the second Local channel half would receive the channel ID of
my-poorly-named-id-1;2. Note that this falls back to Option 2, since
it needs to give the channel a unique ID still.

POST /channels/?endpoint=Local/foo at bar&app=Stasis&appArgs=do_stuff&channelId=my-poorly-named-id-1

----

Thoughts?

Matt

-- 
Matthew Jordan
Digium, Inc. | Engineering Manager
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
Check us out at: http://digium.com & http://asterisk.org



More information about the asterisk-app-dev mailing list