Posts Tagged ‘CCXML’

Have you checked out our CCXML Resource Page?

Thursday, July 14th, 2011

Have you checked out our new CCXML Resource Page yet? As part of the announcement that Call Control XML (CCXML) is now a formal W3C “Recommendation” (the highest possible level of standard), we put together a page of resources at:

http://pages.voxeo.com/ccxml/

We got some links to tutorials, documentation and even a white paper about the power of CCXML.

CCXML is a very powerful tool for building communications apps… and you can try out building CCXML apps for free in our hosted cloud or by downloading a free copy of Voxeo Prophecy for Windows, Linux or Mac OS X.

We’re looking forward to seeing what you will build with CCXML… and as always, our support teams are standing by to help you in any way they can.


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Use Phono with a CCXML App to Call A Phone Number From Your Web Browser

Thursday, October 28th, 2010

Phono - call usIf you look over at the top of the first sidebar of this blog, you’ll now see a “Call Us!” heading, some text and then a “Call” button. If you press that button, very soon you’ll be connected to our Voxeo Sales Team down in our Orlando office … simply using the microphone and speakers on your computer!

This is the magic of Phono!

As I showed in the previous post and video, using Phono with an application running in Voxeo’s Prophecy Hosting environment is as simple as finding the “application id” on the “Contact Methods” tab of your app… and then inserting the appropriate JavaScript into a web page to create a Phono object.

Now.. what if you want to have a button on your website that simply connects the caller to a phone number?

Connecting to a Phone Number – The Simple Way

The previous example showed how to connect it to an application of some type… but what about a phone number? You can simply use the Phono sample apps on phono.com. In fact, if you take the JavaScript code from the last post and just change this:

                  this.phone.dial("app:9991476142");

by replacing “app:….” with a phone number:

                  this.phone.dial("4074181800");

that simple button will call out to that phone number using the default Phono configuration.

This works great – but calls via the sample app are limited to a max of 10 minutes and there is also an introductory and final audio message. What if you want to make it so someone can connect and talk for any amount of time?

To do that, you need to create an application on one of our platforms (Prophecy Hosting (Evolution) or Tropo) that will transfer a call to the target phone number.

Connecting to a Phone Number – The CCXML Way

For this app to transfer a call, I chose to use the W3C industry standard Call Control XML (CCXML) running in Prophecy Hosting. The app does three things:

  1. Accepts an incoming call (which will be coming in from Phono)
  2. Makes an outbound call to a phone number (in this case Voxeo Sales)
  3. Joins the two calls together in a conference.

Now, for this to work for you, you need to:

  1. Have an account on our Evolution developer portal. If you don’t already have one, you can create an account for free.
  2. Have “outbound dialing privileges” enabled for your account. Because of potential malicious use, we don’t enable outbound dialing by default – but we freely give it out if you contact our support team, either by raising a support ticket inside your Evolution account or by simply emailing support@voxeo.com.

Once both of those are true, you can get started. Inside your Evolution account, you’ll first need to go into the “Files, Logs & Reports” area and create a new file under “www” that contains this CCXML – (replacing the phone number with YOUR target phone number):

NOTE: if you move your mouse to the upper right corner of this code listing there is an icon to copy the code to your clipboard. Also note that this code is blatantly copied from the “join” documentation page


