SlideShare uma empresa Scribd logo
1 de 81
Baixar para ler offline
Sep 16th, 2008




TMC Communication Developer Conference



Developing SIP Applications

RJ Auburn
CTO
rj@voxeo.com
© Voxeo Corporation
Telephony
© Voxeo Corporation
Sucks
© Voxeo Corporation - Confidential
Complex
© Voxeo Corporation
Arcane
© Voxeo Corporation
Proprietary
© Voxeo Corporation
This is not
                      how it should be...


© Voxeo Corporation
Simple
© Voxeo Corporation
Ubiquitous
© Voxeo Corporation
Open
© Voxeo Corporation
What to do?



© Voxeo Corporation
Leverage The
                       Web Model
© Voxeo Corporation
Utilize Standards
© Voxeo Corporation
SOAP/REST
© Voxeo Corporation - Confidential
What Does It
                       Look Like?


© Voxeo Corporation
Application




                           API      XML        Tools



                                  Platform




16   © Voxeo Corporation
Application


                           JSR289,    CCXML
                            REST,        &         Designer
                            SOAP     VoiceXML


                                     Prophecy




17   © Voxeo Corporation
Application
                                 Application




                           API      XML        Tools



                                  Platform




18   © Voxeo Corporation
Building Blocks



© Voxeo Corporation
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 quot;SIP proxiesquot; in control of quot;SIP endpointsquot;
    - Work going on in P2PSIP - see www.p2psip.org
- Text-based protocol, originally modeled on HTTP


 © Voxeo Corporation
SIP Communication

                      INVITE
        Alice         180 RINGING   Bob
                      200 OK
                      ACK




                      RTP (voice)



                      BYE
                      200 OK




© Voxeo Corporation
Proxy         Proxy
                               A     SIP     B
                         P




                                                   SIP
                      SI




          Alice                      RTP                 Bob




© Voxeo Corporation
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
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
Religion
© Voxeo Corporation
XML
© Voxeo Corporation
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
© Voxeo Corporation
CCXML Hello World
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
<ccxml version=quot;1.0quot;>
  <eventprocessor>

      <transition event=quot;connection.alertingquot;>
        <log expr=quot;'***** CONNECTION ALERTING *****'quot;/>
        <if cond=quot;event$.connection.remote == '8315551234'quot;>
          <reject/>
        <else/>
          <accept/>
        </if>
      </transition>

      <transition event=quot;connection.connectedquot;>
        <log expr=quot;'***** CALL WAS ANSWERED *****'quot;/>
      </transition>

      <transition event=”connection.disconnected”>
        <log expr=”‘*** Call was disconnected ***’”/>
        <exit/>
      </transition>

    <transition event=quot;error.*quot;>
      <log expr=quot;'an error has occured (' + event$.reason + ')'quot;/>
      <exit/>
    </transition>
  </eventprocessor>
</ccxml>
 © Voxeo Corporation
Java?
© Voxeo Corporation
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
Converged Applications
© Voxeo Corporation
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
Example
                      Application
© Voxeo Corporation
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
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




36     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




37     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
         <ccxml version=quot;1.0quot; is id2=quot;incomingcallquot;/>
           <join id1=quot;event$.connectionidquot;
           <var name=quot;statusquot; expr=quot;'RJ     on the phone'quot;/>
                   xmlns=quot;http://www.w3.org/2002/09/ccxmlquot;>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </ccxml>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




38     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




39     © Voxeo Corporation
Follow Me/Find Me + Twitter
   <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
   <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
     <var name=quot;statequot; expr=quot;'init'quot;/>
     <var name=quot;incomingcallquot;/>
     <var name=quot;tURLquot;
          expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
     <eventprocessor statevariable=quot;statequot;>
       <transition event=quot;connection.alertingquot; state=quot;initquot;>
         <accept/>
       </transition>
       <transition event=quot;connection.connectedquot; state=quot;initquot;>
         <assign name=quot;statequot; expr=quot;'calling'quot;/>
         <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
         <createcall dest=quot;'tel:+18312392883'quot;/>
<var name=quot;statequot; expr=quot;'init'quot;/>
       </transition>
<var name=quot;incomingcallquot;/>
       <transition event=quot;connection.connectedquot; state=quot;callingquot;>
         <assign name=quot;statequot; expr=quot;'connected'quot;/>
<var name=quot;tURLquot;
         <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
         <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
         <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
               target=quot;tURLquot; namelist=quot;statusquot;/>
       </transition>
       <transition event=quot;connection.failedquot; state=quot;callingquot;>
<eventprocessor statevariable=quot;statequot;> his phone'quot;/>
         <assign name=quot;statequot; expr=quot;'done'quot;/>
         <var name=quot;statusquot; expr=quot;'RJ is not answering
</eventprocessor>
         <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
               target=quot;tURLquot; namelist=quot;statusquot;/>
       </transition>
       <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
         <assign name=quot;statequot; expr=quot;'done'quot;/>
         <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
         <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
               target=quot;tURLquot; namelist=quot;statusquot;/>
       </transition>
       <transition event=quot;send.successfulquot; state=quot;donequot;>
         <exit/>
       </transition>
     </eventprocessor>
   </ccxml>




 40   © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




41     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
        <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <accept/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
        </transition>
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




42     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




43     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
      <transition event=quot;connection.connectedquot; state=quot;initquot;>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
         <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
         <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
      </transition>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




44     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




