Free & Open Asterisk App Marketplace

Last year i started a small experiment to try and create a free gallery for open source AGI applications for Asterisk. The site wasn’t great, and a few issues ensured little adoption, but it did give me some interesting information.

The general concept was to allow creators of AGI applications to easily share their creations. Easy because they were tagged and categorized and therefor searchable. It also made it easy for AGIs to be indexed by Google. The site didn’t try to host or act as a download gateway, but just linked to the code or project page.

A year on and nothing much has changed on the site, apart from the stats that is. During the last year it’s had over 10,000 visits and over 6,000 click-through’s to applications indexed. So what next?

Asterisk has changed a bit over the last year, more specifically with the introduction of ARI. ARI is enabling more applications to be developed for Asterisk with more capabilities, a great example if the kickstand project’s Payload.

Having an open index for these applications would make them easier to find, provide a central resource for Asterisk administrators and give application developers a space to promote their project.

So, with this in mind, I’d like to get some feedback from the asterisk community, users and app-dev, and find out a) if they’d fine this useful and b) if they’d want to contribute.

What do you think? You can checkout theagigallery.co.uk here.

AsterNET 1.0.0 Released

So, today we finally released AsterNET 1.0.0. The first stable release of AsterNET. To be honest it’s been stable for quite some time, when we inherited the project it had been used by a large number of people for a few years. However we’d made changes and improvements and time was needed to see if those improvements had caused any long-term issues.

Happily, it looks like they had not! So we’re pleased to say, you can now grab the binaries from the codeplex site and nuget.

nuget: https://www.nuget.org/packages/AsterNET/1.0.0

codeplex: https://asternet.codeplex.com/releases/view/134917

If you’re wondering what the main changes are in version 1.0.0, then it depends on what version you’re running now. Between now and the last release Beta3-R2, there have been a few bug fixes and some threading improvements. If however your last version was Asterisk.NET, then you should find AsterNET has a more complete implementation of AMI and FastAGI as well as some core changes that allow AsterNET to be more extensible too.

A full changelog can be found here: https://asternet.codeplex.com/SourceControl/latest#Asterisk.2013/ChangeLog.txt

We’d love to know what you think about AsterNET and how we can move the project forward. Join in on the discussions page, comment here, or contact me on twitter.

Zapappi Web-Based Voice Apps Platform

AsterNET is great, I use it every day, as you’d expect for someone who’s maintaining the framework. However I also know there are situations where it may not be the right tool for the job.

Recently I embarked on another project to help people who may not know much about asterisk or who don’t want the bother of getting a media platform up and running for their own applications. Zapappi was born!

Zapappi allows developers to get the best of frameworks like AsterNET, but from a cloud based service. No need to worry about connectivity, scaling, SIP providers. Just concentrate on your application and know what once you publish it, it’s live, out there and ready to service your customers.

Last week we released a short video showing how easy Zapappi’s Application platform is, and we’d love you to check it out.

Check out the blog post here, which has the link to the video. And you can sign-up for the closed beta still by visiting our website, www.zapappi.com.

Zapappi Beta Announcement

So today Zapappi announced they were taking applications for their beta which starts in the next week or two. They’re asking people to take a short survey to help them select the first round of participants.

Zapappi is a cloud telephony platform offering a range of services, unlike hosted telephony platforms though, business and developers can shape the Zapappi products to meet their own requirements.

The beta is set to include an application platform, sip routing platform, numbering system, distributed queue system and a global conference platform.

If you want to get involved, you can take the survey here to be in with a chance to get on the beta: Zapappi Survey.

You can read more about the announcement Zapappi Blog.

AsterNET ARI Project

With the release of Asterisk12 comes a new bread of API for the telephony platform, this time in the form of Stasis, the Asterisk RESTful API.

Never one wanting to be left behind (like it was for many years) AsterNET now has a new incubation project, AsterNET.ARI.

This project aims to allow .NET developers to connect to the new API, both for actions and events.

It’s currently in planning stage, but there is a working codebase for some of the core functionality, primarily the ARI Events web socket.

For more information about AsterNET.ARI, visit: https://asternetari.codeplex.com/

For more information about ARI, visit: https://wiki.asterisk.org/wiki/display/AST/Asterisk+12+ARI

I’ll be posting more about this project over the next month as the code base starts to come together.

AsterNET.Extensions Alpha Release

Well, a while back I announced that I has started a project with the aim of making calls to the AGI Exec function easier. The general concept was that there are many commands you can execute from an AGI that are not directly supported under the AGI protocol, using the Exec method.

Since then I’ve had a bit of time to review that initial approach, and decided it was less than desirable to use extension methods. Very little was gained at making the code ‘more’ accessible. So in the Alpha release, just posted on codeplex, I’ve taken a new approach that allows you access either via the Helper classes directly, or via an extension of the AGIScript class.

So far I’ve included a set of helpers for functions I often use, that’s not to say there aren’t more than can be added, in fact there are a lot more.

Here’s a quick example of how the code works.

public class myagiscript : Asterisk.NET.Extensions.FastAGI.AGIScript.AGIScript
    {
        public override void Service(Asterisk.NET.FastAGI.AGIRequest request, Asterisk.NET.FastAGI.AGIChannel channel)
        {
            Answer();

            // Using Dial from extended agi class
            var rtn = Dial("peer", 30);
            Console.WriteLine(rtn);

            Wait(5);

            // Originate to peer in context default, 
	    // extension 1234 and prio 1
            Originate("SIP/peer", OriginateType.Exten, 
		"default", "1234", "1");

            Hangup();
        }
    }

You can also call the Helper classes directly if you don’t want to use the extended AGIScript class, as follows.

