Developing SIP Applications

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    3 Favorites & 1 Group

    Developing SIP Applications - Presentation Transcript

    1. Sep 16th, 2008 TMC Communication Developer Conference Developing SIP Applications RJ Auburn CTO rj@voxeo.com © Voxeo Corporation
    2. Telephony © Voxeo Corporation
    3. Sucks © Voxeo Corporation - Confidential
    4. Complex © Voxeo Corporation
    5. Arcane © Voxeo Corporation
    6. Proprietary © Voxeo Corporation
    7. This is not how it should be... © Voxeo Corporation
    8. Simple © Voxeo Corporation
    9. Ubiquitous © Voxeo Corporation
    10. Open © Voxeo Corporation
    11. What to do? © Voxeo Corporation
    12. Leverage The Web Model © Voxeo Corporation
    13. Utilize Standards © Voxeo Corporation
    14. SOAP/REST © Voxeo Corporation - Confidential
    15. What Does It Look Like? © Voxeo Corporation
    16. Application API XML Tools Platform 16 © Voxeo Corporation
    17. Application JSR289, CCXML REST, & Designer SOAP VoiceXML Prophecy 17 © Voxeo Corporation
    18. Application Application API XML Tools Platform 18 © Voxeo Corporation
    19. Building Blocks © Voxeo Corporation
    20. Session Initiation Protocol - Session Initiation Protocol (SIP) defines how to establish a communication session between two endpoints - Primarily used for voice, but can for IM or virtually any other protocol - Almost always used in client/server configuration with \"SIP proxies\" in control of \"SIP endpoints\" - Work going on in P2PSIP - see www.p2psip.org - Text-based protocol, originally modeled on HTTP © Voxeo Corporation
    21. SIP Communication INVITE Alice 180 RINGING Bob 200 OK ACK RTP (voice) BYE 200 OK © Voxeo Corporation
    22. Proxy Proxy A SIP B P SIP SI Alice RTP Bob © Voxeo Corporation
    23. SIP Resources - Internet Engineering Task Force (IETF) - RFC 3261 - Hitchhiker’s Guide to SIP - Open Source Info - VoIP Info Wiki: www.voip-info.org - Industry Sites - SIP Forum: www.sipforum.org - SIP Foundry: www.sipfoundry.org - OpenSBC: www.opensourcesip.org © Voxeo Corporation
    24. Open Source SIP Software - Systems - Asterisk: www.asterisk.org - sipXecs: www.sipfoundry.org - FreeSWITCH: www.freeswitch.org - OpenSER: www.openser.org - SIP Stacks - reSIProcate: www.resiprocate.org - Phones: - Gizmo: www.gizmoproject.org - MANY, many more: www.voip-info.org © Voxeo Corporation
    25. Religion © Voxeo Corporation
    26. XML © Voxeo Corporation
    27. CCXML - Call Control XML (CCXML) is the W3C standard for call control using XML - Sister standard to VoiceXML - Integrates with VoiceXML for dialog control - Provides a framework for issuing call control commands and handling call control events - http://www.w3.org/TR/ccxml/ © Voxeo Corporation
    28. © Voxeo Corporation
    29. CCXML Hello World <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml version=\"1.0\"> <eventprocessor> <transition event=\"connection.alerting\"> <log expr=\"'***** CONNECTION ALERTING *****'\"/> <if cond=\"event$.connection.remote == '8315551234'\"> <reject/> <else/> <accept/> </if> </transition> <transition event=\"connection.connected\"> <log expr=\"'***** CALL WAS ANSWERED *****'\"/> </transition> <transition event=”connection.disconnected”> <log expr=”‘*** Call was disconnected ***’”/> <exit/> </transition> <transition event=\"error.*\"> <log expr=\"'an error has occured (' + event$.reason + ')'\"/> <exit/> </transition> </eventprocessor> </ccxml> © Voxeo Corporation
    30. Java? © Voxeo Corporation
    31. SIP Servlets - Standard Java based API for writing SIP applications. - 1.0 standardized as JSR-116. - 2.0 just released as JSR-289 - Extends the HTTP Servlet model to support SIP and telephony applications - http://www.sipservlet.com/ - Supported by a large number of application servers including Oracle (BEA), IBM, Sun, Voxeo. 31 © Voxeo Corporation
    32. Converged Applications © Voxeo Corporation
    33. JSR-309 - Java Media Server API - Based on the CCXML media model - Still in draft stage - Provides dialog resources, conferencing, media routing to Java applications 33 © Voxeo Corporation
    34. Example Application © Voxeo Corporation
    35. Sample Application Overview - Caller dials in to the application - Caller is bridged to the subscriber - Results of the call attempt are posted to Twitter via their REST API 35 © Voxeo Corporation
    36. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 36 © Voxeo Corporation
    37. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 37 © Voxeo Corporation
    38. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <?xml version=\"1.0\" encoding=\"UTF-8\"?> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <ccxml version=\"1.0\" is id2=\"incomingcall\"/> <join id1=\"event$.connectionid\" <var name=\"status\" expr=\"'RJ on the phone'\"/> xmlns=\"http://www.w3.org/2002/09/ccxml\"> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </ccxml> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 38 © Voxeo Corporation
    39. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 39 © Voxeo Corporation
    40. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> <var name=\"state\" expr=\"'init'\"/> </transition> <var name=\"incomingcall\"/> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <var name=\"tURL\" <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <eventprocessor statevariable=\"state\"> his phone'\"/> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering </eventprocessor> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 40 © Voxeo Corporation
    41. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 41 © Voxeo Corporation
    42. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <transition event=\"connection.alerting\" state=\"init\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <accept/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" </transition> target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 42 © Voxeo Corporation
    43. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 43 © Voxeo Corporation
    44. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"init\"> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <assign name=\"state\" expr=\"'calling'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> </transition> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 44 © Voxeo Corporation
    45. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 45 © Voxeo Corporation
    46. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <transition dest=\"'tel:+18312392883'\"/> <createcall event=\"connection.connected\" state=\"calling\"> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <assign name=\"state\" expr=\"'connected'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <assign name=\"state\" expr=\"'connected'\"/> id2=\"incomingcall\"/> <join id1=\"event$.connectionid\" <var name=\"status\" expr=\"'RJ is on the phone'\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" <send target=\"tURL\" namelist=\"status\"/> name=\"'update'\" targettype=\"'basichttp'\" </transition> target=\"tURL\" namelist=\"status\"/> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> </transition> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 46 © Voxeo Corporation
    47. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 47 © Voxeo Corporation
    48. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <transition event=\"connection.failed\" state=\"calling\"> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <assigntargettype=\"'basichttp'\" name=\"'update'\" <send name=\"state\" expr=\"'done'\"/> target=\"tURL\" namelist=\"status\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <send targettype=\"'basichttp'\" name=\"'update'\" <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <sendtarget=\"tURL\" namelist=\"status\"/> targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 48 © Voxeo Corporation
    49. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 49 © Voxeo Corporation
    50. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <transition name=\"state\" expr=\"'connected'\"/> <assign <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> state=\"connected\"> event=\"connection.disconnected\" <assignname=\"status\" expr=\"'RJ isname=\"'update'\" <var on the phone'\"/> name=\"state\" expr=\"'done'\"/> <send targettype=\"'basichttp'\" target=\"tURL\" namelist=\"status\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <send targettype=\"'basichttp'\" name=\"'update'\" <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> target=\"tURL\" namelist=\"status\"/> <send targettype=\"'basichttp'\" name=\"'update'\" </transition>target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 50 © Voxeo Corporation
    51. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 51 © Voxeo Corporation
    52. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" <transition event=\"send.successful\" state=\"done\"> target=\"tURL\" namelist=\"status\"/> </transition> <exit/> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> </transition> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 52 © Voxeo Corporation
    53. Follow Me/Find Me + Twitter <?xml version=\"1.0\" encoding=\"UTF-8\"?> <ccxml xmlns=\"http://www.w3.org/2002/09/ccxml\" version=\"1.0\"> <var name=\"state\" expr=\"'init'\"/> <var name=\"incomingcall\"/> <var name=\"tURL\" expr=\"'http://zscgeek:password@twitter.com/statuses/update.xml'\"/> <eventprocessor statevariable=\"state\"> <transition event=\"connection.alerting\" state=\"init\"> <accept/> </transition> <transition event=\"connection.connected\" state=\"init\"> <assign name=\"state\" expr=\"'calling'\"/> <assign name=\"incomingcall\" expr=\"event$.connectionid\"/> <createcall dest=\"'tel:+18312392883'\"/> </transition> <transition event=\"connection.connected\" state=\"calling\"> <assign name=\"state\" expr=\"'connected'\"/> <join id1=\"event$.connectionid\" id2=\"incomingcall\"/> <var name=\"status\" expr=\"'RJ is on the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.failed\" state=\"calling\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is not answering his phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"connection.disconnected\" state=\"connected\"> <assign name=\"state\" expr=\"'done'\"/> <var name=\"status\" expr=\"'RJ is off the phone'\"/> <send targettype=\"'basichttp'\" name=\"'update'\" target=\"tURL\" namelist=\"status\"/> </transition> <transition event=\"send.successful\" state=\"done\"> <exit/> </transition> </eventprocessor> </ccxml> 53 © Voxeo Corporation
    54. We Got Java Bean! © Voxeo Corporation
    55. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api twitter_api; List<URI> targets; public void init() throws ServletException { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); proxy.setParallel(true); proxy.proxyTo(targets); } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 55 © Voxeo Corporation
    56. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api twitter_api; List<URI> targets; public void init() throws ServletException { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); proxy.setParallel(true); proxy.proxyTo(targets); } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 56 © Voxeo Corporation
    57. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api twitter_api; com.voxeo.rj.fmdemo; package List<URI> targets; public void init() throws ServletException { import java.io.IOException; twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); import java.util.ArrayList; targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); import java.util.List; targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } import javax.servlet.ServletException; import javax.servlet.sip.*; protected void doInvite(SipServletRequest req) throws ServletException, IOException { if import net.unto.twitter.Api; (req.isInitial()) { Proxy proxy = req.getProxy(); import net.unto.twitter.TwitterException; proxy.setRecordRoute(true); proxy.setParallel(true); proxy.proxyTo(targets); } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 57 © Voxeo Corporation
    58. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api twitter_api; List<URI> targets; public void init() throws ServletException { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); proxy.setParallel(true); proxy.proxyTo(targets); } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 58 © Voxeo Corporation
    59. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { public class FMServlet extends SipServlet Api twitter_api; List<URI> targets; { public void init() ServletException { public void init() throws throws ServletException { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); } targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); protected void doInvite(SipServletRequest req) } throws ServletException, IOException { protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { } Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); proxy.setParallel(true); proxy.proxyTo(targets); protected void doSuccessResponse(SipServletResponse resp) } } throws IOException { } if (resp.getMethod().equalsIgnoreCase(\"invite\"))resp) throws IOException { protected void doSuccessResponse(SipServletResponse { } try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 59 © Voxeo Corporation
    60. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api twitter_api; List<URI> targets; public void init() throws ServletException { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); proxy.setParallel(true); proxy.proxyTo(targets); } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 60 © Voxeo Corporation
    61. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api twitter_api; Api twitter_api; List<URI> targets; List<URI> void init() throws public targets; ServletException { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); public void init() throws ServletException { targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); twitter_api = new Api(\"zscgeek\", \"password\"); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); SipFactory sipFactory = } (SipFactory)getServletContext().getAttribute(SIP_FACTORY); protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { targets = Proxy proxy = req.getProxy(); new ArrayList<URI>(); proxy.setRecordRoute(true); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); proxy.setParallel(true); proxy.proxyTo(targets); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); } } targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); protected void doSuccessResponse(SipServletResponse resp) throws IOException { } if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 61 © Voxeo Corporation
    62. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api twitter_api; List<URI> targets; public void init() throws ServletException { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); proxy.setParallel(true); proxy.proxyTo(targets); } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 62 © Voxeo Corporation
    63. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api protected void doInvite(SipServletRequest twitter_api; req) throws List<URI> targets; public void init() throws ServletException { { ServletException, IOException if (req.isInitial()) { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); Proxy proxy = req.getProxy(); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); proxy.setRecordRoute(true); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } proxy.setParallel(true); protected void proxy.proxyTo(targets);throws ServletException, IOException { doInvite(SipServletRequest req) if (req.isInitial()) { } Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); } proxy.setParallel(true); proxy.proxyTo(targets); } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 63 © Voxeo Corporation
    64. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api twitter_api; List<URI> targets; public void init() throws ServletException { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); proxy.setParallel(true); proxy.proxyTo(targets); } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 64 © Voxeo Corporation
    65. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { protected void doSuccessResponse(SipServletResponse Api twitter_api; List<URI> targets; resp) throws IOException { public void init() throws ServletException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); { targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); trytargets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); { targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { } catch(TwitterException e){log(\"failed to update twitter\",e);} Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); } proxy.setParallel(true); proxy.proxyTo(targets); } } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 65 © Voxeo Corporation
    66. Follow Me/Find Me + Twitter package com.voxeo.rj.fmdemo; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.sip.*; import net.unto.twitter.Api; import net.unto.twitter.TwitterException; public class FMServlet extends SipServlet { Api twitter_api; List<URI> targets; public void init() throws ServletException { twitter_api = new Api(\"zscgeek\", \"password\"); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(\"sip:rj@voxeo.com\")); targets.add(sipFactory.createURI(\"sip:rj@rjauburn.com\")); targets.add(sipFactory.createURI(\"sip:8312392883@provider.com\")); } protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { Proxy proxy = req.getProxy(); proxy.setRecordRoute(true); proxy.setParallel(true); proxy.proxyTo(targets); } } protected void doSuccessResponse(SipServletResponse resp) throws IOException { if (resp.getMethod().equalsIgnoreCase(\"invite\")) { try { twitter_api.updateStatus(\"RJ is taking a phone call from \" + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(\"failed to update twitter\",e);} } } } 66 © Voxeo Corporation
    67. So why is this important? © Voxeo Corporation
    68. Phone Developers Web Developers Web Developers © Voxeo Corporation
    69. Web © Voxeo Corporation
    70. Ideas We have Never Thought Of © Voxeo Corporation
    71. Standards Matter © Voxeo Corporation
    72. Example Usage © Voxeo Corporation
    73. Project Green Phone - By Mark Headd - http://www.voiceingov.org/blog/?p=135 - VoiceXML, JavaScript, CCXML, PHP - Application: - Caller dials in to app - App uses ANI/Caller ID and makes web service query to a database to determine location - Makes another web service query to find location of nearest E85/Biodiesel stations - Relays information to caller - Sends caller a SMS text msg with info © Voxeo Corporation
    74. Rocketsource.org - www.rocketsource.org - Vox-Attendant - A VoiceXML-based, speech-driven auto attendant that can connect callers with any person or group with an enterprise, via their desk, cellular, or VoIP phones. - Vox-Mail - A VoiceXML-based, speech-driven voicemail application that can store messages locally or integrate with any IMAP email server to provide basic unified messaging. - Voice Conference Manager - A VoiceXML and CCXML-based, speech-driven conference manager that features both phone and web-based conference call creation, access, and management. - VoiceXML, CCXML, grXML, JavaScript, Java, and Python © Voxeo Corporation
    75. Wrapping Up © Voxeo Corporation
    76. Look at the big picture © Voxeo Corporation http://flickr.com/photos/txd/100437832
    77. More then one way to skin a cat! © Voxeo Corporation
    78. Avoid the Mouse Trap © Voxeo Corporation
    79. Be ready to scale © Voxeo Corporation
    80. © Voxeo Corporation
    81. RJ Auburn rj@voxeo.com http://www.voxeo.com/prophecy http://evolution.voxeo.com © Voxeo Corporation

    + Voxeo CorpVoxeo Corp, 2 years ago

    custom

    1658 views, 3 favs, 0 embeds more stats

    How can you best develop applications using the Ses more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1658
      • 1658 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 3
    • Downloads 146
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events