45     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
      <transition dest=quot;'tel:+18312392883'quot;/>
           <createcall event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>

         <assign name=quot;statequot; expr=quot;'connected'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
         <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <assign name=quot;statequot; expr=quot;'connected'quot;/> id2=quot;incomingcallquot;/>
           <join
                 id1=quot;event$.connectionidquot;
         <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
         <send target=quot;tURLquot; namelist=quot;statusquot;/> name=quot;'update'quot;
                 targettype=quot;'basichttp'quot;
         </transition>
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
      </transition>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




46     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




47     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
     <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
       <assigntargettype=quot;'basichttp'quot; name=quot;'update'quot;
           <send   name=quot;statequot; expr=quot;'done'quot;/>
                 target=quot;tURLquot; namelist=quot;statusquot;/>
       <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
       <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <sendtarget=quot;tURLquot; namelist=quot;statusquot;/>
                 targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
     </transition>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




48     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




49     © Voxeo Corporation
Follow Me/Find Me + Twitter
      <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
      <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
        <var name=quot;statequot; expr=quot;'init'quot;/>
        <var name=quot;incomingcallquot;/>
        <var name=quot;tURLquot;
             expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
        <eventprocessor statevariable=quot;statequot;>
          <transition event=quot;connection.alertingquot; state=quot;initquot;>
            <accept/>
          </transition>
          <transition event=quot;connection.connectedquot; state=quot;initquot;>
            <assign name=quot;statequot; expr=quot;'calling'quot;/>
            <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
            <createcall dest=quot;'tel:+18312392883'quot;/>
          </transition>
          <transition event=quot;connection.connectedquot; state=quot;callingquot;>
     <transition name=quot;statequot; expr=quot;'connected'quot;/>
            <assign
            <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> state=quot;connectedquot;>
                      event=quot;connection.disconnectedquot;
       <assignname=quot;statusquot; expr=quot;'RJ isname=quot;'update'quot;
            <var                             on the phone'quot;/>
                  name=quot;statequot; expr=quot;'done'quot;/>
            <send targettype=quot;'basichttp'quot;
                  target=quot;tURLquot; namelist=quot;statusquot;/>
       <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
          </transition>
          <transition event=quot;connection.failedquot; state=quot;callingquot;>
       <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
            <assign name=quot;statequot; expr=quot;'done'quot;/>
            <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
                target=quot;tURLquot; namelist=quot;statusquot;/>
            <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
     </transition>target=quot;tURLquot; namelist=quot;statusquot;/>
          </transition>
          <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
            <assign name=quot;statequot; expr=quot;'done'quot;/>
            <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
            <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                  target=quot;tURLquot; namelist=quot;statusquot;/>
          </transition>
          <transition event=quot;send.successfulquot; state=quot;donequot;>
            <exit/>
          </transition>
        </eventprocessor>
      </ccxml>




50      © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




51     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
            <transition event=quot;send.successfulquot; state=quot;donequot;>
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
               <exit/>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
            </transition>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




52     © Voxeo Corporation
Follow Me/Find Me + Twitter
     <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
     <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;>
       <var name=quot;statequot; expr=quot;'init'quot;/>
       <var name=quot;incomingcallquot;/>
       <var name=quot;tURLquot;
            expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/>
       <eventprocessor statevariable=quot;statequot;>
         <transition event=quot;connection.alertingquot; state=quot;initquot;>
           <accept/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;initquot;>
           <assign name=quot;statequot; expr=quot;'calling'quot;/>
           <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/>
           <createcall dest=quot;'tel:+18312392883'quot;/>
         </transition>
         <transition event=quot;connection.connectedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'connected'quot;/>
           <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/>
           <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.failedquot; state=quot;callingquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;>
           <assign name=quot;statequot; expr=quot;'done'quot;/>
           <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/>
           <send targettype=quot;'basichttp'quot; name=quot;'update'quot;
                 target=quot;tURLquot; namelist=quot;statusquot;/>
         </transition>
         <transition event=quot;send.successfulquot; state=quot;donequot;>
           <exit/>
         </transition>
       </eventprocessor>
     </ccxml>




53     © Voxeo Corporation
We Got Java Bean!
© Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
         SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
         targets = new ArrayList<URI>();
         targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
         targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
         targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
     }
     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(quot;invitequot;))
         {
             try {
                 twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                           + resp.getRequest().getRequestURI());
             } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
         }
     }
}


55    © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
         SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
         targets = new ArrayList<URI>();
         targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
         targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
         targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
     }
     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(quot;invitequot;))
         {
             try {
                 twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                           + resp.getRequest().getRequestURI());
             } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
         }
     }
}


56    © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
         SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
           import java.util.ArrayList;
         targets = new ArrayList<URI>();
         targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
           import java.util.List;
         targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
         targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
     }     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(quot;invitequot;))
         {
             try {
                 twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                           + resp.getRequest().getRequestURI());
             } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
         }
     }
}


57    © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
         SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
         targets = new ArrayList<URI>();
         targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
         targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
         targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
     }
     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(quot;invitequot;))
         {
             try {
                 twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                           + resp.getRequest().getRequestURI());
             } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
         }
     }
}


58    © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
             SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
         } targets = new ArrayList<URI>();
             targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
                 targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
                 targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
         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(quot;invitequot;))resp) throws IOException {
         protected void doSuccessResponse(SipServletResponse
                 {
}                        try {
                             twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                                       + resp.getRequest().getRequestURI());
                         } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
                 }
         }
    }


    59       © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
         SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
         targets = new ArrayList<URI>();
         targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
         targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
         targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
     }
     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(quot;invitequot;))
         {
             try {
                 twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                           + resp.getRequest().getRequestURI());
             } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
         }
     }
}