<?xml version="1.0" encoding="UTF-8"?> 
<ccxml xmlns="http://www.w3.org/2002/09/ccxml" version="1.0"> 
  <var name="inboundID"/> 
  <var name="outboundID"/> 
  <var name="initState" expr="'state1'" /> 

  <eventprocessor statevariable="initState"> 
    <transition state="state1" event="connection.alerting"> 
      <log expr="'*** INBOUND CONNECTION ALERTING ***'"/> 
      <assign name="inboundID" expr="event$.connectionid" /> 
      <accept connectionid="inboundID" /> 
      <assign name="initState" expr="'state2'"/> 
    </transition> 

    <transition state="state2" event="connection.connected"> 
      <assign name="initState" expr="'state3'"/> 
      <log expr="'*** CONNECTION.CONNECTED: INBOUND ***'"/> 
      <!-- 4079651112 is Voxeo Sales line -->
      <createcall dest="'tel:4079651112'" callerid="'1112223333'" connectionid="outboundID" timeout="'30s'"/> 
    </transition> 

    <transition state="state3" event="connection.progressing"> 
      <log expr="'*** CONNECTION.PROGRESSING ***'"/>  
      <assign name="initState" expr="'state4'"/> 
    </transition> 

    <transition state="state4" event="connection.connected"> 
      <assign name="initState" expr="'state5'"/> 
      <log expr="'*** CONNECTION.CONNECTED: INBOUND ***'"/>  
      <join id1="inboundID" id2="outboundID" duplex="'full'"/> 
    </transition> 

    <transition state="state5" event="conference.joined"> 
      <log expr="'*** CONFERENCE JOINED: INBOUND LEG TO OUTBOUND LEG ***'"/>  
    </transition> 

    <transition event="connection.disconnected"> 
      <log expr="'*** CONNECTION.DISCONNECTED ***'"/>  
      <exit/> 
    </transition> 
  </eventprocessor> 
</ccxml>

After you’ve saved that file, you’ll go over into your Application Manager, create a new “Prophecy 9 – CCXML” application and map that application to your newly created file.

You can then look on the “Contact Methods” tab to find the application ID (“app:numbers“) that you can use with Phono. You can also add a phone number and call the application directly (or use Skype or SIP) to test that the application rings through to your target phone number.

Embedding Phono On A Web Page

Once you have the application running and it calls through correctly, you just need to create a Phono object on your web page. You could use that really basic example I gave in the last post – or much better – check out the examples on Phono.com.

Or… you could use one of the tools that are already emerging to integrate Phono with websites. In my particular case I’m using a very cool WordPress plugin that I’ll be writing about very soon!

However you embed the Phono code, you just need to supply the application ID of your CCXML app and you can start connecting your visitors to your phone number right away!


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


New Prophecy 10 Release Candidate 1 now available for download (10.0.42798 RC1)

Tuesday, June 8th, 2010

For those of you who want to live on the bleeding edge of Voxeo software – or want to see what’s coming in the next release of Prophecy – the first “release candidate”, RC1, of Prophecy 10 is now available for download at www.voxeo.com/prophecy.  Prophecy 10.0.42798 RC1 is a major milestone as P10 moves closer to release. New functionality in this release includes:

  • 64-bit Linux support.
  • Support for the Speex codec.
  • Support for G.729b (silence suppression).
  • CCXML applications can now send and receive SIP INFO messages.
  • Ability to access SIP headers directly in VoiceXML. Previously you could only access SIP headers from CCXML. Now, in VoiceXML SIP headers are available in ‘session.connection.protocol.sip.<header-name>’ (Note that ‘.’ and ‘-’ in the header name are converted to ‘_’).
  • Ability to independently backup and restore the Prophecy 10 provisioning database.
  • Over 600 fixes and performance improvements.

Note: This Prophecy 10 RC1 release is still part of our Early Access release program and should be used at your own risk. Prophecy 9 is also available for those wanting a stable production release.

The new version of Prophecy 10 can be downloaded for free for Windows, Mac OSX or Linux at http://www.voxeo.com/prophecy/ More information about Prophecy 10 in general can be found in the release notes.


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


How to call your VoiceXML, CCXML or CallXML app directly from Skype

Monday, November 23rd, 2009

When I wrote last week about how you could call a Tropo.com app directly from Skype, it naturally begged the question – can you also call a VoiceXML, CCXML, or CallXML app via Skype?

The answer is… of course!

We have had this feature in our platform for years, as I discussed in a post back in March 2008 called “Skype-ifying your voice applications“. Skype numbers (and SIP addresses and iNum numbers) are automagically assigned to your application when your create it. Once you login to our Evolution developer portal, simply click on “Application Manager” and then the name of one of your applications.

You’ll then see the “Applications Settings” information and by simply clicking on the “Contact Methods” tab you will see all the contact numbers available to you:

