"reinventing the dialplan" slides from twilio's astricon 2009 talk

Post on 08-May-2015

9.567 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Call control is being reinvented in several exciting new ways. In this talk, we explore existing models for building voice applications using the Asterisk Dialplan, Asterisk AGI/AMI, and how new in-cloud voice APIs are reinventing the way that build, host, and scale voice applications. such as in-cloud dialplan API with Twilio. Taking a programmer's perspective, we highlight desirable dialplan properties such as simplicity, automatic scalability, integration with existing databases and servers, and separation of business logic from telephony logic. We also explore the tradeoffs that Twilio has made to simplify the experience of building voice applications, including the concept of encapsulating the state of a voice call in a URL. We conclude with thoughts about how Asterisk could be streamlined for in-cloud dialplan APIs and the services that support them.

TRANSCRIPT

Astricon Oct 14, 2009

Reinventing theDialplan

Copyright 2009 Twilio

Asterisk

Voice Applications

IVR

Company P

BX

Cli

ck-t

o-C

all

Con

fere

ncin

g

The Cloud

Voice Applications

IVR

Company P

BX

Cli

ck-t

o-C

all

Con

fere

ncin

g

Asterisk

Voice Applications

Voice Guru

Asterisk

DialplanApplication

Native scripting languagewritten by your Voice Guru

Maintained by your Voice Guru

Asterisk DialplanLanguage: Native Scripting Where: Local on call router

Asterisk AGI/AMI

Java/C/Ruby...Application

IP

Asterisk AGI/AMILanguage: AGI/AMI API +

Java/C/Ruby/Python/EtcWhere: Remote via IP

Asterisk AGI/AMI

Java/C/Ruby...Application

IPMaintained by your Voice Guru

Asterisk AGI/AMILanguage: AGI/AMI API +

Java/C/Ruby/Python/EtcWhere: Remote via IP

Asterisk AGI/AMI

Java/C/Ruby...Application

IPMaintained by your Programmer

Asterisk AGI/AMILanguage: AGI/AMI API +

Java/C/Ruby/Python/EtcWhere: Remote via IP

Enter the Programmer

Programmer

•Commodity skillset

•Easy to hire

•Cheap

Asterisk AGI/AMI

Java/C/Ruby...Application

IPBetter but...

Large API with "lite" documentation. The distinction between AGI/AMI can

be confusing.

Tight integration between call router and voice app: direct socket

connections

SCALING=HARD

Asterisk AGI/AMILanguage: AGI/AMI API +

Java/C/Ruby/Python/EtcWhere: Remote via IP

Asterisk AGI/AMIIP

Lets mull this over...

Asterisk AGI/AMIIP

Why do I need aVoice Guru?

AGI/AMIIP

What if I outsourcedmy voice guru?

Asterisk

Expert

Asterisk in the Cloud

AGI/AMIIP

Asterisk in the Cloud

?????IP

What is the ideal voice app API?

Web developers are (one of) the largest engineering workforces

on the planet

•HTTP

•Request/Response

•XML/JSON

•WAV/MP3

Asterisk in the Cloud

RubyMagic

Java

PHP

Python

Create new messaging protocoland new API for each language?

...

Asterisk in the Cloud

HTTP/XMLREST

Normal Web ServerHTTP/XML/REST

Ruby

Java

PHP

Python...

HTTP/XMLREST

Normal Web ServerHTTP/XML/REST

Ruby

Java

PHP

Python...Twilio

HTTP/XMLREST

Twilio

Leverage existing cloud hostingScale: 1-10,000’s of simultaneous calls

Google App Engine

Microsoft Azure

Heroku

Request/Response

digits = GetKeypadPresses();switch(digits) { case 1: blah(); break;}

1 Procedural programming

1 Procedural programming

Not how HTML works!

digits = GetKeypadPresses();switch(digits) { case 1: blah(); break;}

Request/Response

<form action=”digits.php”> <input type=”text” name=”digits” /> <input type="submit" value="Go"/></form>

2 Web programming

Request/Response

<form action=”digits.php”> <input type=”text” name=”digits” /> <input type="submit" value="Go"/></form>

2 Web programming

Request/Response

Submit back to digits.phpon input

<Gather numDigits=”5” action=”digits.php”/>

3 Web-like voice programming

Apply the same model forvoice applications

Request/Response

<Gather numDigits=”5” action=”digits.php”/>

3 Web-like voice programming

Request/Response

Submit back to digits.phpon input

$r = new Response();$r->append(new Say("Hello World");$r->Respond();

4 Language-specific libraries

PHP

r = twilio.Response()r.append(twilio.Say("Hello World"))print r

Python

@r = Twilio::Response.new@r.append(Twilio::Say.new "Hello World")puts @r.respond

Ruby

TwiMLResponse response = new TwiMLResponse();Say say = new Say("Hello World");System.out.println(response.toXML());

Java

Request/Response

u.com b.com c.com

⤸HTTP 307 ⤸HTTP 307

Response Chaining

PBX Application Authorization Service

CRM Integration

Stateless ‘Twimlet’ URLs + REST

Stateless ‘Twimlet’ URLs + REST

curl -fSs -u "$ACCOUNTSID:$AUTHTOKEN" -d "Caller=$CALLERID" -d "Called=$PHONE" -d "Url=http://twimlets.com/message?Message=$MSG" "https://api.twilio.com/2008-08-01/Accounts/$ACCOUNTSID/Calls

1 Put the Voice Guru in the CloudAsterisk in the cloud

2 Adopt a standards-based web APIHTTP/XML/REST

3 Leverage existing web infrastructureApache/Tomcat/AWS/AppEngine/Azure/Heroku

4 Let the cloud handling scaling1-10,000’s simultaneous calls

5 Don’t break request/response modelBuild libraries for PHP/Python/Java/C#/Ruby etc.

The Cloud

Voice Applications

IVR

Company P

BX

Cli

ck-t

o-C

all

Con

fere

ncin

g

Asterisk

Simplifying TelecomSimple • Powerful • Pay-As-You-Go

Evan CookeCo-Founder & CTO

twitter: @twiliophy@twilio.com

http://www.twilio.com

top related