60    © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
       SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
public void init() throws ServletException {
       targets = new ArrayList<URI>();
       targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
 twitter_api = new Api(quot;zscgeekquot;, quot;passwordquot;);
       targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
       targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
 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(quot;sip:rj@voxeo.comquot;));
            proxy.setParallel(true);
            proxy.proxyTo(targets);
 targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
        }
    }
 targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
         protected void doSuccessResponse(SipServletResponse resp) throws IOException {
}            if (resp.getMethod().equalsIgnoreCase(quot;invitequot;))
             {
                 try {
                     twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                               + resp.getRequest().getRequestURI());
                 } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
             }
         }
    }


    61    © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
         SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
         targets = new ArrayList<URI>();
         targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
         targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
         targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
     }
     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(quot;invitequot;))
         {
             try {
                 twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                           + resp.getRequest().getRequestURI());
             } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
         }
     }
}


62    © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
         SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
                    Proxy proxy = req.getProxy();
         targets = new ArrayList<URI>();
         targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
                    proxy.setRecordRoute(true);
         targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
         targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
     }              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(quot;invitequot;))
         {
             try {
                 twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                           + resp.getRequest().getRequestURI());
             } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
         }
     }
}


63    © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
         SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
         targets = new ArrayList<URI>();
         targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
         targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
         targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
     }
     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(quot;invitequot;))
         {
             try {
                 twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                           + resp.getRequest().getRequestURI());
             } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
         }
     }
}


64    © Voxeo Corporation
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(quot;invitequot;))
           twitter_api = new Api(quot;zscgeekquot;, quot;passwordquot;);
           SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
     {     targets = new ArrayList<URI>();
           targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
       trytargets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
            {
           targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
       } twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
               + resp.getRequest().getRequestURI());
         protected void doInvite(SipServletRequest req) throws ServletException, IOException {
             if (req.isInitial()) {
         } catch(TwitterException e){log(quot;failed to update twitterquot;,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(quot;invitequot;))
             {
                 try {
                     twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                               + resp.getRequest().getRequestURI());
                 } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
             }
         }
    }


    65    © Voxeo Corporation
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(quot;zscgeekquot;, quot;passwordquot;);
         SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY);
         targets = new ArrayList<URI>();
         targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;));
         targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;));
         targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;));
     }
     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(quot;invitequot;))
         {
             try {
                 twitter_api.updateStatus(quot;RJ is taking a phone call from quot;
                                           + resp.getRequest().getRequestURI());
             } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);}
         }
     }
}


66    © Voxeo Corporation
So why is this important?
© Voxeo Corporation
Phone Developers   Web Developers



                          Web Developers
© Voxeo Corporation
Web
© Voxeo Corporation
Ideas We have
                      Never Thought Of
© Voxeo Corporation
Standards Matter
© Voxeo Corporation
Example Usage
© Voxeo Corporation
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
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
Wrapping Up
© Voxeo Corporation
Look at the big picture
© Voxeo Corporation                             http://flickr.com/photos/txd/100437832
More then one way to skin a cat!
© Voxeo Corporation
Avoid the Mouse Trap
© Voxeo Corporation
Be ready to scale
© Voxeo Corporation
© Voxeo Corporation
RJ Auburn
                      rj@voxeo.com
        http://www.voxeo.com/prophecy
           http://evolution.voxeo.com


© Voxeo Corporation

Mais conteúdo relacionado

Destaque (20)

Bernardette
BernardetteBernardette
Bernardette
 
Partes De La Computadora
Partes De La ComputadoraPartes De La Computadora
Partes De La Computadora
 
Gosto De Voce
Gosto De VoceGosto De Voce
Gosto De Voce
 
Plano
PlanoPlano
Plano
 
Presentacion Ti Cs
Presentacion Ti CsPresentacion Ti Cs
Presentacion Ti Cs
 
Tópicos Literarios
Tópicos LiterariosTópicos Literarios
Tópicos Literarios
 
Investipos
InvestiposInvestipos
Investipos
 
Aula02 Farmacia
Aula02 FarmaciaAula02 Farmacia
Aula02 Farmacia
 
Shopping
ShoppingShopping
Shopping
 
Tutorial De Slideshare
Tutorial De SlideshareTutorial De Slideshare
Tutorial De Slideshare
 
Atividades Dsesenvolvidas
Atividades DsesenvolvidasAtividades Dsesenvolvidas
Atividades Dsesenvolvidas
 
PC 4.3 Notes
PC 4.3 NotesPC 4.3 Notes
PC 4.3 Notes
 
Valerie
ValerieValerie
Valerie
 
0[1].Evita
0[1].Evita0[1].Evita
0[1].Evita
 
Planta
PlantaPlanta
Planta
 
Analise Imagem Edna Pereira Ap Taboado
Analise Imagem Edna Pereira Ap TaboadoAnalise Imagem Edna Pereira Ap Taboado
Analise Imagem Edna Pereira Ap Taboado
 
Logic
LogicLogic
Logic
 
PresentacióN 1 De Salud
PresentacióN 1 De SaludPresentacióN 1 De Salud
PresentacióN 1 De Salud
 
As Palavras
As PalavrasAs Palavras
As Palavras
 
Vivek Kundra: Creating the Digital Public Square / Forum One Web Executive Se...
Vivek Kundra: Creating the Digital Public Square / Forum One Web Executive Se...Vivek Kundra: Creating the Digital Public Square / Forum One Web Executive Se...
Vivek Kundra: Creating the Digital Public Square / Forum One Web Executive Se...
 

