Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-21 Thread Jonathan White
This would be a very useful feature to have available in dialplan. To be able 
vary the length of a call, during the call. 

I just emailed the dev list with the thought of adding this feature to 
confbridge with the following type of commands:
same = n,Set(CONFBRIDGE(bridge,max_time)=
or
same = n,Set(CONFBRIDGE(bridge,max_datetime)=
or
same = n,Set(CONFBRIDGE(bridge,start_datetime)=
same = n,Set(CONFBRIDGE(bridge,stop_datetime)=

with the following to add some notifications
same = n,Set(CONFBRIDGE(bridge,hangup_warning)=
same = n,Set(CONFBRIDGE(bridge,hangup_message)=

The idea was that if you have some call credit it will reduce by the variable 
number of callers which will join the same bridge. 

Using same = n,Set(TIMEOUT(absolute)= only sets the time out for an individual 
call and not the bridge.

Perhaps something that could be used for all call types would be a better 
approach rather than modifying individual apps.

Regards


From: Nir Simionovich 
Sent: Wednesday, December 17, 2014 8:16 PM
To: Asterisk Developers Mailing List 
Subject: [asterisk-dev] ARI Extending Existing Feature: bridge control

Hi All, 

  After shipping out my first patch to ARI, I became hungry :-)

  So, now I've set up a slightly higher goal, adding a much required feature 
for ARI. I'll describe the problem first, then 
I have some questions. 

  The Asterisk dial application enables us to limit the duration of the call 
and play a warning sound. Once this had been 
set, as far as I know, you can't modify these values externally. When the 
feature was originally introduced, over 10 years 
ago, the goal was simple: enable a calling card system to limit the call 
according to a credit line.

  As time went by, people realized that this feature is useful, however 
limited. In today's mobile application era, when a 
VoIP phone can actually purchase credit while on the actual call, we need a way 
to control this from an external source. 

  Now, I've started digging into the code, and I've managed to understand that 
following (feel free to bash me if I'm wrong):

  1. The time limits are maintained at the bridge structure, not at the channel 
- using the ast_bridge_config data structure
  2. The ARI bridges GET method only retrieves a list of bridges and their 
associated channels, not their configurations

  So, assuming that I'm reading the ast_ari_bridges_list function from 
resouce_bridges.c correctly, we retrieve
a snapshot of all active bridges via the snapshots variable (if you can call it 
that). The output is built by iterating through it.

  Now, my questions:

  1. Is there a way to obtain the information in ast_bridge_config for each of 
the iterated bridges, then output it via the JSON response?
  2. Is there a way to manipulate the configuration of the bridge, via 
modifying the associated bridge configuration?

  The floor is now open :-)

Nir S



-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-21 Thread Matthew Jordan
On Sun, Dec 21, 2014 at 6:01 AM, Jonathan White uvac...@googlemail.com wrote:
 This would be a very useful feature to have available in dialplan. To be
 able vary the length of a call, during the call.

So, this isn't really the topic of conversation in this thread. Most
of this thread concerns itself with discussing additions/modifications
to ARI and its manipulation of bridges.

 I just emailed the dev list with the thought of adding this feature to
 confbridge with the following type of commands:
 same = n,Set(CONFBRIDGE(bridge,max_time)=
 or
 same = n,Set(CONFBRIDGE(bridge,max_datetime)=
 or
 same = n,Set(CONFBRIDGE(bridge,start_datetime)=
 same = n,Set(CONFBRIDGE(bridge,stop_datetime)=

 with the following to add some notifications
 same = n,Set(CONFBRIDGE(bridge,hangup_warning)=
 same = n,Set(CONFBRIDGE(bridge,hangup_message)=

 The idea was that if you have some call credit it will reduce by the
 variable number of callers which will join the same bridge.

Keep in mind that the CONFBRIDGE function modifies the ConfBridge
application, not all bridges in Asterisk. Adding capabilities to the
ConfBridge dialplan application won't really affect the topic this
thread is discussing.

The CONFBRIDGE function should *not* be re-purposed for things outside
the ConfBridge application. If someone wanted to write a generic
dialplan function that modified properties of a bridge, that would be
a better solution than using CONFBRIDGE.

That being said, the dialplan is extremely channel focussed. That is
both a strength (it is relatively simple and straight forward) and a
weakness (doing things outside of manipulating a single channel can
become convoluted). I'm not sure that adding these kinds of
capabilities to the dialplan is the best way forward.

That being said, Asterisk is open source. If someone wants to write a
generic bridge function that modifies bridges in Asterisk, that would
be an interesting patch.

 Using same = n,Set(TIMEOUT(absolute)= only sets the time out for an
 individual call and not the bridge.

 Perhaps something that could be used for all call types would be a better
 approach rather than modifying individual apps.


-- 
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

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev


Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Nir Simionovich
Sorry, previous sample was wrong, here is a more accurate sample:

T 178.62.127.227:44972 - 178.62.127.227:8088 [AP]
POST /ari/channels/participant HTTP/1.1.
Authorization: Basic dGVzdDp0ZXN0.
Host: 178.62.127.227:8088.
Content-Length: 31.
Accept: application/json.
Content-Type: application/json.
.
{endpoint:Local\/1000@demo}

T 178.62.127.227:8088 - 178.62.127.227:44972 [AP]
HTTP/1.1 400 Bad Request.
Server: Asterisk/SVN-trunk-r429683M.
Date: Thu, 18 Dec 2014 07:59:34 GMT.
Cache-Control: no-cache, no-store.
Content-type: application/json.
Content-Length: 61.
.


T 178.62.127.227:8088 - 178.62.127.227:44972 [AP]
{
  message: Application or extension must be specified
}


On Thu, Dec 18, 2014 at 9:48 AM, Nir Simionovich nir.simionov...@gmail.com
wrote:

 One more thing - per your recommendations, I'm trying to re-implement
 app_dial using ARI.

 Now, if I read you all right, the process should be:

 1. Get a call into Asterisk from an external phone
 2. Create a new bridge
 3. Put the call into the newly created bridge
 4. Originate a new call
 5. Put the new call into the existing bridge

 So, 1,2,3 work just fine - then you get to 4. According to the docs, I can
 originate a channel with only the endpoint defined.
 However, that doesn't seem to work:

 T 178.62.127.227:44938 - 178.62.127.227:8088 [AP]
 POST /ari/channels HTTP/1.1.
 Authorization: Basic dGVzdDp0ZXN0.
 Host: 178.62.127.227:8088.
 Content-Length: 85.
 Accept: application/json.
 Content-Type: application/json.
 .
 {endpoint:Local\/1000@demo
 ,channelId:participant,variables:{var1:var1}}

 T 178.62.127.227:8088 - 178.62.127.227:44938 [AP]
 HTTP/1.1 400 Bad Request.
 Server: Asterisk/SVN-trunk-r429683M.
 Date: Thu, 18 Dec 2014 07:41:59 GMT.
 Cache-Control: no-cache, no-store.
 Content-type: application/json.
 Content-Length: 61.
 .


 T 178.62.127.227:8088 - 178.62.127.227:44938 [AP]
 {
   message: Application or extension must be specified
 }

 Am I missing something here? or is this a bug?



 On Thu, Dec 18, 2014 at 8:59 AM, Nir Simionovich 
 nir.simionov...@gmail.com wrote:

 I see your point now - that makes more sense. It was fairly clear to me
 that ast_bridge_config is somewhat of a legacy data structure,
 but I was assuming that in some respect it was used in ARI as well. What
 your actually saying is that ARI bypasses all of the legacy
 stuff and interacts directly with the bridge core, and that's why it
 doesn't support that data structure. So technically, accessing bridge
 configuration for a Legacy (Dial, Queue, FollowMe) is a fairly complex
 task, as they don't see the same information space.

 This now raises a slightly off-topic discussion - wouldn't it beneficial
 to provide some form of ARI access to some of the legacy stuff
 as well? On one hand, we don't really want to do that - as we're trying
 to push people into proper usage of ARI and Asterisk, however,
 my heart goes out to the legacy stuff, that if we don't cater to, will
 become a caveat.

 I will explain. About 6 years I've built a large scale Asterisk based
 dialer for a customer. When I say large scale, I meant humongous
 in 2008 terms - 2500 concurrent calls. Now, that dialer relied heavily on
 AMI (of course) and AGI. It was originally built on Asterisk 1.6.
 Recently, the customer came back to me, asking me to upgrade their system
 to Asterisk 11, specifically for security reasons. I then
 looked at the code, realizing that the customer had wrote some stuff
 using MeetMe and some of the deprecated app_queue stuff.
 I indicated to them that their legacy code should be migrated as well.
 Customer looked at it, realized that apart from upgrading Asterisk,
 they will have about 6 months worth of coding to migrate their stuff to
 the new constructs - the entire project caved. We just upgraded
 to latest version of the 1.6 branch, and the customer is now evaluating
 1.8 - in other words, not supporting the legacy stuff in some
 respect will at some point bite us in the ass.

 I realize this is very much a leadership question, not a technical nor
 operational.

 New question: Do we want to enable legacy features inside ARI?

 Nir

 On Thu, Dec 18, 2014 at 1:26 AM, Mark Michelson mmichel...@digium.com
 wrote:

  On 12/17/2014 05:01 PM, Nir Simionovich wrote:

 snip

  Let's try to stick to the tech for now and answer the first two
 questions:

1. Is there a way to obtain the information in ast_bridge_config for
 each of the iterated bridges?


 ast_bridge_config is not used at all for Stasis bridges.
 ast_bridge_config describes bridge features that basic bridges use based on
 Dial(), Queue(), and FollowMe() features. For instance, when Dial is called
 with the 't' and 'T' options, the ast_bridge_config indicates that the
 caller and callee can perform DTMF transfers based on features.conf
 settings.

 For Stasis bridges, the idea of using ast_bridge_config does not make
 sense for several reasons

 1) Stasis applications are intended to be fully in control of 

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Kaloyan Kovachev

Hi,

On 2014-12-18 01:01, Nir Simionovich wrote:

Let's try to stick to the tech for now and answer the first two 
questions:


1. Is there a way to obtain the information in ast_bridge_config for 
each of the iterated bridges?
2. Is there a way to manipulate the configuration of the bridge, via 
modifying the associated bridge configuration in real time?


Nir


You may take a look at my old RTCC patch for Dial() [1]:
In the last version [2] I have ended with adding the bridge_config and 
both channels to a data store, which is accessed from a scheduled 
callback and modifies the call limit.
Once you have the data store attached to the channel it is easy to 
access it from a hook or another thread/app


[1] https://issues.asterisk.org/jira/browse/ASTERISK-6175
[2] 
https://issues.asterisk.org/jira/secure/attachment/40666/rtcc_trunk_327742.diff


--
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
  http://lists.digium.com/mailman/listinfo/asterisk-dev


Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Nir Simionovich
In deed, that is interesting - but truly stirs away from ARI - not
something that I'm trying to do.

On Thu, Dec 18, 2014 at 1:00 PM, Kaloyan Kovachev kkovac...@varna.net
wrote:

 Hi,

 On 2014-12-18 01:01, Nir Simionovich wrote:

  Let's try to stick to the tech for now and answer the first two questions:

 1. Is there a way to obtain the information in ast_bridge_config for each
 of the iterated bridges?
 2. Is there a way to manipulate the configuration of the bridge, via
 modifying the associated bridge configuration in real time?

 Nir


 You may take a look at my old RTCC patch for Dial() [1]:
 In the last version [2] I have ended with adding the bridge_config and
 both channels to a data store, which is accessed from a scheduled callback
 and modifies the call limit.
 Once you have the data store attached to the channel it is easy to access
 it from a hook or another thread/app

 [1] https://issues.asterisk.org/jira/browse/ASTERISK-6175
 [2] https://issues.asterisk.org/jira/secure/attachment/40666/
 rtcc_trunk_327742.diff


 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Nir Simionovich
Ahh...

On Thu, Dec 18, 2014 at 1:32 PM, Kaloyan Kovachev kkovac...@varna.net
wrote:

 I meant that for accessing bridge configuration for a Legacy (Dial,
 Queue, FollowMe) from your other email

 On 2014-12-18 13:26, Nir Simionovich wrote:

  In deed, that is interesting - but truly stirs away from ARI - not
 something that I'm trying to do.

 On Thu, Dec 18, 2014 at 1:00 PM, Kaloyan Kovachev kkovac...@varna.netwrote:
 Hi,

 On 2014-12-18 01:01, Nir Simionovich wrote:

 Let's try to stick to the tech for now and answer the first two questions:

 1. Is there a way to obtain the information in ast_bridge_config for each
 of the iterated bridges?
 2. Is there a way to manipulate the configuration of the bridge, via
 modifying the associated bridge configuration in real time?

 Nir You may take a look at my old RTCC patch for Dial() [1]:
 In the last version [2] I have ended with adding the bridge_config and
 both channels to a data store, which is accessed from a scheduled callback
 and modifies the call limit.
 Once you have the data store attached to the channel it is easy to access
 it from a hook or another thread/app

 [1] https://issues.asterisk.org/jira/browse/ASTERISK-6175 [1]
 [2] https://issues.asterisk.org/jira/secure/attachment/40666/
 rtcc_trunk_327742.diff [2]

 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com [3] --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
 http://lists.digium.com/mailman/listinfo/asterisk-dev [4]




 Links:
 --
 [1] https://issues.asterisk.org/jira/browse/ASTERISK-6175
 [2] https://issues.asterisk.org/jira/secure/attachment/40666/
 rtcc_trunk_327742.diff
 [3] http://www.api-digital.com
 [4] http://lists.digium.com/mailman/listinfo/asterisk-dev


 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Paul Belanger
On Thu, Dec 18, 2014 at 1:59 AM, Nir Simionovich
nir.simionov...@gmail.com wrote:
 I see your point now - that makes more sense. It was fairly clear to me that
 ast_bridge_config is somewhat of a legacy data structure,
 but I was assuming that in some respect it was used in ARI as well. What
 your actually saying is that ARI bypasses all of the legacy
 stuff and interacts directly with the bridge core, and that's why it doesn't
 support that data structure. So technically, accessing bridge
 configuration for a Legacy (Dial, Queue, FollowMe) is a fairly complex task,
 as they don't see the same information space.

 This now raises a slightly off-topic discussion - wouldn't it beneficial to
 provide some form of ARI access to some of the legacy stuff
 as well? On one hand, we don't really want to do that - as we're trying to
 push people into proper usage of ARI and Asterisk, however,
 my heart goes out to the legacy stuff, that if we don't cater to, will
 become a caveat.

 I will explain. About 6 years I've built a large scale Asterisk based dialer
 for a customer. When I say large scale, I meant humongous
 in 2008 terms - 2500 concurrent calls. Now, that dialer relied heavily on
 AMI (of course) and AGI. It was originally built on Asterisk 1.6.
 Recently, the customer came back to me, asking me to upgrade their system to
 Asterisk 11, specifically for security reasons. I then
 looked at the code, realizing that the customer had wrote some stuff using
 MeetMe and some of the deprecated app_queue stuff.
 I indicated to them that their legacy code should be migrated as well.
 Customer looked at it, realized that apart from upgrading Asterisk,
 they will have about 6 months worth of coding to migrate their stuff to the
 new constructs - the entire project caved. We just upgraded
 to latest version of the 1.6 branch, and the customer is now evaluating 1.8
 - in other words, not supporting the legacy stuff in some
 respect will at some point bite us in the ass.

 I realize this is very much a leadership question, not a technical nor
 operational.

 New question: Do we want to enable legacy features inside ARI?

New answer: I don't believe so.

I think this issue / question is the hardest thing to understand about
ARI.  There really isn't any sort of link to existing Asterisk
application or features; not yet any ways.  Somebody has to build it
again a top of ARI.

When I first dreamed of using ARI I was looking at it from a
configuration management tool mindset.  Oh, I could create a new peer
in chan_sip over HTTP or let me reconfigure features.conf using ARI.
However, as I started playing with it more I found that was not what
it did.  And, changing it to do something like that doesn't feel like
the right approach.

Now, that being said. Creating some sort of interface to control
sorcery objects, now that would be cool.  Having sorcery connect to
redis and change key / values directly in redis for sip peers would be
hotness.  However, I'm not sure I would want to have Asterisk serve up
that interface directly.  Feels more like an external application
would serve up the REST interface into redis, allowing the user to
change key/pairs.

I also believe, until there are some standard ARI libraries /
application (for example app_dial replacement). It will feel like a
large task to build anything in ARI, because some of the core
application basically need to be written from scratch.  And I think
this is the main reason people are slow to move to ARI or fearful from
dropping the dialplan.  Because doing:

exten = s,1,NoOp()
same = n,Dial(SIP/f...@example.org)

is a lot easier then origination a channel over ARI, creating bridges
and playing any tones needed using ARI.  Easier might not be the right
work, more steps required is.

-- 
Paul Belanger | PolyBeacon, Inc.
Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
Github: https://github.com/pabelanger | Twitter: https://twitter.com/pabelanger

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev


Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Paul Belanger
On Thu, Dec 18, 2014 at 2:48 AM, Nir Simionovich
nir.simionov...@gmail.com wrote:
 One more thing - per your recommendations, I'm trying to re-implement
 app_dial using ARI.

 Now, if I read you all right, the process should be:

 1. Get a call into Asterisk from an external phone
 2. Create a new bridge
 3. Put the call into the newly created bridge
 4. Originate a new call
 5. Put the new call into the existing bridge

 So, 1,2,3 work just fine - then you get to 4. According to the docs, I can
 originate a channel with only the endpoint defined.
 However, that doesn't seem to work:

 T 178.62.127.227:44938 - 178.62.127.227:8088 [AP]
 POST /ari/channels HTTP/1.1.
 Authorization: Basic dGVzdDp0ZXN0.
 Host: 178.62.127.227:8088.
 Content-Length: 85.
 Accept: application/json.
 Content-Type: application/json.
 .
 {endpoint:Local\/1000@demo,channelId:participant,variables:{var1:var1}}

 T 178.62.127.227:8088 - 178.62.127.227:44938 [AP]
 HTTP/1.1 400 Bad Request.
 Server: Asterisk/SVN-trunk-r429683M.
 Date: Thu, 18 Dec 2014 07:41:59 GMT.
 Cache-Control: no-cache, no-store.
 Content-type: application/json.
 Content-Length: 61.
 .


 T 178.62.127.227:8088 - 178.62.127.227:44938 [AP]
 {
   message: Application or extension must be specified
 }

 Am I missing something here? or is this a bug?

You need to also pass the app parameter in this case. So Asterisk
knows where to send events.

-- 
Paul Belanger | PolyBeacon, Inc.
Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
Github: https://github.com/pabelanger | Twitter: https://twitter.com/pabelanger

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev


Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Leif Madsen
On 18 December 2014 at 11:07, Paul Belanger paul.belan...@polybeacon.com
wrote:

 On Thu, Dec 18, 2014 at 1:59 AM, Nir Simionovich
 nir.simionov...@gmail.com wrote:
  New question: Do we want to enable legacy features inside ARI?
 
 New answer: I don't believe so.

 I think this issue / question is the hardest thing to understand about
 ARI.  There really isn't any sort of link to existing Asterisk
 application or features; not yet any ways.  Somebody has to build it
 again a top of ARI.

 When I first dreamed of using ARI I was looking at it from a
 configuration management tool mindset.  Oh, I could create a new peer
 in chan_sip over HTTP or let me reconfigure features.conf using ARI.
 However, as I started playing with it more I found that was not what
 it did.  And, changing it to do something like that doesn't feel like
 the right approach.

 Now, that being said. Creating some sort of interface to control
 sorcery objects, now that would be cool.  Having sorcery connect to
 redis and change key / values directly in redis for sip peers would be
 hotness.  However, I'm not sure I would want to have Asterisk serve up
 that interface directly.  Feels more like an external application
 would serve up the REST interface into redis, allowing the user to
 change key/pairs.

 I also believe, until there are some standard ARI libraries /
 application (for example app_dial replacement). It will feel like a
 large task to build anything in ARI, because some of the core
 application basically need to be written from scratch.  And I think
 this is the main reason people are slow to move to ARI or fearful from
 dropping the dialplan.  Because doing:

 exten = s,1,NoOp()
 same = n,Dial(SIP/f...@example.org)

 is a lot easier then origination a channel over ARI, creating bridges
 and playing any tones needed using ARI.  Easier might not be the right
 work, more steps required is.


I also agree that we do not want to start making ARI start talking to
legacy applications.

As discussed at AstriDevCon, the push is really to start making Asterisk a
media communications platform. The way to do that is to move away from the
dialplan centric driven applications and to move to a decentralized model
of applications and business logic being separated from Asterisk, and
essentially making Asterisk much dumber in terms of the actual business
logic and routing logic, and making it a lean mean media communications
machine. The way forward sometimes is to stop looking back.

Currently both AMI and AGI are still happily co-existant in Asterisk, and
should be considered the defacto interface to traditional methods of
writing Asterisk business logic (dialplan, etc). When flipping to ARI, it
is a different mind set that does take some time to get around. Much like
Paul I had my own preconceived notions about what ARI was and was initially
disappointed it didn't match what I thought it should have been. However
over the last few months of watching what Paul has been doing along with
some small side POC stuff to better understand what ARI is intended for, it
definitely has become a lot clearer.

At the most basic levels, ARI to me is a bridge control interface that
allows you to hook channels together while not worrying about transcoding,
media characteristics etc. You have two or more channels that may or may
not speak the same language, and your external applications stick them
together, and Asterisk acts as the universal translator for those channels.
By writing all your business logic and controls outside of Asterisk, it
makes the API much simpler to interoperate with, and allows great scaling
possibilities.

Admittedly I'm still a bit naive on a lot of the ARI front, but one thing
my gut tells me, is it is a new interface, and should not be confused as a
replacement to the legacy (term used loosely) methods of building Asterisk
systems. This is one of those situations that I feel avoiding legacy and
backwards compatibility with the traditional methods is going to really
open up a better realm of possibilities with ARI. If someone truly just
needs an HTTP based interface for controlling dialplan and such, I feel a
translation application (library) should just be written for AMI and AGI
that permits that and has that goal. Overloading what ARI is supposed to be
doing is a step backwards in my opinion.

--
Leif The Dialplan Is Dead Madsen
-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Nir Simionovich
Now, this is why I love Open Source - opinions, thoughts and most
importantly, acceptance.

I can totally see where the general idea is going here, and that is what we
all agreed during AstriDevCon this year.


On Thu, Dec 18, 2014 at 6:31 PM, Leif Madsen lmad...@thinkingphones.com
wrote:

 On 18 December 2014 at 11:07, Paul Belanger paul.belan...@polybeacon.com
 wrote:

 On Thu, Dec 18, 2014 at 1:59 AM, Nir Simionovich
 nir.simionov...@gmail.com wrote:
  New question: Do we want to enable legacy features inside ARI?
 
 New answer: I don't believe so.

 I think this issue / question is the hardest thing to understand about
 ARI.  There really isn't any sort of link to existing Asterisk
 application or features; not yet any ways.  Somebody has to build it
 again a top of ARI.

 When I first dreamed of using ARI I was looking at it from a
 configuration management tool mindset.  Oh, I could create a new peer
 in chan_sip over HTTP or let me reconfigure features.conf using ARI.
 However, as I started playing with it more I found that was not what
 it did.  And, changing it to do something like that doesn't feel like
 the right approach.

 Now, that being said. Creating some sort of interface to control
 sorcery objects, now that would be cool.  Having sorcery connect to
 redis and change key / values directly in redis for sip peers would be
 hotness.  However, I'm not sure I would want to have Asterisk serve up
 that interface directly.  Feels more like an external application
 would serve up the REST interface into redis, allowing the user to
 change key/pairs.

 I also believe, until there are some standard ARI libraries /
 application (for example app_dial replacement). It will feel like a
 large task to build anything in ARI, because some of the core
 application basically need to be written from scratch.  And I think
 this is the main reason people are slow to move to ARI or fearful from
 dropping the dialplan.  Because doing:

 exten = s,1,NoOp()
 same = n,Dial(SIP/f...@example.org)

 is a lot easier then origination a channel over ARI, creating bridges
 and playing any tones needed using ARI.  Easier might not be the right
 work, more steps required is.


 I also agree that we do not want to start making ARI start talking to
 legacy applications.

 As discussed at AstriDevCon, the push is really to start making Asterisk a
 media communications platform. The way to do that is to move away from the
 dialplan centric driven applications and to move to a decentralized model
 of applications and business logic being separated from Asterisk, and
 essentially making Asterisk much dumber in terms of the actual business
 logic and routing logic, and making it a lean mean media communications
 machine. The way forward sometimes is to stop looking back.

 Currently both AMI and AGI are still happily co-existant in Asterisk, and
 should be considered the defacto interface to traditional methods of
 writing Asterisk business logic (dialplan, etc). When flipping to ARI, it
 is a different mind set that does take some time to get around. Much like
 Paul I had my own preconceived notions about what ARI was and was initially
 disappointed it didn't match what I thought it should have been. However
 over the last few months of watching what Paul has been doing along with
 some small side POC stuff to better understand what ARI is intended for, it
 definitely has become a lot clearer.

 At the most basic levels, ARI to me is a bridge control interface that
 allows you to hook channels together while not worrying about transcoding,
 media characteristics etc. You have two or more channels that may or may
 not speak the same language, and your external applications stick them
 together, and Asterisk acts as the universal translator for those channels.
 By writing all your business logic and controls outside of Asterisk, it
 makes the API much simpler to interoperate with, and allows great scaling
 possibilities.

 Admittedly I'm still a bit naive on a lot of the ARI front, but one thing
 my gut tells me, is it is a new interface, and should not be confused as a
 replacement to the legacy (term used loosely) methods of building Asterisk
 systems. This is one of those situations that I feel avoiding legacy and
 backwards compatibility with the traditional methods is going to really
 open up a better realm of possibilities with ARI. If someone truly just
 needs an HTTP based interface for controlling dialplan and such, I feel a
 translation application (library) should just be written for AMI and AGI
 that permits that and has that goal. Overloading what ARI is supposed to be
 doing is a step backwards in my opinion.

 --
 Leif The Dialplan Is Dead Madsen

 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Matthew Jordan
On Thu, Dec 18, 2014 at 10:31 AM, Leif Madsen lmad...@thinkingphones.com
wrote:
 On 18 December 2014 at 11:07, Paul Belanger paul.belan...@polybeacon.com
 wrote:

 On Thu, Dec 18, 2014 at 1:59 AM, Nir Simionovich
 nir.simionov...@gmail.com wrote:
  New question: Do we want to enable legacy features inside ARI?
 
 New answer: I don't believe so.

 I think this issue / question is the hardest thing to understand about
 ARI.  There really isn't any sort of link to existing Asterisk
 application or features; not yet any ways.  Somebody has to build it
 again a top of ARI.

 When I first dreamed of using ARI I was looking at it from a
 configuration management tool mindset.  Oh, I could create a new peer
 in chan_sip over HTTP or let me reconfigure features.conf using ARI.
 However, as I started playing with it more I found that was not what
 it did.  And, changing it to do something like that doesn't feel like
 the right approach.

 Now, that being said. Creating some sort of interface to control
 sorcery objects, now that would be cool.  Having sorcery connect to
 redis and change key / values directly in redis for sip peers would be
 hotness.  However, I'm not sure I would want to have Asterisk serve up
 that interface directly.  Feels more like an external application
 would serve up the REST interface into redis, allowing the user to
 change key/pairs.

 I also believe, until there are some standard ARI libraries /
 application (for example app_dial replacement). It will feel like a
 large task to build anything in ARI, because some of the core
 application basically need to be written from scratch.  And I think
 this is the main reason people are slow to move to ARI or fearful from
 dropping the dialplan.  Because doing:

 exten = s,1,NoOp()
 same = n,Dial(SIP/f...@example.org)

 is a lot easier then origination a channel over ARI, creating bridges
 and playing any tones needed using ARI.  Easier might not be the right
 work, more steps required is.


 I also agree that we do not want to start making ARI start talking to
legacy
 applications.

 As discussed at AstriDevCon, the push is really to start making Asterisk a
 media communications platform. The way to do that is to move away from the
 dialplan centric driven applications and to move to a decentralized model
of
 applications and business logic being separated from Asterisk, and
 essentially making Asterisk much dumber in terms of the actual business
 logic and routing logic, and making it a lean mean media communications
 machine. The way forward sometimes is to stop looking back.

 Currently both AMI and AGI are still happily co-existant in Asterisk, and
 should be considered the defacto interface to traditional methods of
writing
 Asterisk business logic (dialplan, etc). When flipping to ARI, it is a
 different mind set that does take some time to get around. Much like Paul
I
 had my own preconceived notions about what ARI was and was initially
 disappointed it didn't match what I thought it should have been. However
 over the last few months of watching what Paul has been doing along with
 some small side POC stuff to better understand what ARI is intended for,
it
 definitely has become a lot clearer.

 At the most basic levels, ARI to me is a bridge control interface that
 allows you to hook channels together while not worrying about transcoding,
 media characteristics etc. You have two or more channels that may or may
not
 speak the same language, and your external applications stick them
together,
 and Asterisk acts as the universal translator for those channels. By
writing
 all your business logic and controls outside of Asterisk, it makes the API
 much simpler to interoperate with, and allows great scaling possibilities.

 Admittedly I'm still a bit naive on a lot of the ARI front, but one thing
my
 gut tells me, is it is a new interface, and should not be confused as a
 replacement to the legacy (term used loosely) methods of building Asterisk
 systems. This is one of those situations that I feel avoiding legacy and
 backwards compatibility with the traditional methods is going to really
open
 up a better realm of possibilities with ARI. If someone truly just needs
an
 HTTP based interface for controlling dialplan and such, I feel a
translation
 application (library) should just be written for AMI and AGI that permits
 that and has that goal. Overloading what ARI is supposed to be doing is a
 step backwards in my opinion.

Exposing Asterisk features (and that term encompasses 'features.conf'
features as well as other things) in the short run would add more features
to the API, but in the long run will result in severely limiting the ARI
API - and making it really difficult to build ARI applications. I think
everyone is on this page from this thread, but for the sake of posterity,
I'll go into some of where this would fall apart if we tried to put
'features' into ARI.

Integral to ARI is the concept of control. When a channel is in 

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-18 Thread Nir Simionovich
Matt,

  I think your entire email should be put on the wiki, maybe not in its
current format, but the contents are imperative
for the future. This is actually the first ever detailed explanation I've
ever read as to why ARI shouldn't do all sorts
of things - which from an external (none core developer) point of view -
would seem reasonable.



On Thu, Dec 18, 2014 at 8:38 PM, Matthew Jordan mjor...@digium.com wrote:



 On Thu, Dec 18, 2014 at 10:31 AM, Leif Madsen lmad...@thinkingphones.com
 wrote:
  On 18 December 2014 at 11:07, Paul Belanger 
 paul.belan...@polybeacon.com
  wrote:
 
  On Thu, Dec 18, 2014 at 1:59 AM, Nir Simionovich
  nir.simionov...@gmail.com wrote:
   New question: Do we want to enable legacy features inside ARI?
  
  New answer: I don't believe so.
 
  I think this issue / question is the hardest thing to understand about
  ARI.  There really isn't any sort of link to existing Asterisk
  application or features; not yet any ways.  Somebody has to build it
  again a top of ARI.
 
  When I first dreamed of using ARI I was looking at it from a
  configuration management tool mindset.  Oh, I could create a new peer
  in chan_sip over HTTP or let me reconfigure features.conf using ARI.
  However, as I started playing with it more I found that was not what
  it did.  And, changing it to do something like that doesn't feel like
  the right approach.
 
  Now, that being said. Creating some sort of interface to control
  sorcery objects, now that would be cool.  Having sorcery connect to
  redis and change key / values directly in redis for sip peers would be
  hotness.  However, I'm not sure I would want to have Asterisk serve up
  that interface directly.  Feels more like an external application
  would serve up the REST interface into redis, allowing the user to
  change key/pairs.
 
  I also believe, until there are some standard ARI libraries /
  application (for example app_dial replacement). It will feel like a
  large task to build anything in ARI, because some of the core
  application basically need to be written from scratch.  And I think
  this is the main reason people are slow to move to ARI or fearful from
  dropping the dialplan.  Because doing:
 
  exten = s,1,NoOp()
  same = n,Dial(SIP/f...@example.org)
 
  is a lot easier then origination a channel over ARI, creating bridges
  and playing any tones needed using ARI.  Easier might not be the right
  work, more steps required is.
 
 
  I also agree that we do not want to start making ARI start talking to
 legacy
  applications.
 
  As discussed at AstriDevCon, the push is really to start making Asterisk
 a
  media communications platform. The way to do that is to move away from
 the
  dialplan centric driven applications and to move to a decentralized
 model of
  applications and business logic being separated from Asterisk, and
  essentially making Asterisk much dumber in terms of the actual business
  logic and routing logic, and making it a lean mean media communications
  machine. The way forward sometimes is to stop looking back.
 
  Currently both AMI and AGI are still happily co-existant in Asterisk, and
  should be considered the defacto interface to traditional methods of
 writing
  Asterisk business logic (dialplan, etc). When flipping to ARI, it is a
  different mind set that does take some time to get around. Much like
 Paul I
  had my own preconceived notions about what ARI was and was initially
  disappointed it didn't match what I thought it should have been. However
  over the last few months of watching what Paul has been doing along with
  some small side POC stuff to better understand what ARI is intended for,
 it
  definitely has become a lot clearer.
 
  At the most basic levels, ARI to me is a bridge control interface that
  allows you to hook channels together while not worrying about
 transcoding,
  media characteristics etc. You have two or more channels that may or may
 not
  speak the same language, and your external applications stick them
 together,
  and Asterisk acts as the universal translator for those channels. By
 writing
  all your business logic and controls outside of Asterisk, it makes the
 API
  much simpler to interoperate with, and allows great scaling
 possibilities.
 
  Admittedly I'm still a bit naive on a lot of the ARI front, but one
 thing my
  gut tells me, is it is a new interface, and should not be confused as a
  replacement to the legacy (term used loosely) methods of building
 Asterisk
  systems. This is one of those situations that I feel avoiding legacy and
  backwards compatibility with the traditional methods is going to really
 open
  up a better realm of possibilities with ARI. If someone truly just needs
 an
  HTTP based interface for controlling dialplan and such, I feel a
 translation
  application (library) should just be written for AMI and AGI that permits
  that and has that goal. Overloading what ARI is supposed to be doing is a
  step backwards in my 

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Paul Belanger
On Wed, Dec 17, 2014 at 3:16 PM, Nir Simionovich
nir.simionov...@gmail.com wrote:
 Hi All,

   After shipping out my first patch to ARI, I became hungry :-)

   So, now I've set up a slightly higher goal, adding a much required feature
 for ARI. I'll describe the problem first, then
 I have some questions.

   The Asterisk dial application enables us to limit the duration of the call
 and play a warning sound. Once this had been
 set, as far as I know, you can't modify these values externally. When the
 feature was originally introduced, over 10 years
 ago, the goal was simple: enable a calling card system to limit the call
 according to a credit line.

   As time went by, people realized that this feature is useful, however
 limited. In today's mobile application era, when a
 VoIP phone can actually purchase credit while on the actual call, we need a
 way to control this from an external source.

   Now, I've started digging into the code, and I've managed to understand
 that following (feel free to bash me if I'm wrong):

   1. The time limits are maintained at the bridge structure, not at the
 channel - using the ast_bridge_config data structure
   2. The ARI bridges GET method only retrieves a list of bridges and their
 associated channels, not their configurations

   So, assuming that I'm reading the ast_ari_bridges_list function from
 resouce_bridges.c correctly, we retrieve
 a snapshot of all active bridges via the snapshots variable (if you can call
 it that). The output is built by iterating through it.

   Now, my questions:

   1. Is there a way to obtain the information in ast_bridge_config for each
 of the iterated bridges, then output it via the JSON response?
   2. Is there a way to manipulate the configuration of the bridge, via
 modifying the associated bridge configuration?

   The floor is now open :-)

I am a little confused what you are asking.  You want to add some sort
of lifetime support to bridge within asterisk, using ARI?

-- 
Paul Belanger | PolyBeacon, Inc.
Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
Github: https://github.com/pabelanger | Twitter: https://twitter.com/pabelanger

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev


Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Nir Simionovich
Well,

  In simple words yes. To be more specific, I'd like to do something like
this:

1. Have a simple dialplan that will dialout using the L parameter in Dial
application
2. Have ARI bridge list function retrieve not only the list of active
bridges, but also their allocated duration timers - if assigned
3. Provide a means via ARI to manipulate the duration timers

Nir

On Wed, Dec 17, 2014 at 10:37 PM, Paul Belanger 
paul.belan...@polybeacon.com wrote:

 On Wed, Dec 17, 2014 at 3:16 PM, Nir Simionovich
 nir.simionov...@gmail.com wrote:
  Hi All,
 
After shipping out my first patch to ARI, I became hungry :-)
 
So, now I've set up a slightly higher goal, adding a much required
 feature
  for ARI. I'll describe the problem first, then
  I have some questions.
 
The Asterisk dial application enables us to limit the duration of the
 call
  and play a warning sound. Once this had been
  set, as far as I know, you can't modify these values externally. When the
  feature was originally introduced, over 10 years
  ago, the goal was simple: enable a calling card system to limit the call
  according to a credit line.
 
As time went by, people realized that this feature is useful, however
  limited. In today's mobile application era, when a
  VoIP phone can actually purchase credit while on the actual call, we
 need a
  way to control this from an external source.
 
Now, I've started digging into the code, and I've managed to understand
  that following (feel free to bash me if I'm wrong):
 
1. The time limits are maintained at the bridge structure, not at the
  channel - using the ast_bridge_config data structure
2. The ARI bridges GET method only retrieves a list of bridges and
 their
  associated channels, not their configurations
 
So, assuming that I'm reading the ast_ari_bridges_list function from
  resouce_bridges.c correctly, we retrieve
  a snapshot of all active bridges via the snapshots variable (if you can
 call
  it that). The output is built by iterating through it.
 
Now, my questions:
 
1. Is there a way to obtain the information in ast_bridge_config for
 each
  of the iterated bridges, then output it via the JSON response?
2. Is there a way to manipulate the configuration of the bridge, via
  modifying the associated bridge configuration?
 
The floor is now open :-)
 
 I am a little confused what you are asking.  You want to add some sort
 of lifetime support to bridge within asterisk, using ARI?

 --
 Paul Belanger | PolyBeacon, Inc.
 Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
 Github: https://github.com/pabelanger | Twitter:
 https://twitter.com/pabelanger

 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Paul Belanger
On Wed, Dec 17, 2014 at 3:46 PM, Nir Simionovich
nir.simionov...@gmail.com wrote:
 Well,

   In simple words yes. To be more specific, I'd like to do something like
 this:

 1. Have a simple dialplan that will dialout using the L parameter in Dial
 application
 2. Have ARI bridge list function retrieve not only the list of active
 bridges, but also their allocated duration timers - if assigned
 3. Provide a means via ARI to manipulate the duration timers

Correct me if I am wrong, but I don't think this will work.  Any
bridge or channel from your dialplan would not be controlled by
stasis.  And since it is not in stasis, ARI cannot modify it. I think
the general idea was to build a new app_dial atop of ARI, then your
application would provide that functionality to control the L
parameter.

-- 
Paul Belanger | PolyBeacon, Inc.
Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
Github: https://github.com/pabelanger | Twitter: https://twitter.com/pabelanger

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev


Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Phil Mickelson
I agree with Paul 100%.  Given my experience with ARI over the last year
and how easy it is to create these apps I would think you could avoid the
dialplan completely and easily create a routine to do exactly what you want.

1.  You would know when the call started and was connected.
2.  You can easily play a sound, any sound, to either end of the connection
or to both.
3.  You can disconnect the call when you want.
4.  I'm not sure given your requirements but you could even allow the
caller (or callee) to put funds in their account to allow for more time.

ARI is the way to go!  IMHO.

Phil M


On Wed, Dec 17, 2014 at 3:58 PM, Paul Belanger paul.belan...@polybeacon.com
 wrote:

 On Wed, Dec 17, 2014 at 3:46 PM, Nir Simionovich
 nir.simionov...@gmail.com wrote:
  Well,
 
In simple words yes. To be more specific, I'd like to do something like
  this:
 
  1. Have a simple dialplan that will dialout using the L parameter in Dial
  application
  2. Have ARI bridge list function retrieve not only the list of active
  bridges, but also their allocated duration timers - if assigned
  3. Provide a means via ARI to manipulate the duration timers
 
 Correct me if I am wrong, but I don't think this will work.  Any
 bridge or channel from your dialplan would not be controlled by
 stasis.  And since it is not in stasis, ARI cannot modify it. I think
 the general idea was to build a new app_dial atop of ARI, then your
 application would provide that functionality to control the L
 parameter.

 --
 Paul Belanger | PolyBeacon, Inc.
 Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
 Github: https://github.com/pabelanger | Twitter:
 https://twitter.com/pabelanger

 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Nir Simionovich
Ok, I'll start with this - I agree with the both of you, ARI is the right
way to go.

However, when I look at ARI, I see somewhat of a Hybrid. When I say hybrid
I mean, a tool that enables me to do stuff,
both inside and outside of the Stasis construct. Example, ARI provides a
channels API, enabling you to originate a call.
If ARI was only about stasis, why did we enable the classic
application/extension, we could have easily just said: oh,
originate the call and dump it into a Stasis app - but that didn't happen.
Instead, you put the call into a dialplan or an application,
which in turn, will call the Stasis app (if truly required).

My point is this, if the ability exists and can be added, why not? It
doesn't break anything that's already in there, it adds much
needed functionality and it makes ARI richer in comparison to its
predecessor AMI, which people still have a hard time figuring
out why they should move to ARI.

This kind of feature can be a tipping point.

My 2c on the matter.



On Wed, Dec 17, 2014 at 11:04 PM, Phil Mickelson p...@cbasoftware.com
wrote:

 I agree with Paul 100%.  Given my experience with ARI over the last year
 and how easy it is to create these apps I would think you could avoid the
 dialplan completely and easily create a routine to do exactly what you want.

 1.  You would know when the call started and was connected.
 2.  You can easily play a sound, any sound, to either end of the
 connection or to both.
 3.  You can disconnect the call when you want.
 4.  I'm not sure given your requirements but you could even allow the
 caller (or callee) to put funds in their account to allow for more time.

 ARI is the way to go!  IMHO.

 Phil M


 On Wed, Dec 17, 2014 at 3:58 PM, Paul Belanger 
 paul.belan...@polybeacon.com wrote:

 On Wed, Dec 17, 2014 at 3:46 PM, Nir Simionovich
 nir.simionov...@gmail.com wrote:
  Well,
 
In simple words yes. To be more specific, I'd like to do something
 like
  this:
 
  1. Have a simple dialplan that will dialout using the L parameter in
 Dial
  application
  2. Have ARI bridge list function retrieve not only the list of active
  bridges, but also their allocated duration timers - if assigned
  3. Provide a means via ARI to manipulate the duration timers
 
 Correct me if I am wrong, but I don't think this will work.  Any
 bridge or channel from your dialplan would not be controlled by
 stasis.  And since it is not in stasis, ARI cannot modify it. I think
 the general idea was to build a new app_dial atop of ARI, then your
 application would provide that functionality to control the L
 parameter.

 --
 Paul Belanger | PolyBeacon, Inc.
 Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
 Github: https://github.com/pabelanger | Twitter:
 https://twitter.com/pabelanger

 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev


 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Phil Mickelson
Nir, I agree with you about wondering why does the call go through the
dialplan.  Perhaps someone could answer that?  Or, perhaps give us some
idea if this will change?

In my case, the connection to the dialplan is literally three lines.  The
minimum required.  I never return.

Phil M


On Wed, Dec 17, 2014 at 4:12 PM, Nir Simionovich nir.simionov...@gmail.com
wrote:

 Ok, I'll start with this - I agree with the both of you, ARI is the right
 way to go.

 However, when I look at ARI, I see somewhat of a Hybrid. When I say hybrid
 I mean, a tool that enables me to do stuff,
 both inside and outside of the Stasis construct. Example, ARI provides a
 channels API, enabling you to originate a call.
 If ARI was only about stasis, why did we enable the classic
 application/extension, we could have easily just said: oh,
 originate the call and dump it into a Stasis app - but that didn't
 happen. Instead, you put the call into a dialplan or an application,
 which in turn, will call the Stasis app (if truly required).

 My point is this, if the ability exists and can be added, why not? It
 doesn't break anything that's already in there, it adds much
 needed functionality and it makes ARI richer in comparison to its
 predecessor AMI, which people still have a hard time figuring
 out why they should move to ARI.

 This kind of feature can be a tipping point.

 My 2c on the matter.



 On Wed, Dec 17, 2014 at 11:04 PM, Phil Mickelson p...@cbasoftware.com
 wrote:

 I agree with Paul 100%.  Given my experience with ARI over the last year
 and how easy it is to create these apps I would think you could avoid the
 dialplan completely and easily create a routine to do exactly what you want.

 1.  You would know when the call started and was connected.
 2.  You can easily play a sound, any sound, to either end of the
 connection or to both.
 3.  You can disconnect the call when you want.
 4.  I'm not sure given your requirements but you could even allow the
 caller (or callee) to put funds in their account to allow for more time.

 ARI is the way to go!  IMHO.

 Phil M


 On Wed, Dec 17, 2014 at 3:58 PM, Paul Belanger 
 paul.belan...@polybeacon.com wrote:

 On Wed, Dec 17, 2014 at 3:46 PM, Nir Simionovich
 nir.simionov...@gmail.com wrote:
  Well,
 
In simple words yes. To be more specific, I'd like to do something
 like
  this:
 
  1. Have a simple dialplan that will dialout using the L parameter in
 Dial
  application
  2. Have ARI bridge list function retrieve not only the list of active
  bridges, but also their allocated duration timers - if assigned
  3. Provide a means via ARI to manipulate the duration timers
 
 Correct me if I am wrong, but I don't think this will work.  Any
 bridge or channel from your dialplan would not be controlled by
 stasis.  And since it is not in stasis, ARI cannot modify it. I think
 the general idea was to build a new app_dial atop of ARI, then your
 application would provide that functionality to control the L
 parameter.

 --
 Paul Belanger | PolyBeacon, Inc.
 Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
 Github: https://github.com/pabelanger | Twitter:
 https://twitter.com/pabelanger

 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev


 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev


 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Nir Simionovich
Phil,

  It is one thing to say: I'm interested in advancement, it is completely
a different thing to say: I don't give a damn about backward
compatibility.

  Asterisk is a huge community around the world, shifting the community
from one methodology of thought to another takes time. During that time
of transition, we must think about the fact that some (if not many) will
still stick to the old ways.

  For example, it took over 3 years to deprecate app_meetme - do you
honestly believe it will take the same time to deprecate app_dial? I
suspect
that the answer will be - app_dial will always be there. We may not like
it, but still, it is the simplest way of getting a call out of Asterisk.
Like it or not,
the dialplan will still be here, even 5 years or 10 years from now - it's
the most basic form. In the mean time, we must provide functionality and
robustness - if we don't, we'll become irrelevant.



On Wed, Dec 17, 2014 at 11:16 PM, Phil Mickelson p...@cbasoftware.com
wrote:

 Nir, I agree with you about wondering why does the call go through the
 dialplan.  Perhaps someone could answer that?  Or, perhaps give us some
 idea if this will change?

 In my case, the connection to the dialplan is literally three lines.  The
 minimum required.  I never return.

 Phil M


 On Wed, Dec 17, 2014 at 4:12 PM, Nir Simionovich 
 nir.simionov...@gmail.com wrote:

 Ok, I'll start with this - I agree with the both of you, ARI is the right
 way to go.

 However, when I look at ARI, I see somewhat of a Hybrid. When I say
 hybrid I mean, a tool that enables me to do stuff,
 both inside and outside of the Stasis construct. Example, ARI provides a
 channels API, enabling you to originate a call.
 If ARI was only about stasis, why did we enable the classic
 application/extension, we could have easily just said: oh,
 originate the call and dump it into a Stasis app - but that didn't
 happen. Instead, you put the call into a dialplan or an application,
 which in turn, will call the Stasis app (if truly required).

 My point is this, if the ability exists and can be added, why not? It
 doesn't break anything that's already in there, it adds much
 needed functionality and it makes ARI richer in comparison to its
 predecessor AMI, which people still have a hard time figuring
 out why they should move to ARI.

 This kind of feature can be a tipping point.

 My 2c on the matter.



 On Wed, Dec 17, 2014 at 11:04 PM, Phil Mickelson p...@cbasoftware.com
 wrote:

 I agree with Paul 100%.  Given my experience with ARI over the last year
 and how easy it is to create these apps I would think you could avoid the
 dialplan completely and easily create a routine to do exactly what you want.

 1.  You would know when the call started and was connected.
 2.  You can easily play a sound, any sound, to either end of the
 connection or to both.
 3.  You can disconnect the call when you want.
 4.  I'm not sure given your requirements but you could even allow the
 caller (or callee) to put funds in their account to allow for more time.

 ARI is the way to go!  IMHO.

 Phil M


 On Wed, Dec 17, 2014 at 3:58 PM, Paul Belanger 
 paul.belan...@polybeacon.com wrote:

 On Wed, Dec 17, 2014 at 3:46 PM, Nir Simionovich
 nir.simionov...@gmail.com wrote:
  Well,
 
In simple words yes. To be more specific, I'd like to do something
 like
  this:
 
  1. Have a simple dialplan that will dialout using the L parameter in
 Dial
  application
  2. Have ARI bridge list function retrieve not only the list of active
  bridges, but also their allocated duration timers - if assigned
  3. Provide a means via ARI to manipulate the duration timers
 
 Correct me if I am wrong, but I don't think this will work.  Any
 bridge or channel from your dialplan would not be controlled by
 stasis.  And since it is not in stasis, ARI cannot modify it. I think
 the general idea was to build a new app_dial atop of ARI, then your
 application would provide that functionality to control the L
 parameter.

 --
 Paul Belanger | PolyBeacon, Inc.
 Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
 Github: https://github.com/pabelanger | Twitter:
 https://twitter.com/pabelanger

 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev


 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev


 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Mark Michelson
Regarding Stasis origination: like AMI/CLI/Dialplan origination, Stasis 
origination comes in two flavors.


1) Originate to an application. Unlike with AMI/CLI/Dialplan origination 
to an application, this will always originate to a Stasis application. 
So in a way, this flavor of origination does what Nir expects.


2) Originate to a dialplan location. This functions pretty much exactly 
like AMI/CLI/Dialplan origination to an extension/context/priority. The 
difference here is that your Stasis application gains a subscription to 
the channel that is created, so you have the ability to be notified of 
activities that this channel performs. My guess is that this is intended 
more for deployments that have upgraded Asterisk to use ARI for specific 
applications, but that already have some semblance of dialplan/AGI that 
they want to incorporate. In general, I would expect that someone 
implementing an ARI application from scratch would never use this flavor 
of origination.


Now on to Nir's suggestion regarding bridge lifetimes:

I'm not a fan of adding this to ARI. To me ARI should expose primitive 
operations only, and it's up to library/framework/application writers to 
build it into something more. For instance, you'll notice that we have 
no DTMF-triggered features available in ARI bridges. This is because we 
expose the ability for ARI applications to capture DTMF themselves and 
translate that into their own feature instead. Similarly, with regards 
to bridge lifetimes, any programming language you could ever use to 
write an ARI application will have timing libraries available for you to 
manage the lifetime of a bridge.


The thing that's neat with a REST interface that exposes primitives is 
that it promotes an ecosystem where people can write libraries on top of 
ARI that perform more complex operations. For instance, it would be 
totally possible for someone to write a bridge management library that 
exposed a more complex API where bridges could have a lifetime, could 
play media to participants at given intervals, could have the lifetime 
changed (and play media to the participants letting them know that the 
lifetime changed), and could maybe even allow the bridge to be 
re-created after expiration if a participant takes a certain action 
(like providing more money to a service). Someone else could fork that 
bridge management library and add their own features on top of it.


Instead of having ARI expose the one true way to manage the lifetime 
of bridges, people have a choice between different implementations 
written by others or they can write their own (either from scratch or by 
forking someone else's library) to fit their needs.


On 12/17/2014 03:16 PM, Phil Mickelson wrote:
Nir, I agree with you about wondering why does the call go through the 
dialplan.  Perhaps someone could answer that?  Or, perhaps give us 
some idea if this will change?


In my case, the connection to the dialplan is literally three lines.  
The minimum required.  I never return.


Phil M


On Wed, Dec 17, 2014 at 4:12 PM, Nir Simionovich 
nir.simionov...@gmail.com mailto:nir.simionov...@gmail.com wrote:


Ok, I'll start with this - I agree with the both of you, ARI is
the right way to go.

However, when I look at ARI, I see somewhat of a Hybrid. When I
say hybrid I mean, a tool that enables me to do stuff,
both inside and outside of the Stasis construct. Example, ARI
provides a channels API, enabling you to originate a call.
If ARI was only about stasis, why did we enable the classic
application/extension, we could have easily just said: oh,
originate the call and dump it into a Stasis app - but that
didn't happen. Instead, you put the call into a dialplan or an
application,
which in turn, will call the Stasis app (if truly required).

My point is this, if the ability exists and can be added, why not?
It doesn't break anything that's already in there, it adds much
needed functionality and it makes ARI richer in comparison to its
predecessor AMI, which people still have a hard time figuring
out why they should move to ARI.

This kind of feature can be a tipping point.

My 2c on the matter.



On Wed, Dec 17, 2014 at 11:04 PM, Phil Mickelson
p...@cbasoftware.com mailto:p...@cbasoftware.com wrote:

I agree with Paul 100%.  Given my experience with ARI over the
last year and how easy it is to create these apps I would
think you could avoid the dialplan completely and easily
create a routine to do exactly what you want.

1.  You would know when the call started and was connected.
2.  You can easily play a sound, any sound, to either end of
the connection or to both.
3.  You can disconnect the call when you want.
4.  I'm not sure given your requirements but you could even
allow the caller (or callee) to put funds in their account to
allow for 

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Phil Mickelson
Nir,

I don't disagree with you at all.  All I'd like is another way.  The
current methods don't have to disappear.  It's not either or.  However,
there's also no reason not to explore new methods, is there?

Phil M

On Wed, Dec 17, 2014 at 5:29 PM, Nir Simionovich nir.simionov...@gmail.com
wrote:

 Phil,

   It is one thing to say: I'm interested in advancement, it is
 completely a different thing to say: I don't give a damn about backward
 compatibility.

   Asterisk is a huge community around the world, shifting the community
 from one methodology of thought to another takes time. During that time
 of transition, we must think about the fact that some (if not many) will
 still stick to the old ways.

   For example, it took over 3 years to deprecate app_meetme - do you
 honestly believe it will take the same time to deprecate app_dial? I
 suspect
 that the answer will be - app_dial will always be there. We may not like
 it, but still, it is the simplest way of getting a call out of Asterisk.
 Like it or not,
 the dialplan will still be here, even 5 years or 10 years from now - it's
 the most basic form. In the mean time, we must provide functionality and
 robustness - if we don't, we'll become irrelevant.



 On Wed, Dec 17, 2014 at 11:16 PM, Phil Mickelson p...@cbasoftware.com
 wrote:

 Nir, I agree with you about wondering why does the call go through the
 dialplan.  Perhaps someone could answer that?  Or, perhaps give us some
 idea if this will change?

 In my case, the connection to the dialplan is literally three lines.  The
 minimum required.  I never return.

 Phil M


 On Wed, Dec 17, 2014 at 4:12 PM, Nir Simionovich 
 nir.simionov...@gmail.com wrote:

 Ok, I'll start with this - I agree with the both of you, ARI is the
 right way to go.

 However, when I look at ARI, I see somewhat of a Hybrid. When I say
 hybrid I mean, a tool that enables me to do stuff,
 both inside and outside of the Stasis construct. Example, ARI provides a
 channels API, enabling you to originate a call.
 If ARI was only about stasis, why did we enable the classic
 application/extension, we could have easily just said: oh,
 originate the call and dump it into a Stasis app - but that didn't
 happen. Instead, you put the call into a dialplan or an application,
 which in turn, will call the Stasis app (if truly required).

 My point is this, if the ability exists and can be added, why not? It
 doesn't break anything that's already in there, it adds much
 needed functionality and it makes ARI richer in comparison to its
 predecessor AMI, which people still have a hard time figuring
 out why they should move to ARI.

 This kind of feature can be a tipping point.

 My 2c on the matter.



 On Wed, Dec 17, 2014 at 11:04 PM, Phil Mickelson p...@cbasoftware.com
 wrote:

 I agree with Paul 100%.  Given my experience with ARI over the last
 year and how easy it is to create these apps I would think you could avoid
 the dialplan completely and easily create a routine to do exactly what you
 want.

 1.  You would know when the call started and was connected.
 2.  You can easily play a sound, any sound, to either end of the
 connection or to both.
 3.  You can disconnect the call when you want.
 4.  I'm not sure given your requirements but you could even allow the
 caller (or callee) to put funds in their account to allow for more time.

 ARI is the way to go!  IMHO.

 Phil M


 On Wed, Dec 17, 2014 at 3:58 PM, Paul Belanger 
 paul.belan...@polybeacon.com wrote:

 On Wed, Dec 17, 2014 at 3:46 PM, Nir Simionovich
 nir.simionov...@gmail.com wrote:
  Well,
 
In simple words yes. To be more specific, I'd like to do something
 like
  this:
 
  1. Have a simple dialplan that will dialout using the L parameter in
 Dial
  application
  2. Have ARI bridge list function retrieve not only the list of active
  bridges, but also their allocated duration timers - if assigned
  3. Provide a means via ARI to manipulate the duration timers
 
 Correct me if I am wrong, but I don't think this will work.  Any
 bridge or channel from your dialplan would not be controlled by
 stasis.  And since it is not in stasis, ARI cannot modify it. I think
 the general idea was to build a new app_dial atop of ARI, then your
 application would provide that functionality to control the L
 parameter.

 --
 Paul Belanger | PolyBeacon, Inc.
 Jabber: paul.belan...@polybeacon.com | IRC: pabelanger (Freenode)
 Github: https://github.com/pabelanger | Twitter:
 https://twitter.com/pabelanger

 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev


 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
 

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Nir Simionovich
While I agree with the both of you - I still don't see a reason why not to
do it.

I'll tell you how I see it - I'm looking at this kind of feature from a
cost/performance/benefit ratio.

Does this kind of feature enable a new benefit that didn't exist previously
- yes.
Does it impact the overall performance of Asterisk - probably not.
Is it a low hanging fruit to develop? - I can't answer that yet
Would it take a longer time to develop a bridge manager externally, or
develop the feature? - I can't answer that yet

Currently, I'm trying to evaluate the task - from a
technical/operational/financial reasoning. If Tech/Ops make sense,
but Finance doesn't - it ain't worth doing.

Let's try and discuss for a minute what it would actually take in order to
do this, instead of debating
if we should or shouldn't.

Yes, maybe you'll say - in order to do this, you'll need to do 1, 2, 3, 4
 - and maybe I'll: cool, I'll have a go
at it, and maybe it will go in, and maybe it will not - but that's open
source. Open Source means, we work collaboratively,
we explore things and keep our minds open to ideas and suggestions.

When Leonid and I created PHPARI about 4 months ago, we created it out of a
need for a proper wrapper that
will fit nicely into our projects. I'm currently aware of 10 different
people using it in production - and some of them
already contributed code and structural changes to it. One of the things
people asked us for an OAuth based
ARI proxy, because they like using tokens. Does ARI truly need something
like that - not really. Does ARI
need better security - for sure. Will we shot down the idea down? not at
this point. We first examine what it will
take to do it, technically, then financially - then we decide.

Damn, this is turning into another theological discussion - not really to
be part of this list.

Let's try to stick to the tech for now and answer the first two questions:

  1. Is there a way to obtain the information in ast_bridge_config for each
of the iterated bridges?
  2. Is there a way to manipulate the configuration of the bridge, via
modifying the associated bridge configuration in real time?

Nir

On Thu, Dec 18, 2014 at 12:33 AM, Phil Mickelson p...@cbasoftware.com
wrote:

 Nir,

 I don't disagree with you at all.  All I'd like is another way.  The
 current methods don't have to disappear.  It's not either or.  However,
 there's also no reason not to explore new methods, is there?

 Phil M

 On Wed, Dec 17, 2014 at 5:29 PM, Nir Simionovich 
 nir.simionov...@gmail.com wrote:

 Phil,

   It is one thing to say: I'm interested in advancement, it is
 completely a different thing to say: I don't give a damn about backward
 compatibility.

   Asterisk is a huge community around the world, shifting the community
 from one methodology of thought to another takes time. During that time
 of transition, we must think about the fact that some (if not many) will
 still stick to the old ways.

   For example, it took over 3 years to deprecate app_meetme - do you
 honestly believe it will take the same time to deprecate app_dial? I
 suspect
 that the answer will be - app_dial will always be there. We may not like
 it, but still, it is the simplest way of getting a call out of Asterisk.
 Like it or not,
 the dialplan will still be here, even 5 years or 10 years from now - it's
 the most basic form. In the mean time, we must provide functionality and
 robustness - if we don't, we'll become irrelevant.



 On Wed, Dec 17, 2014 at 11:16 PM, Phil Mickelson p...@cbasoftware.com
 wrote:

 Nir, I agree with you about wondering why does the call go through the
 dialplan.  Perhaps someone could answer that?  Or, perhaps give us some
 idea if this will change?

 In my case, the connection to the dialplan is literally three lines.
 The minimum required.  I never return.

 Phil M


 On Wed, Dec 17, 2014 at 4:12 PM, Nir Simionovich 
 nir.simionov...@gmail.com wrote:

 Ok, I'll start with this - I agree with the both of you, ARI is the
 right way to go.

 However, when I look at ARI, I see somewhat of a Hybrid. When I say
 hybrid I mean, a tool that enables me to do stuff,
 both inside and outside of the Stasis construct. Example, ARI provides
 a channels API, enabling you to originate a call.
 If ARI was only about stasis, why did we enable the classic
 application/extension, we could have easily just said: oh,
 originate the call and dump it into a Stasis app - but that didn't
 happen. Instead, you put the call into a dialplan or an application,
 which in turn, will call the Stasis app (if truly required).

 My point is this, if the ability exists and can be added, why not? It
 doesn't break anything that's already in there, it adds much
 needed functionality and it makes ARI richer in comparison to its
 predecessor AMI, which people still have a hard time figuring
 out why they should move to ARI.

 This kind of feature can be a tipping point.

 My 2c on the matter.



 On Wed, Dec 17, 2014 at 11:04 PM, 

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Mark Michelson

On 12/17/2014 05:01 PM, Nir Simionovich wrote:

snip
Let's try to stick to the tech for now and answer the first two questions:

  1. Is there a way to obtain the information in ast_bridge_config for 
each of the iterated bridges?


ast_bridge_config is not used at all for Stasis bridges. 
ast_bridge_config describes bridge features that basic bridges use based 
on Dial(), Queue(), and FollowMe() features. For instance, when Dial is 
called with the 't' and 'T' options, the ast_bridge_config indicates 
that the caller and callee can perform DTMF transfers based on 
features.conf settings.


For Stasis bridges, the idea of using ast_bridge_config does not make 
sense for several reasons


1) Stasis applications are intended to be fully in control of everything 
that happens in the bridge. There should be nothing that the 
participants should be able to do independently of the Stasis 
application to change the bridge.
2) ast_bridge_config relies heavily on the concept that a bridge 
contains exactly two participants. For basic bridges, this assumption 
holds. Stasis bridges can have any number of participants, though, so 
this structure doesn't work well.


  2. Is there a way to manipulate the configuration of the bridge, via 
modifying the associated bridge configuration in real time?


The configuration of a Stasis bridge is defined by the Stasis 
application that creates and manipulates the bridge. It is up to the 
Stasis application to determine properties of the bridge and manipulate 
the bridge based on those properties. Whether you can manipulate this in 
real time is based on the programming language and runtime model of the 
ARI library you use.




Nir



-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Nir Simionovich
I see your point now - that makes more sense. It was fairly clear to me
that ast_bridge_config is somewhat of a legacy data structure,
but I was assuming that in some respect it was used in ARI as well. What
your actually saying is that ARI bypasses all of the legacy
stuff and interacts directly with the bridge core, and that's why it
doesn't support that data structure. So technically, accessing bridge
configuration for a Legacy (Dial, Queue, FollowMe) is a fairly complex
task, as they don't see the same information space.

This now raises a slightly off-topic discussion - wouldn't it beneficial to
provide some form of ARI access to some of the legacy stuff
as well? On one hand, we don't really want to do that - as we're trying to
push people into proper usage of ARI and Asterisk, however,
my heart goes out to the legacy stuff, that if we don't cater to, will
become a caveat.

I will explain. About 6 years I've built a large scale Asterisk based
dialer for a customer. When I say large scale, I meant humongous
in 2008 terms - 2500 concurrent calls. Now, that dialer relied heavily on
AMI (of course) and AGI. It was originally built on Asterisk 1.6.
Recently, the customer came back to me, asking me to upgrade their system
to Asterisk 11, specifically for security reasons. I then
looked at the code, realizing that the customer had wrote some stuff using
MeetMe and some of the deprecated app_queue stuff.
I indicated to them that their legacy code should be migrated as well.
Customer looked at it, realized that apart from upgrading Asterisk,
they will have about 6 months worth of coding to migrate their stuff to the
new constructs - the entire project caved. We just upgraded
to latest version of the 1.6 branch, and the customer is now evaluating 1.8
- in other words, not supporting the legacy stuff in some
respect will at some point bite us in the ass.

I realize this is very much a leadership question, not a technical nor
operational.

New question: Do we want to enable legacy features inside ARI?

Nir

On Thu, Dec 18, 2014 at 1:26 AM, Mark Michelson mmichel...@digium.com
wrote:

  On 12/17/2014 05:01 PM, Nir Simionovich wrote:

 snip

  Let's try to stick to the tech for now and answer the first two
 questions:

1. Is there a way to obtain the information in ast_bridge_config for
 each of the iterated bridges?


 ast_bridge_config is not used at all for Stasis bridges. ast_bridge_config
 describes bridge features that basic bridges use based on Dial(), Queue(),
 and FollowMe() features. For instance, when Dial is called with the 't' and
 'T' options, the ast_bridge_config indicates that the caller and callee can
 perform DTMF transfers based on features.conf settings.

 For Stasis bridges, the idea of using ast_bridge_config does not make
 sense for several reasons

 1) Stasis applications are intended to be fully in control of everything
 that happens in the bridge. There should be nothing that the participants
 should be able to do independently of the Stasis application to change the
 bridge.
 2) ast_bridge_config relies heavily on the concept that a bridge contains
 exactly two participants. For basic bridges, this assumption holds. Stasis
 bridges can have any number of participants, though, so this structure
 doesn't work well.

 2. Is there a way to manipulate the configuration of the bridge, via
 modifying the associated bridge configuration in real time?


 The configuration of a Stasis bridge is defined by the Stasis application
 that creates and manipulates the bridge. It is up to the Stasis application
 to determine properties of the bridge and manipulate the bridge based on
 those properties. Whether you can manipulate this in real time is based on
 the programming language and runtime model of the ARI library you use.


  Nir



 --
 _
 -- Bandwidth and Colocation Provided by http://www.api-digital.com --

 asterisk-dev mailing list
 To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev

-- 
_
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Re: [asterisk-dev] ARI Extending Existing Feature: bridge control

2014-12-17 Thread Nir Simionovich
One more thing - per your recommendations, I'm trying to re-implement
app_dial using ARI.

Now, if I read you all right, the process should be:

1. Get a call into Asterisk from an external phone
2. Create a new bridge
3. Put the call into the newly created bridge
4. Originate a new call
5. Put the new call into the existing bridge

So, 1,2,3 work just fine - then you get to 4. According to the docs, I can
originate a channel with only the endpoint defined.
However, that doesn't seem to work:

T 178.62.127.227:44938 - 178.62.127.227:8088 [AP]
POST /ari/channels HTTP/1.1.
Authorization: Basic dGVzdDp0ZXN0.
Host: 178.62.127.227:8088.
Content-Length: 85.
Accept: application/json.
Content-Type: application/json.
.
{endpoint:Local\/1000@demo
,channelId:participant,variables:{var1:var1}}

T 178.62.127.227:8088 - 178.62.127.227:44938 [AP]
HTTP/1.1 400 Bad Request.
Server: Asterisk/SVN-trunk-r429683M.
Date: Thu, 18 Dec 2014 07:41:59 GMT.
Cache-Control: no-cache, no-store.
Content-type: application/json.
Content-Length: 61.
.


T 178.62.127.227:8088 - 178.62.127.227:44938 [AP]
{
  message: Application or extension must be specified
}

Am I missing something here? or is this a bug?



On Thu, Dec 18, 2014 at 8:59 AM, Nir Simionovich nir.simionov...@gmail.com
wrote:

 I see your point now - that makes more sense. It was fairly clear to me
 that ast_bridge_config is somewhat of a legacy data structure,
 but I was assuming that in some respect it was used in ARI as well. What
 your actually saying is that ARI bypasses all of the legacy
 stuff and interacts directly with the bridge core, and that's why it
 doesn't support that data structure. So technically, accessing bridge
 configuration for a Legacy (Dial, Queue, FollowMe) is a fairly complex
 task, as they don't see the same information space.

 This now raises a slightly off-topic discussion - wouldn't it beneficial
 to provide some form of ARI access to some of the legacy stuff
 as well? On one hand, we don't really want to do that - as we're trying to
 push people into proper usage of ARI and Asterisk, however,
 my heart goes out to the legacy stuff, that if we don't cater to, will
 become a caveat.

 I will explain. About 6 years I've built a large scale Asterisk based
 dialer for a customer. When I say large scale, I meant humongous
 in 2008 terms - 2500 concurrent calls. Now, that dialer relied heavily on
 AMI (of course) and AGI. It was originally built on Asterisk 1.6.
 Recently, the customer came back to me, asking me to upgrade their system
 to Asterisk 11, specifically for security reasons. I then
 looked at the code, realizing that the customer had wrote some stuff using
 MeetMe and some of the deprecated app_queue stuff.
 I indicated to them that their legacy code should be migrated as well.
 Customer looked at it, realized that apart from upgrading Asterisk,
 they will have about 6 months worth of coding to migrate their stuff to
 the new constructs - the entire project caved. We just upgraded
 to latest version of the 1.6 branch, and the customer is now evaluating
 1.8 - in other words, not supporting the legacy stuff in some
 respect will at some point bite us in the ass.

 I realize this is very much a leadership question, not a technical nor
 operational.

 New question: Do we want to enable legacy features inside ARI?

 Nir

 On Thu, Dec 18, 2014 at 1:26 AM, Mark Michelson mmichel...@digium.com
 wrote:

  On 12/17/2014 05:01 PM, Nir Simionovich wrote:

 snip

  Let's try to stick to the tech for now and answer the first two
 questions:

1. Is there a way to obtain the information in ast_bridge_config for
 each of the iterated bridges?


 ast_bridge_config is not used at all for Stasis bridges.
 ast_bridge_config describes bridge features that basic bridges use based on
 Dial(), Queue(), and FollowMe() features. For instance, when Dial is called
 with the 't' and 'T' options, the ast_bridge_config indicates that the
 caller and callee can perform DTMF transfers based on features.conf
 settings.

 For Stasis bridges, the idea of using ast_bridge_config does not make
 sense for several reasons

 1) Stasis applications are intended to be fully in control of everything
 that happens in the bridge. There should be nothing that the participants
 should be able to do independently of the Stasis application to change the
 bridge.
 2) ast_bridge_config relies heavily on the concept that a bridge contains
 exactly two participants. For basic bridges, this assumption holds. Stasis
 bridges can have any number of participants, though, so this structure
 doesn't work well.

 2. Is there a way to manipulate the configuration of the bridge, via
 modifying the associated bridge configuration in real time?


 The configuration of a Stasis bridge is defined by the Stasis application
 that creates and manipulates the bridge. It is up to the Stasis application
 to determine properties of the bridge and manipulate the bridge based on
 those properties. Whether