vxmlwithskype.jpg

You also have the ability to add more numbers if you want additional direct numbers (DIDs) associated with your app.

As I mentioned in the Tropo blog post, you can copy/paste that Skype number into Skype and call away… with or without the space in the number. You can try it out by calling:

+990009369991439407

Now, that is just a “Hello, world” type of app that is not nearly as exciting as the Yahoo!Weather app referenced in the Tropo blog post, but you get the idea.

That’s it! Create an app… call it from Skype. Nice and simple.

If you’d like to try it out, you can just head over to Evolution and sign up for free developer account if you don’t already have one. (And yes, we give you free direct DIDs, free Skype access, free SIP access, etc., etc.)


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Make your existing VoiceXML (and CCXML and CallXML) apps multi-channel: add SMS and IM today…

Tuesday, August 25th, 2009

With our announcement of Prophecy 10 today, you can now add SMS and instant messaging (IM) to any existing VoiceXML, CallXML or CCXML application. When you login to our Evolution developer portal (and you can sign up for a free account if you don’t have one) and go into the settings for one of your applications through the Application Manager, you will now see that you can choose to make an application a voice application, a text-messaging application, or both:

voicexmlsmsim.jpg

Once you have added text messaging capability to your application, you can switch to the Contact Methods tab where you can add an SMS-enabled phone number and/or attach IM IDs to the application:

evoconfigsmsim.jpg

Now you have one application accessible via multiple channels. We’ll write more in the next bit about how to tweak your apps to work with multiple channels… but for those who want to login right now and get started, go right ahead!

P.S. Note you can also do this with Tropo.com applications as well


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Developer Jam Session, June 24: Integrating advanced call control in VoiceObjects applications using CCXML

Thursday, June 11th, 2009

jam_session_275.jpgWant to know how to build an outbound dialing app with VoiceObjects? Would you like to learn how to add call control capabilities to applications you build with VoiceObjects?

If so, please join us for our next Developer Jam Session on:

Wednesday, June 24, 2009
8am US Pacific, 11am Eastern, 5pm Central European Time

In this webinar, Tobias Göbel will discuss implementing call control in VoiceObjects applications. The abstract is:

VoiceXML has rather limited capabilities in the area of call control, basically restricting the scope to blind or bridged tranfers. This Jam session will introduce CCXML and explain how it can interact with VoiceObjects applications to build advanced voice services including both call control and voice automation. Examples include outbound dialing, two-party bridging, call whisper, and multi-party conferences. Demo code will be provided so that participants can test the applications themselves using the free downloads of Voxeo´s Prophecy platform and VoiceObjects phone application server.

sign-up-now.gif

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook or following us on Twitter.


Technorati Tags: , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Leveraging a CCXML Wrapper for Post-call Cleanup

Wednesday, December 17th, 2008

The default CCXML wrapper that quietly powers many VoiceXML applications on Voxeo’s Prophecy platform is certainly sufficient for many simple applications. So why should I bother diving into yet another markup language to do re-invent the wheel? Because your application isn’t that simple and you’re a control freak. Or maybe I am. Who knows.

Typically, we can handle post-call cleanup in VoiceXML easily enough by using the <submit> or <data> elements to our server-side cleanup scripts.

  <catch event="connection.disconnect">
     <submit next="cleanup.php" method="POST"/>
  </catch>

While this is a valid way to handle this, VoiceXML requires that we either transfer control to another document(<submit>) or respond with valid XML(<data>). Instead, we can leverage the disconnect event and any other portion of the application that we’d like the call to end to send this data back to our CCXML handler and let it do all the work asynchronously. The bonus here is we can have unfettered control of our voice applications. Once we have this in place, it’s simple work to leverage CCXML to control call duration, pre/post-processing and more.

When using a custom CCXML wrapper to handle post-call cleanup, our VoiceXML disconnect handler will look something like this:

  <catch event="connection.disconnect">
     <exit namelist="my_var1 my_var2 my_var3"/>
  </catch>