Semelhante a Follow Me App Posts Call Status to Twitter

Voxeo Labs presentation at Mobicents Summit 2011
Voxeo Labs presentation at Mobicents Summit 2011Voxeo Labs presentation at Mobicents Summit 2011
Voxeo Labs presentation at Mobicents Summit 2011telestax
 
Getting a live_transcript_of_your_call_using_the_ari
Getting a live_transcript_of_your_call_using_the_ariGetting a live_transcript_of_your_call_using_the_ari
Getting a live_transcript_of_your_call_using_the_ariPascal Cadotte-Michaud
 
Apidaze WebRTC Workshop barcelona 21st april 2013
Apidaze WebRTC Workshop barcelona 21st april 2013Apidaze WebRTC Workshop barcelona 21st april 2013
Apidaze WebRTC Workshop barcelona 21st april 2013Alan Quayle
 
N2Y4 Mobile Challenge May 2009 San Jose
N2Y4 Mobile Challenge May 2009   San JoseN2Y4 Mobile Challenge May 2009   San Jose
N2Y4 Mobile Challenge May 2009 San JoseAdhearsion Foundation
 
Lets dance- Dutch Architecture Conference (LAC) 2018
Lets dance- Dutch Architecture Conference (LAC) 2018Lets dance- Dutch Architecture Conference (LAC) 2018
Lets dance- Dutch Architecture Conference (LAC) 2018Yenlo
 
What's New with Windows Phone - FoxCon Talk
What's New with Windows Phone - FoxCon TalkWhat's New with Windows Phone - FoxCon Talk
What's New with Windows Phone - FoxCon TalkSam Basu
 
From MSS to TelScale - Mobicents Summit 2011
From MSS to TelScale - Mobicents Summit 2011From MSS to TelScale - Mobicents Summit 2011
From MSS to TelScale - Mobicents Summit 2011telestax
 
Victor Charpenay | Standardized Semantics for an Open Web of Things
Victor Charpenay | Standardized Semantics for an Open Web of ThingsVictor Charpenay | Standardized Semantics for an Open Web of Things
Victor Charpenay | Standardized Semantics for an Open Web of Thingssemanticsconference
 
Java EE 7 (Lyon JUG & Alpes JUG - March 2014)
Java EE 7 (Lyon JUG & Alpes JUG  - March 2014)Java EE 7 (Lyon JUG & Alpes JUG  - March 2014)
Java EE 7 (Lyon JUG & Alpes JUG - March 2014)David Delabassee
 
Open Source Telecom Software is the Keystone of Our Industry, Alan Quayle, fo...
Open Source Telecom Software is the Keystone of Our Industry, Alan Quayle, fo...Open Source Telecom Software is the Keystone of Our Industry, Alan Quayle, fo...
Open Source Telecom Software is the Keystone of Our Industry, Alan Quayle, fo...Alan Quayle
 
Webex APIs for Administrators - CL20B - DEVNET-2610
Webex APIs for Administrators - CL20B - DEVNET-2610Webex APIs for Administrators - CL20B - DEVNET-2610
Webex APIs for Administrators - CL20B - DEVNET-2610Cisco DevNet
 
WebRTC - On Standards, Identity and Telco Strategy
WebRTC - On Standards, Identity and Telco StrategyWebRTC - On Standards, Identity and Telco Strategy
WebRTC - On Standards, Identity and Telco StrategyJose de Castro
 
Past, Present and Future of WebSocket - HTML5DevConf May 2014
Past, Present and Future of WebSocket - HTML5DevConf May 2014Past, Present and Future of WebSocket - HTML5DevConf May 2014
Past, Present and Future of WebSocket - HTML5DevConf May 2014Frank Greco
 
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016Cisco DevNet
 
CCXML For Advanced Communications Applications
CCXML For Advanced Communications ApplicationsCCXML For Advanced Communications Applications
CCXML For Advanced Communications ApplicationsVoxeo Corp
 
Jax WS JAX RS and Java Web Apps with WSO2 Platform
Jax WS JAX RS and Java Web Apps with WSO2 PlatformJax WS JAX RS and Java Web Apps with WSO2 Platform
Jax WS JAX RS and Java Web Apps with WSO2 PlatformWSO2
 

Semelhante a Follow Me App Posts Call Status to Twitter (20)

Voxeo Labs presentation at Mobicents Summit 2011
Voxeo Labs presentation at Mobicents Summit 2011Voxeo Labs presentation at Mobicents Summit 2011
Voxeo Labs presentation at Mobicents Summit 2011
 
Getting a live_transcript_of_your_call_using_the_ari
Getting a live_transcript_of_your_call_using_the_ariGetting a live_transcript_of_your_call_using_the_ari
Getting a live_transcript_of_your_call_using_the_ari
 
Apidaze WebRTC Workshop barcelona 21st april 2013
Apidaze WebRTC Workshop barcelona 21st april 2013Apidaze WebRTC Workshop barcelona 21st april 2013
Apidaze WebRTC Workshop barcelona 21st april 2013
 
N2Y4 Mobile Challenge May 2009 San Jose
N2Y4 Mobile Challenge May 2009   San JoseN2Y4 Mobile Challenge May 2009   San Jose
N2Y4 Mobile Challenge May 2009 San Jose
 
Lets dance- Dutch Architecture Conference (LAC) 2018
Lets dance- Dutch Architecture Conference (LAC) 2018Lets dance- Dutch Architecture Conference (LAC) 2018
Lets dance- Dutch Architecture Conference (LAC) 2018
 
