<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>On Dec 4, 2012, at 5:03 PM, Tim Ringenbach wrote:</div><div><br class="Apple-interchange-newline"><blockquote type="cite"><div class="gmail_extra"><div class="gmail_quote"><div>So, how will the API&nbsp;accomplish&nbsp;things like logging an agent into a queue, or redirecting to voicemail, or more exotic things like running an Echo test, or playing a telezapper tone? Or asked another way, which use cases aren't in scope of this API?</div></div></div></blockquote><div><br></div><div><div>Playing a telezapper tone should be just playing a sound file, which the API will definitely be able to do.</div><div><br></div><div><div>Since app_echo is easy enough to use from the dialplan, it's not near the top of my list for the API to do. But it probably makes sense just in terms of completeness.</div></div><div><br></div><div>For the rest of what you mentioned, it will probably just ship the channel back out to the dialplan.</div><div><br></div></div><div>In general, I'd like to keep the initial scope of the API to the fundamentals needed for building applications, instead of API's for the existing apps. So things related to app_queue or app_voicemail are out of scope. But you should be able to build your own queue or voicemail app using the API.</div><div><br></div><blockquote type="cite"><div class="gmail_extra"><div class="gmail_quote">
<div>One frustation I've had in the past, is realizing whatever it is I'm trying to do, I need to use another interface to&nbsp;accomplish it. Most commonly, I'm writing an AGI script, and find myself needing to do something only the AMI can do. But I've seen other odd combinations too, e.g. I've seen people resort to using System(asterisk -rx 'some command') from the dialplan.</div>
<div><br></div><div>But it sounds like you're going to be exposing the Stasis-core API to the manager, so at least I should never have to connect to both the AMI and Stasis to do something.</div></div></div></blockquote><div><br></div><div>Until (unless?) the RESTful API (or some other API) matures into the one API to rule them all, you'll have that problem. Asterisk will continue to have separate API's for separate purposes. With stasis-core, we should be able to bring some sanity and consistency across the API's, so that the same function can be exposed via different API's in similar ways, and execute in a similar manner.</div><div><br></div><div><div>It's certainly possible that stasis-http can grow to cover anything you'd want to do. HTTP is the sort of hammer that can turn almost anything into a nail. But for now, I want to keep it focused, and be intentional about what it does and why it does it: a simple interface for building telephony applications.</div><div><br></div></div><div>In practice, there may always be differences between the APIs. If for nothing else, things in stasis-core probably won't be magically exposed to all API's, at least in any sane and reasonable way. If you think in terms of MVC, stasis-core is the model, you still have view and controller code to wire that up to a particular API.</div><div><br></div><div>We can be diligent, but at some point someone will add a command to the CLI for debugging, and someone else will find a use case that no one expected for getting at that info from an application.</div><div><br></div><div>For the times where there are gaps, you can still get to everything you need via HTTP. It can be ugly, since it breaks from the nicely structured RESTful API. You can access AMI over HTTP[1], AGI over AMI using AsyncAGI[2], and the command line over AMI[3]. As stasis-http matures, the need for this sort of hackery goes to zero. But it's there if you need it.</div><div><br></div><div>&nbsp;[1]:&nbsp;<a href="http://ofps.oreilly.com/titles/9780596517342/asterisk-AMI.html#AMI-quickstart-HTTP">https://wiki.asterisk.org/wiki/x/aIFJ</a></div><div>&nbsp;[2]:&nbsp;<a href="http://ofps.oreilly.com/titles/9780596517342/AGI.html#AGI_id273035">http://ofps.oreilly.com/titles/9780596517342/AGI.html#AGI_id273035</a></div><div>&nbsp;[3]:&nbsp;<a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+11+ManagerAction_Command">https://wiki.asterisk.org/wiki/x/oQg0AQ</a></div><div><br></div><blockquote type="cite"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; "><div style="word-wrap:break-word"><div><div class="im"><blockquote type="cite">I'm happy there is is finally going to be a UUID that track the channel that won't have the problem that the current uniqueids have with masquerades. But I do kind of wonder why a third channel identifier is being added, as opposed to fixing one of the two existing ones. (Maybe append the uuid to the channel name?) But maybe that was&nbsp;discussed&nbsp;at AstriDevCon.</blockquote>
<div><br></div></div><div>Yeah; my intention is to fix what's there rather than add a ReallyUniqueID field. I'm also realizing that it's going to take a bit of software archeology to figure out masquerades, uniqueid, etc. and come up with a plan for how to fix it.</div>
</div></div></blockquote><div><br></div><div>On the subject of uniqueids and channel masquerades, I can point you to my own email from a few years ago: &nbsp;<a href="http://lists.digium.com/pipermail/asterisk-dev/2010-June/044754.html">http://lists.digium.com/pipermail/asterisk-dev/2010-June/044754.html</a> and an old reviewboard patch&nbsp;<a href="https://reviewboard.asterisk.org/r/760/">https://reviewboard.asterisk.org/r/760/</a></div></div></div></blockquote><div><br></div>Thanks! Good history about UniqueID. For those playing along at home, I'm keeping my notes at&nbsp;<a href="https://wiki.asterisk.org/wiki/x/IwBRAQ">https://wiki.asterisk.org/wiki/x/IwBRAQ</a>.<br></div><div><br></div><div>You also had a list of use cases from an earlier email:</div><div><br></div><div>On Dec 4, 2012, at 1:23 PM, Tim Ringenbach wrote:</div><div><blockquote type="cite"><div>&nbsp;- Redirect/transfer channels to difference places in the dialplan</div></blockquote><div><br></div><div>Yes. The stasis application should exit with some sort of 'go back to the dialplan' command.</div><br><blockquote type="cite"><div>&nbsp;- Pickup a ringing channel</div></blockquote><div><br></div><div>Yes. I am embarrassed that I had not written that down earlier.</div><br><blockquote type="cite"><div>&nbsp;- Detect a fax tone, turn on recording (maybe you're troubleshooting failed faxes) but without mixing the streams, and redirect to ReceiveFax()</div></blockquote><div><br></div><div>Had not thought of that. That might be better suited for staying in the dialplan, though.</div><br><blockquote type="cite"><div>&nbsp;- Observe that there's 10 people waiting in a queue for more than 30 minutes, and start logging more people into the queue, or redirecting calls to specific phones</div></blockquote><div><br></div><div>For app_queue, no. But you should be able to write your own queue using the API that does this.</div><br><blockquote type="cite"><div>&nbsp;- Detect that someone's talking in a Conference and send a signal to a web app</div></blockquote><div><br></div><div>I'll be pedantic and replace Conference with Bridge, and say probably. This would depend on features of Asterisk bridging to enable this.</div><br><blockquote type="cite"><div>&nbsp;- Light up a BLF on a phone after someone dials a special extension from a speed dial that logs them in to a custom queue implemented using&nbsp;Stasis</div></blockquote><div><br></div><div>Probably. That would depend on BLF support in Asterisk.</div><br><blockquote type="cite"><div>&nbsp;- Findme/Followme: record a file that will&nbsp;automatically&nbsp;be deleted when the call is over, then call a bunch of numbers, at least one of which is a local phone that's forwarded to a different number, play them an IVR that uses this file, then bridge 0 or 1 of them to the original call, hanging up the others. Bonus: have the CDRs make sense at the end of this.</div></blockquote><div><div><br></div></div><div>I was with you up until you said CDR :-P</div><div><br></div><div>Breaking it down:</div><div>&nbsp;* record a file - sure</div><div>&nbsp;* that will automatically be deleted when the call is over - automatic, no. But the application can explicitly delete the file when it wants</div><div>&nbsp;* then call a bunch of&nbsp;numbers&nbsp;- sure</div><div>&nbsp;* at least one of which is a local phone that's forwarded to a&nbsp;different number - that's more in the dialplan than the API</div><div>&nbsp;* play them an IVR that uses this file - sure</div><div>&nbsp;* then bridge 0 or 1 of them to the original call - sure</div><div>&nbsp;* hanging up the others - sure</div></div><br><div>
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>--&nbsp;<br>David M. Lee<br>Digium, Inc. | Software Developer<br>445 Jan Davis Drive NW - Huntsville, AL 35806 - USA<br>Check us out at: &nbsp;<a href="http://www.digium.com/">www.digium.com</a>&nbsp;&nbsp;&amp;&nbsp;<a href="http://www.asterisk.org/">www.asterisk.org</a></div></div></span></div></span></span>
</div>
<br></body></html>