public class customivr : Asterisk.NET.FastAGI.AGIScript
{
	public override void Service(Asterisk.NET.FastAGI.AGIRequest request, Asterisk.NET.FastAGI.AGIChannel channel)
	{
		Answer();

		// Method 1, using the Dial Helper class directly
		var dialReply = 
			channel.SendCommand(
			DialHelper.Dial("SIP/10002_1", 
				10000, 
				null,
				DialOptions.AnnounceToCallee("demo-congrats")));

		Hangup();
	}
}

The project is on Codeplex in a GIT Repo, so please fork it, contribute back your ideas and help extend an already excellent framework!

AsterNET.Extensions–A helping hand

Recently I published on codeplex (now using GIT) a new project I’ve been working on. A set of helpers and extension methods for Asterisk’s AsterNET framework.

The idea came simply from how often I had to write Exec(“…”, “…”) and go look up all the options from voip-info.org! A common problem for me, and I assume for other using the FastAGI framework.

Currently, if I want to call ‘Dial’ I need to do something like this.

Exec("Dial", "SIP/extension");

Now, that looks pretty simple I hear you say! But what about all the options that can be added into the Dial options string. Timeouts, ringing, transfer ability etc, etc, etc…

You end up writing something like this:

Exec("Dial", "SIP/extension,A(filename),C,c");

God forbid, you want to do something like Transfer on Caller Hangup (not pretty)! And then there’s the result codes, and the fact if you want to know the status of your Dial, you need to get the ‘DIALSTATUS’ variable in a separate command.

Now there’s a better way however, using the AsterNET.Extensions helpers.

Say we want to dial an extension, pass in some options and get back the status of the dial. Now we can simply do:

var dialResult = this.Dial("SIP/10002_1", 10000, null, DialOptions.AnnounceToCallee("demo-congrats"));

The return result (dialResult) contains the value from the variable ‘DIALSTATUS’. This makes dealing with Dial a lot easier and now we have intellisense for each of the different options.

I’ve created helpers for some of the more common Exec’s I use day to day, although not all complete yet. I’ve also created some extension methods (like the Dial one above) that use the Helper and extend the helper to include return codes etc.

I am really looking for some feedback from the community on this, on direction, features and general usability. Let me know your thoughts and help make this a really great extension to an already great framework.

Download the code here
Report issues here
Discuss here

And remember, it’s a GIT repo, so fork it and help make it better!

The Best Bits Issue 2

So here’s another issue of my Best Bits series. Over the past few weeks during my regular day to day stuff, i notice quite a few new ‘bits’ for asterisk and asterisk AGI/AMI development. And once again I’ve put them all in a new issue.

In this issue I’ve been looking at different AMI/AGI frameworks for lots of different languages. So I wanted to compile a list of some of the ones that seem better maintained.

Frameworks

Node-Asterisk-AMI – An extremely lightweight Asterisk AMI connector written in node.js. This is also available via node.js’s npm package manager. You can also find out more at Dan’s blog.

RUBY-ASTERISK – This gem add support to your Ruby or RubyOnRails projects to Asterisk Manager Interface.

PAMI – PHP Asterisk Manager Interface ( AMI ) supports synchronous command ( action )/ responses and asynchronous events using the pattern observer-listener. Supports commands with responses with multiple events. Very suitable for development of operator consoles and / or asterisk / channels / peers monitoring through SOA, etc

Projects to Watch

AsterNET.Extensions – A set of extensions and helpers for using non-AGI commands from within the AsterNET FastAGI framework. Each helper allows you to create ExecCommand’s for common commands like ‘Dial’, ‘Queue’, ‘Voicemail’ etc. I’ll be writing a more detailed article on this in the near future.

ZAPAPPI–The FastAGI Cloud Platform

This week saw the announcement of a new cloud telephony platform called zapappi. A new company that is trying to make FastAGI hosting a lot lot easier by making it a cloud offering to anyone, anywhere in the world.

The platform allows developers to write FastAGI applications that connect to zapappi’s media servers. Inbound and outbound calls, sip-endpoints, telephone numbers, TTS and lots lots more are all handled by zapappi for the developer. This means all you have to do is write the application, they worry about scale.

zapappi is different to other cloud telephony platforms in that it’s supporting open source frameworks such as AsterNET! This means you’ll be able to write applications using AsterNET in C#, and have zapappi point your customers calls to the application.

They will also be supporting the AMI protocol, along with a set of RESTful services which will allow you to initiate (originate) calls to your applications, add new services (such as telephone numbers) and upload/download files (such as call recordings).

The service works by supporting the FastAGI framework, allowing developers to write applications in a familiar way, and then registering the URI of the applications with zapappi. When a call is made into the platform, it’s forwarded out to the FastAGI application.

zapappi will be launching early next year, but are registering interest now in a closed beta due to take place later this year.

The Best Bits Issue 1

A few weeks ago I started this blog, and wanted to give a roundup of the best of Asterisk, AGI and AMI I’d found on the net. I’ve decided to rename the series of posts to “Asterisk Best Bits” and so I am starting a-fresh with issue 1 today!

If you find something call, that you think warrants going on here for the next issue, please drop me a line and let me know.

Projects to Watch

AsterClick – A javascript AMI interface which looks pretty cool. I’ve not used it yet myself but I suspect it could make web control of  your Asterisk server very easy.

AsterNET-Samples – Very much a work in progress (and a shameless plug I know) for another small project around the AsterNET framework. A set of samples for different application types (AGI and AMI). Keep an eye on this, more to come over the next few weeks.

Useful Websites

The AGI Gallery – A shameless self plug here, this little website I’ve put together is an easy way for the Asterisk community and AGI developers to show off their work. Simple put, it’s a web index or gallery for AGI scripts. If you’ve written one and want to let other know, add it to the gallery!