What's New with Windows Phone - FoxCon Talk
What's New with Windows Phone - FoxCon TalkWhat's New with Windows Phone - FoxCon Talk
What's New with Windows Phone - FoxCon Talk
 
Kamailio World 2014 - Kamailio - The Platform for Interoperable WebRTC
Kamailio World 2014 - Kamailio - The Platform for Interoperable WebRTCKamailio World 2014 - Kamailio - The Platform for Interoperable WebRTC
Kamailio World 2014 - Kamailio - The Platform for Interoperable WebRTC
 
From MSS to TelScale - Mobicents Summit 2011
From MSS to TelScale - Mobicents Summit 2011From MSS to TelScale - Mobicents Summit 2011
From MSS to TelScale - Mobicents Summit 2011
 
Victor Charpenay | Standardized Semantics for an Open Web of Things
Victor Charpenay | Standardized Semantics for an Open Web of ThingsVictor Charpenay | Standardized Semantics for an Open Web of Things
Victor Charpenay | Standardized Semantics for an Open Web of Things
 
Soa And Web Services Security
Soa And Web Services SecuritySoa And Web Services Security
Soa And Web Services Security
 
Java EE 7 (Lyon JUG & Alpes JUG - March 2014)
Java EE 7 (Lyon JUG & Alpes JUG  - March 2014)Java EE 7 (Lyon JUG & Alpes JUG  - March 2014)
Java EE 7 (Lyon JUG & Alpes JUG - March 2014)
 
Open Source Telecom Software is the Keystone of Our Industry, Alan Quayle, fo...
Open Source Telecom Software is the Keystone of Our Industry, Alan Quayle, fo...Open Source Telecom Software is the Keystone of Our Industry, Alan Quayle, fo...
Open Source Telecom Software is the Keystone of Our Industry, Alan Quayle, fo...
 
Webex APIs for Administrators - CL20B - DEVNET-2610
Webex APIs for Administrators - CL20B - DEVNET-2610Webex APIs for Administrators - CL20B - DEVNET-2610
Webex APIs for Administrators - CL20B - DEVNET-2610
 
Gfp Launch Sailfin Enables Sreeram
Gfp Launch Sailfin Enables SreeramGfp Launch Sailfin Enables Sreeram
Gfp Launch Sailfin Enables Sreeram
 
WebRTC - On Standards, Identity and Telco Strategy
WebRTC - On Standards, Identity and Telco StrategyWebRTC - On Standards, Identity and Telco Strategy
WebRTC - On Standards, Identity and Telco Strategy
 
Past, Present and Future of WebSocket - HTML5DevConf May 2014
Past, Present and Future of WebSocket - HTML5DevConf May 2014Past, Present and Future of WebSocket - HTML5DevConf May 2014
Past, Present and Future of WebSocket - HTML5DevConf May 2014
 
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
DevNet @TAG - Spark & Tropo APIs - Milan/Rome May 2016
 
CCXML For Advanced Communications Applications
CCXML For Advanced Communications ApplicationsCCXML For Advanced Communications Applications
CCXML For Advanced Communications Applications
 
Jax WS JAX RS and Java Web Apps with WSO2 Platform
Jax WS JAX RS and Java Web Apps with WSO2 PlatformJax WS JAX RS and Java Web Apps with WSO2 Platform
Jax WS JAX RS and Java Web Apps with WSO2 Platform
 
Web services - REST and SOAP
Web services - REST and SOAPWeb services - REST and SOAP
Web services - REST and SOAP
 

Mais de Voxeo Corp

Voxeo Summit Day 2 -What's new in CXP 14
Voxeo Summit Day 2 -What's new in CXP 14Voxeo Summit Day 2 -What's new in CXP 14
Voxeo Summit Day 2 -What's new in CXP 14Voxeo Corp
 
Voxeo Summit Day 2 -Voxeo APIs and SDKs
Voxeo Summit Day 2 -Voxeo APIs and SDKsVoxeo Summit Day 2 -Voxeo APIs and SDKs
Voxeo Summit Day 2 -Voxeo APIs and SDKsVoxeo Corp
 
Voxeo Summit Day 2 - Voxeo CXP - IVR on Steroids
Voxeo Summit Day 2 - Voxeo CXP - IVR on SteroidsVoxeo Summit Day 2 - Voxeo CXP - IVR on Steroids
Voxeo Summit Day 2 - Voxeo CXP - IVR on SteroidsVoxeo Corp
 
Voxeo Summit Day 2 - Using CXP hotspot analytics
Voxeo Summit Day 2 - Using CXP hotspot analyticsVoxeo Summit Day 2 - Using CXP hotspot analytics
Voxeo Summit Day 2 - Using CXP hotspot analyticsVoxeo Corp
 
Voxeo Summit Day 2 - Securing customer interactions
Voxeo Summit Day 2 - Securing customer interactionsVoxeo Summit Day 2 - Securing customer interactions
Voxeo Summit Day 2 - Securing customer interactionsVoxeo Corp
 
Voxeo Summit Day 2 - Real-time communications with WebRTC
Voxeo Summit Day 2 - Real-time communications with WebRTCVoxeo Summit Day 2 - Real-time communications with WebRTC
Voxeo Summit Day 2 - Real-time communications with WebRTCVoxeo Corp
 
Voxeo Summit Day 2 - Voxeo CXP for business users
Voxeo Summit Day 2 - Voxeo CXP for business usersVoxeo Summit Day 2 - Voxeo CXP for business users
Voxeo Summit Day 2 - Voxeo CXP for business usersVoxeo Corp
 