Here we’re using the namelist attribute of <exit> to send back our values back to CCXML. We can now handle this inside our CCXML wrapper with a dialog.exit transition:

  <transition event="dialog.exit">
    <log expr="'**** DIALOG COMPLETE - SENDING POST CALL CLEANUP'"/>
    <assign name="dialog_active" expr="false"/>
      <log expr="'my_var1 = ' + event$.values.my_var1"/>
      <log expr="'my_var2 = ' + event$.values.my_var2"/>
      <log expr="'my_var3 = ' + event$.values.my_var3"/>
      <assign name="my_var" expr="event$.values.my_var1"/>
      <!-- sends a POST to our cleanup script -->
    <disconnect connectionid="conn_id"/>
      <send name="'user.call.cleanup'" target="'cleanup.php'" targettype="'basichttp'" namelist="my_var1"/>
  </transition>

The values of our VXML variables are stored in the object event$.values. We can then grab them from the event$.values object by referencing them as event$.values.variablename – in this case, event$.values.my_var1. Since our VoiceXML dialog is complete, we’re ready to end the call. We issue a disconnect to the caller’s connectionid and send our post call cleanup. CCXML’s <disconnect>, unlike VoiceXML’s, physically disconnects the call leg. So now the call leg is ended, we’re free to handle our post-processing without paying to keep that call leg up. Brilliant!

Now that we’ve shot off our post-processing request, we can handle the send.successful event and close the session out, right? Well, we could do that, but how do we know the request was received successfully? Note, this next portion is a Voxeo specific extension and is not part of the W3C spec and requires the Voxeo namespace - <ccxml version=”1.0″ xmlns:voxeo=”http://community.voxeo.com/xmlns/ccxml”>.

Instead of assuming everything went swimmingly with our post-processing, we can be sure by having our server-side send back an event to the CCXML browser if we format the body of the response like this:

  user.cleanup.successful
  my_var1=foo
  my_var2=bar

Note that we can inject not only an event here, but name/value pairs, though they are entirely optional. Now that my server side has responded, with an event, I’ll need to handle this in my CCXML:

  <transition event="user.cleanup.successful">
    <log expr="'**** POST CALL CLEANUP COMPLETED SUCCESSFULLY'"/>
    <log expr="'**** EXITING SESSION'"/>
     <exit/>
  </transition>

Last, but very definitely not least, we will want to ensure our session does not stay alive after the call leg has disconnected. Since we are doing a little post-processing, we don’t want to end the session immediately, as we’ll want to give that time to process. So, we’ll simply shoot off a delayed user event to kill the session 60 seconds after a disconnect and prevent the zombie apocalypse.

  <transition event="connection.disconnected">
     <!-- send to unconditionally end a runaway session -->
     <send name="'user.kill.unconditional'" target="session.id" delay="'60s'"/>
  </transition>

  <transition event="user.kill.unconditional">
     <log expr="'**** UNCONDITIONAL KILL - EXITING SESSION'"/>
       <exit/>
  </transition>

That’s it. Find the complete CCXML below.

<?xml version="1.0"?>
<ccxml version="1.0" xmlns:voxeo="http://community.voxeo.com/xmlns/ccxml">

      <meta name="author" content="Dustin Hayre"/>
      <meta name="maintainer" content="YOUR_EMAIL@HERE.COM"/>

<!-- how long to wait before assuming a session is a runaway and tearing it down -->
<var name="conn_id"/>
<var name="dialog_id"/>
<var name="my_var"/>