Voxeo Summit Day 2 - Creating raving fans
Voxeo Summit Day 2 - Creating raving fansVoxeo Summit Day 2 - Creating raving fans
Voxeo Summit Day 2 - Creating raving fansVoxeo Corp
 
Voxeo Summit Day 2 - Advanced CCXML topics
Voxeo Summit Day 2 - Advanced CCXML topicsVoxeo Summit Day 2 - Advanced CCXML topics
Voxeo Summit Day 2 - Advanced CCXML topicsVoxeo Corp
 
Voxeo Summit Day 2 - The science of customer obsession
Voxeo Summit Day 2 - The science of customer obsessionVoxeo Summit Day 2 - The science of customer obsession
Voxeo Summit Day 2 - The science of customer obsessionVoxeo Corp
 
Voxeo Summit Day 1 - Extending your IVR investment to mobile
Voxeo Summit Day 1 - Extending your IVR investment to mobileVoxeo Summit Day 1 - Extending your IVR investment to mobile
Voxeo Summit Day 1 - Extending your IVR investment to mobileVoxeo Corp
 
Voxeo Summit Day 1 - The Art of The Possible
Voxeo Summit Day 1 - The Art of The PossibleVoxeo Summit Day 1 - The Art of The Possible
Voxeo Summit Day 1 - The Art of The PossibleVoxeo Corp
 
Voxeo Summit Day 1 - Prophecy log search
Voxeo Summit Day 1 - Prophecy log searchVoxeo Summit Day 1 - Prophecy log search
Voxeo Summit Day 1 - Prophecy log searchVoxeo Corp
 
Voxeo Summit Day 1 - Customer experience analytics
Voxeo Summit Day 1 - Customer experience analyticsVoxeo Summit Day 1 - Customer experience analytics
Voxeo Summit Day 1 - Customer experience analyticsVoxeo Corp
 
Voxeo Summit Day 1 - Communications-enabled Business Processes (CEBP)
Voxeo Summit Day 1 - Communications-enabled Business Processes (CEBP)Voxeo Summit Day 1 - Communications-enabled Business Processes (CEBP)
Voxeo Summit Day 1 - Communications-enabled Business Processes (CEBP)Voxeo Corp
 
Voxeo Summit Day 1 - A view into the Voxeo cloud
Voxeo Summit Day 1 - A view into the Voxeo cloudVoxeo Summit Day 1 - A view into the Voxeo cloud
Voxeo Summit Day 1 - A view into the Voxeo cloudVoxeo Corp
 
Voxeo Summit Day 1 - Lessons learned from large scale deployments
Voxeo Summit Day 1 - Lessons learned from large scale deploymentsVoxeo Summit Day 1 - Lessons learned from large scale deployments
Voxeo Summit Day 1 - Lessons learned from large scale deploymentsVoxeo Corp
 
Voxeo Jam Session: What's New in Prophecy 11 and VoiceObjects 11?
Voxeo Jam Session: What's New in Prophecy 11 and VoiceObjects 11?Voxeo Jam Session: What's New in Prophecy 11 and VoiceObjects 11?
Voxeo Jam Session: What's New in Prophecy 11 and VoiceObjects 11?Voxeo Corp
 
How Do You Hear Me Now?
How Do You Hear Me Now?How Do You Hear Me Now?
How Do You Hear Me Now?Voxeo Corp
 
IPv6 and How It Impacts Communication Applications
IPv6 and How It Impacts Communication ApplicationsIPv6 and How It Impacts Communication Applications
IPv6 and How It Impacts Communication ApplicationsVoxeo Corp
 

Mais de Voxeo Corp (20)

Voxeo Summit Day 2 -What's new in CXP 14
Voxeo Summit Day 2 -What's new in CXP 14Voxeo Summit Day 2 -What's new in CXP 14
Voxeo Summit Day 2 -What's new in CXP 14
 
Voxeo Summit Day 2 -Voxeo APIs and SDKs
Voxeo Summit Day 2 -Voxeo APIs and SDKsVoxeo Summit Day 2 -Voxeo APIs and SDKs
Voxeo Summit Day 2 -Voxeo APIs and SDKs
 
Voxeo Summit Day 2 - Voxeo CXP - IVR on Steroids
Voxeo Summit Day 2 - Voxeo CXP - IVR on SteroidsVoxeo Summit Day 2 - Voxeo CXP - IVR on Steroids
Voxeo Summit Day 2 - Voxeo CXP - IVR on Steroids
 
Voxeo Summit Day 2 - Using CXP hotspot analytics
Voxeo Summit Day 2 - Using CXP hotspot analyticsVoxeo Summit Day 2 - Using CXP hotspot analytics
Voxeo Summit Day 2 - Using CXP hotspot analytics
 
Voxeo Summit Day 2 - Securing customer interactions
Voxeo Summit Day 2 - Securing customer interactionsVoxeo Summit Day 2 - Securing customer interactions
Voxeo Summit Day 2 - Securing customer interactions
 
Voxeo Summit Day 2 - Real-time communications with WebRTC
Voxeo Summit Day 2 - Real-time communications with WebRTCVoxeo Summit Day 2 - Real-time communications with WebRTC
Voxeo Summit Day 2 - Real-time communications with WebRTC
 
Voxeo Summit Day 2 - Voxeo CXP for business users
Voxeo Summit Day 2 - Voxeo CXP for business usersVoxeo Summit Day 2 - Voxeo CXP for business users
Voxeo Summit Day 2 - Voxeo CXP for business users
 
Voxeo Summit Day 2 - Creating raving fans
Voxeo Summit Day 2 - Creating raving fansVoxeo Summit Day 2 - Creating raving fans
Voxeo Summit Day 2 - Creating raving fans
 