<eventprocessor>
  <transition event="connection.alerting">
    <assign name="conn_id" expr="event$.connectionid"/>
    <accept connectionid="conn_id"/>
  </transition>

  <transition event="connection.connected">
    <log expr="'**** STARTING DIALOG TO CONNECTION ID ' + conn_id"/>
     <!-- edit SRC attribute to point to VXML dialog -->
     <dialogstart src="'dialog.vxml'" connectionid="conn_id" dialogid="dialog_id"/>
  </transition>

  <transition event="dialog.exit">
    <log expr="'**** DIALOG COMPLETE - SENDING POST CALL CLEANUP'"/>
      <log expr="'event$.values.my_var1 = ' + event$.values.my_var1"/>
      <assign name="my_var" expr="event$.values.my_var1"/>
      <!-- sends a POST to our cleanup script -->
      <send name="'user.call.cleanup'" target="'cleanup.php'" targettype="'basichttp'" namelist="foo"/>
  </transition>

  <transition event="user.cleanup.successful">
    <log expr="'**** POST CALL CLEANUP COMPLETED SUCCESSFULLY'"/>
    <log expr="'**** EXITING SESSION'"/>
     <exit/>
  </transition>

  <transition event="error.*">
    <log expr="'**** ERROR - REASON: ' + event$.reason"/>
      <exit/>
  </transition>

  <transition event="connection.disconnected">
     <!-- send to unconditionally end a runaway session -->
     <send name="'user.kill.unconditional'" target="session.id" delay="'60s'"/>
  </transition>

  <transition event="user.kill.unconditional">
     <log expr="'**** UNCONDITIONAL KILL - EXITING SESSION'"/>
       <exit/>
  </transition>

  <transition event="connection.failed">
    <log expr="'**** CONNECTION FAILED - REASON: ' + event$.reason"/>
      <exit/>
  </transition>

</eventprocessor>
</ccxml>

Feel free to comment with any questions or suggestions.

-Dustin


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Moshe Yudkowsky updates his CCXML video tutorials…

Monday, September 8th, 2008

Back in April, I wrote about some video tutorials about CCXML that Moshe Yudkowsky had made available. While the videos worked okay, Moshe has gone and re-encoded the videos and made them available in both Flash Video and AVI formats. You can now get them at:

Each video runs between 1 to 1.5 hours and are part of a half-day tutorial session that Moshe gave a year ago at SpeechTEK 2007.

Technorati Tags: , , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


New tutorial on passing variables between CCXML and VoiceXML

Monday, August 11th, 2008

Ever wanted to pass variables between a CCXML and VoiceXML app and weren’t sure how? Well, now you can learn in a recently posted tutorial from Voxeo staff member Jeff Menkel: Passing variables to and from VoiceXML and CCXML. This tutorial builds on the previous piece about passing variables to CCXML applications as well as other pieces of the CCXML documentation. It’s well worth a read and shows how easy it is to use CCXML and VoiceXML together.

Technorati Tags: , , , , , ,


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.


Never forget to make a call with scheduled conferencing

Thursday, July 10th, 2008

We all forget to make important calls from time-to-time. With this tutorial, you will be able to schedule a call ahead of time, so that Voxeo’s IVR system calls you at that time in the future, and then links you with the party you intended to call.

While you’re utilizing your free Voxeo developer account, you might as well keep the whole shabang free, right? Head on over to x10hosting.com or forwardhosting.com, and register for an account. These are two of the very few hosting companies that will allow you to run cron jobs for free. Now that you are all setup, let’s get into the design aspect, cron job first.

While cron web interfaces will certainly be different, the underlying principal is the same: cron will wait until the system time matches your job time, and then will execute an action. Most web portals to cron jobs will allow you specify minute, hour, day, month, and weekday.

Let’s assume you have to call your wife every Friday night at 5 pm to let her know that you’re coming straight home from work. We’ll set minute to “00″, the hour to “17″, the weekday to “4″, and the rest to “*”. This will make the cron job execute on Fridays at 1700. You may need to adjust the time on your cron job to account for differences between system time and your time. For example, the x10hosting box on which my cron job runs is set to US central time. For the cron job command, use the Unix command “curl” like so:

curl http://api.voxeo.net/SessionControl/CCXML10.start?tokenid=dd5a1d7f44e97f49856eb6e894c9c669d152e89a571f6201eb3b265045b7a1d2bb52ff8d9856fbbbbbbbbbba\&numdial=5551231234

This command sends an http request to api.voxeo.net for our CCXML 1.0 token. The request also contains the variable “numdial.”