Voxeo Summit Day 2 - Advanced CCXML topics
Voxeo Summit Day 2 - Advanced CCXML topicsVoxeo Summit Day 2 - Advanced CCXML topics
Voxeo Summit Day 2 - Advanced CCXML topics
 
Voxeo Summit Day 2 - The science of customer obsession
Voxeo Summit Day 2 - The science of customer obsessionVoxeo Summit Day 2 - The science of customer obsession
Voxeo Summit Day 2 - The science of customer obsession
 
Voxeo Summit Day 1 - Extending your IVR investment to mobile
Voxeo Summit Day 1 - Extending your IVR investment to mobileVoxeo Summit Day 1 - Extending your IVR investment to mobile
Voxeo Summit Day 1 - Extending your IVR investment to mobile
 
Voxeo Summit Day 1 - The Art of The Possible
Voxeo Summit Day 1 - The Art of The PossibleVoxeo Summit Day 1 - The Art of The Possible
Voxeo Summit Day 1 - The Art of The Possible
 
Voxeo Summit Day 1 - Prophecy log search
Voxeo Summit Day 1 - Prophecy log searchVoxeo Summit Day 1 - Prophecy log search
Voxeo Summit Day 1 - Prophecy log search
 
Voxeo Summit Day 1 - Customer experience analytics
Voxeo Summit Day 1 - Customer experience analyticsVoxeo Summit Day 1 - Customer experience analytics
Voxeo Summit Day 1 - Customer experience analytics
 
Voxeo Summit Day 1 - Communications-enabled Business Processes (CEBP)
Voxeo Summit Day 1 - Communications-enabled Business Processes (CEBP)Voxeo Summit Day 1 - Communications-enabled Business Processes (CEBP)
Voxeo Summit Day 1 - Communications-enabled Business Processes (CEBP)
 
Voxeo Summit Day 1 - A view into the Voxeo cloud
Voxeo Summit Day 1 - A view into the Voxeo cloudVoxeo Summit Day 1 - A view into the Voxeo cloud
Voxeo Summit Day 1 - A view into the Voxeo cloud
 
Voxeo Summit Day 1 - Lessons learned from large scale deployments
Voxeo Summit Day 1 - Lessons learned from large scale deploymentsVoxeo Summit Day 1 - Lessons learned from large scale deployments
Voxeo Summit Day 1 - Lessons learned from large scale deployments
 
Voxeo Jam Session: What's New in Prophecy 11 and VoiceObjects 11?
Voxeo Jam Session: What's New in Prophecy 11 and VoiceObjects 11?Voxeo Jam Session: What's New in Prophecy 11 and VoiceObjects 11?
Voxeo Jam Session: What's New in Prophecy 11 and VoiceObjects 11?
 
How Do You Hear Me Now?
How Do You Hear Me Now?How Do You Hear Me Now?
How Do You Hear Me Now?
 
IPv6 and How It Impacts Communication Applications
IPv6 and How It Impacts Communication ApplicationsIPv6 and How It Impacts Communication Applications
IPv6 and How It Impacts Communication Applications
 

Último

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 

Último (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Follow Me App Posts Call Status to Twitter

  • 1. Sep 16th, 2008 TMC Communication Developer Conference Developing SIP Applications RJ Auburn CTO rj@voxeo.com © Voxeo Corporation
  • 3. Sucks © Voxeo Corporation - Confidential
  • 7. This is not how it should be... © Voxeo Corporation
  • 11. What to do? © Voxeo Corporation
  • 12. Leverage The Web Model © Voxeo Corporation
  • 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
  • 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 quot;SIP proxiesquot; in control of quot;SIP endpointsquot; - 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
  • 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
  • 29. CCXML Hello World <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml version=quot;1.0quot;> <eventprocessor> <transition event=quot;connection.alertingquot;> <log expr=quot;'***** CONNECTION ALERTING *****'quot;/> <if cond=quot;event$.connection.remote == '8315551234'quot;> <reject/> <else/> <accept/> </if> </transition> <transition event=quot;connection.connectedquot;> <log expr=quot;'***** CALL WAS ANSWERED *****'quot;/> </transition> <transition event=”connection.disconnected”> <log expr=”‘*** Call was disconnected ***’”/> <exit/> </transition> <transition event=quot;error.*quot;> <log expr=quot;'an error has occured (' + event$.reason + ')'quot;/> <exit/> </transition> </eventprocessor> </ccxml> © 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
  • 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=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 36 © Voxeo Corporation
  • 37. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 37 © Voxeo Corporation
  • 38. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <ccxml version=quot;1.0quot; is id2=quot;incomingcallquot;/> <join id1=quot;event$.connectionidquot; <var name=quot;statusquot; expr=quot;'RJ on the phone'quot;/> xmlns=quot;http://www.w3.org/2002/09/ccxmlquot;> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </ccxml> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 38 © Voxeo Corporation
  • 39. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 39 © Voxeo Corporation
  • 40. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> <var name=quot;statequot; expr=quot;'init'quot;/> </transition> <var name=quot;incomingcallquot;/> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <var name=quot;tURLquot; <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <eventprocessor statevariable=quot;statequot;> his phone'quot;/> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering </eventprocessor> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 40 © Voxeo Corporation
  • 41. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 41 © Voxeo Corporation
  • 42. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <accept/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; </transition> target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 42 © Voxeo Corporation
  • 43. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 43 © Voxeo Corporation
  • 44. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <assign name=quot;statequot; expr=quot;'calling'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> </transition> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 44 © Voxeo Corporation
  • 45. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 45 © Voxeo Corporation
  • 46. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <transition dest=quot;'tel:+18312392883'quot;/> <createcall event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <assign name=quot;statequot; expr=quot;'connected'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <assign name=quot;statequot; expr=quot;'connected'quot;/> id2=quot;incomingcallquot;/> <join id1=quot;event$.connectionidquot; <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; <send target=quot;tURLquot; namelist=quot;statusquot;/> name=quot;'update'quot; targettype=quot;'basichttp'quot; </transition> target=quot;tURLquot; namelist=quot;statusquot;/> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> </transition> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 46 © Voxeo Corporation
  • 47. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 47 © Voxeo Corporation
  • 48. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <transition event=quot;connection.failedquot; state=quot;callingquot;> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <assigntargettype=quot;'basichttp'quot; name=quot;'update'quot; <send name=quot;statequot; expr=quot;'done'quot;/> target=quot;tURLquot; namelist=quot;statusquot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <sendtarget=quot;tURLquot; namelist=quot;statusquot;/> targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 48 © Voxeo Corporation
  • 49. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 49 © Voxeo Corporation
  • 50. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <transition name=quot;statequot; expr=quot;'connected'quot;/> <assign <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> state=quot;connectedquot;> event=quot;connection.disconnectedquot; <assignname=quot;statusquot; expr=quot;'RJ isname=quot;'update'quot; <var on the phone'quot;/> name=quot;statequot; expr=quot;'done'quot;/> <send targettype=quot;'basichttp'quot; target=quot;tURLquot; namelist=quot;statusquot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> target=quot;tURLquot; namelist=quot;statusquot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; </transition>target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 50 © Voxeo Corporation
  • 51. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 51 © Voxeo Corporation
  • 52. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; <transition event=quot;send.successfulquot; state=quot;donequot;> target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <exit/> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> </transition> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <exit/> </transition> </eventprocessor> </ccxml> 52 © Voxeo Corporation
  • 53. Follow Me/Find Me + Twitter <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <ccxml xmlns=quot;http://www.w3.org/2002/09/ccxmlquot; version=quot;1.0quot;> <var name=quot;statequot; expr=quot;'init'quot;/> <var name=quot;incomingcallquot;/> <var name=quot;tURLquot; expr=quot;'http://zscgeek:password@twitter.com/statuses/update.xml'quot;/> <eventprocessor statevariable=quot;statequot;> <transition event=quot;connection.alertingquot; state=quot;initquot;> <accept/> </transition> <transition event=quot;connection.connectedquot; state=quot;initquot;> <assign name=quot;statequot; expr=quot;'calling'quot;/> <assign name=quot;incomingcallquot; expr=quot;event$.connectionidquot;/> <createcall dest=quot;'tel:+18312392883'quot;/> </transition> <transition event=quot;connection.connectedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'connected'quot;/> <join id1=quot;event$.connectionidquot; id2=quot;incomingcallquot;/> <var name=quot;statusquot; expr=quot;'RJ is on the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.failedquot; state=quot;callingquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is not answering his phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;connection.disconnectedquot; state=quot;connectedquot;> <assign name=quot;statequot; expr=quot;'done'quot;/> <var name=quot;statusquot; expr=quot;'RJ is off the phone'quot;/> <send targettype=quot;'basichttp'quot; name=quot;'update'quot; target=quot;tURLquot; namelist=quot;statusquot;/> </transition> <transition event=quot;send.successfulquot; state=quot;donequot;> <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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } 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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } 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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); import java.util.ArrayList; targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); import java.util.List; targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } 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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } 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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); } targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); 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(quot;invitequot;))resp) throws IOException { protected void doSuccessResponse(SipServletResponse { } try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } 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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); public void init() throws ServletException { targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); twitter_api = new Api(quot;zscgeekquot;, quot;passwordquot;); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); 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(quot;sip:rj@voxeo.comquot;)); proxy.setParallel(true); proxy.proxyTo(targets); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); } } targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); protected void doSuccessResponse(SipServletResponse resp) throws IOException { } if (resp.getMethod().equalsIgnoreCase(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } 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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); Proxy proxy = req.getProxy(); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); proxy.setRecordRoute(true); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } 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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } 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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;invitequot;)) twitter_api = new Api(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); { targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); trytargets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); { targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); protected void doInvite(SipServletRequest req) throws ServletException, IOException { if (req.isInitial()) { } catch(TwitterException e){log(quot;failed to update twitterquot;,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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,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(quot;zscgeekquot;, quot;passwordquot;); SipFactory sipFactory = (SipFactory)getServletContext().getAttribute(SIP_FACTORY); targets = new ArrayList<URI>(); targets.add(sipFactory.createURI(quot;sip:rj@voxeo.comquot;)); targets.add(sipFactory.createURI(quot;sip:rj@rjauburn.comquot;)); targets.add(sipFactory.createURI(quot;sip:8312392883@provider.comquot;)); } 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(quot;invitequot;)) { try { twitter_api.updateStatus(quot;RJ is taking a phone call from quot; + resp.getRequest().getRequestURI()); } catch (TwitterException e) {log(quot;failed to update twitterquot;,e);} } } } 66 © Voxeo Corporation
  • 67. So why is this important? © Voxeo Corporation
  • 68. Phone Developers Web Developers Web Developers © Voxeo Corporation
  • 70. Ideas We have Never Thought Of © 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
  • 81. RJ Auburn rj@voxeo.com http://www.voxeo.com/prophecy http://evolution.voxeo.com © Voxeo Corporation