( Please note that the backslash is used in cron to escape the ampersand. This request will not work properly from a browser window )

Cron job interface

Now for the XML part:

<?xml version="1.0" encoding="UTF-8"?>
<ccxml version="1.0" xmlns:voxeo="http://community.voxeo.com/xmlns/ccxml">

<var name="state0" expr="'init'"/>
<var name="callid_out1"/>
<var name="callid_out2"/>
<var name="pin"/>
<var name="holdMusicDlg"/>

<eventprocessor statevariable="state0">

  <transition state="init" event="ccxml.loaded">
    <createcall dest="'tel:+15555555555'" connectionid="callid_out1" callerid="'1112223333'" timeout="'30s'"/>
  </transition>

  <transition state="init" event="connection.connected">
    <assign name="callid_out1" expr="event$.connectionid"/>
    <assign name="state0" expr="'enterpin'"/>
    <dialogstart src="'null://?termdigits=#&text=Press 1 and then pound if you want to dial' + session.values.numdial"&
    type="'application/x-fetchdigits'"/>
  </transition>

  <transition state="enterpin" event="dialog.exit">
    <log expr="'PIN = [' + event$.values.digits + ']'"/>
    <if cond="'1' != event$.values.digits">
      <exit/>
    <else/>
      <assign name="pin" expr="event$.values.digits"/>
    </if>

    <assign name="state0" expr="'calling'"/>
    <dialogstart src="'holdingPattern.vxml'" type="'application/xml+vxml'" namelist="pin" dialogid="holdMusicDlg"/>
    <createcall dest="'tel:+1' + session.values.numdial" connectionid="callid_out2" callerid="'5555555555'"/>

  </transition>

  <transition state="calling" event="connection.failed">
    <assign name="state0" expr="'callfailed'"/>
    <dialogterminate dialogid="holdMusicDlg"/>
  </transition>

  <transition state="callfailed" event="dialog.exit">
    <assign name="state0" expr="'playingCallFailed'"/>
    <dialogstart src="'callFailure.vxml'" type="'application/xml+vxml'" connectionid="callid_out1"/>
  </transition>

  <transition state="playingCallFailed" event="dialog.exit">
    <disconnect/>
  </transition>

  <transition state="calling" event="connection.connected">
    <if cond="event$.connectionid == callid_out1">
      <exit/>
    <else/>
      <assign name="state0" expr="'beforeBridging'"/>
      <dialogterminate dialogid="holdMusicDlg"/>
    </if>
  </transition>

  <transition state="beforeBridging" event="dialog.exit">
    <send name="'pause'" target="session.id" delay="'200ms'"/>
  </transition>

  <transition state="beforeBridging" event="pause">
    <assign name="state0" expr="'bridged'"/>
    <join id1="callid_out1" id2="callid_out2"/>
  </transition>

  <transition event="error.conference.join">
    <log expr="'*** ERROR DURING JOIN ***'"/>
    <exit/>
  </transition>

  <transition event="error.*">
    <log expr="'an error has occured (' + event$.reason + ')'"/>

    <voxeo:sendemail to="'yourEmail@there.com'"
      from="'myApp@here.com'"
      type="'debug'"
      body=" 'generic error detected ! ' "/>
    <exit/>
  </transition>
</eventprocessor>
</ccxml>

This application has a fairly simple flow. It calls 1-555-555-5555, and then asks the callee to press 1 and then # to connect to whatever number was passed in via the http request (in this case numdial=5551231234).

That’s it. To make this work for you, you need to change four values:

1. token ID in http request 2. numdial variable in http request 3. “5555555555″ is found twice in the CCXML file – both instances should be changed to your number 4. sendemail “to” and “from” in CCXML file

Good luck with your development – mix in a little MySQL and PHP action to make adding more cron jobs easier.

Till next time,

Jeremy McCall Voxeo Network Operations


Want to learn how Voxeo can help unlock your communications and deliver a better customer experience? Please contact us!

If you found this post interesting or helpful, please consider either subscribing via RSS, becoming a fan on Facebook, or following us on Twitter.