Asterisk IVR Trixbox

From XAP Automation
Jump to: navigation, search

This version is for older Asterisk implementation and uses the Flite TTS system.

// the xapcmd handles the cmd request by setting a special variable
// that axc looks for and then looks for axc's response
macro xapcmd(cmd, curexten) {
   set(xapresponse="");
   set(maxcount=5);
   if ("${curexten}" != "") {
      set(last_exten=${curexten});
   };
   NoOp(xapsend:${cmd});
START:
   Wait(1);
   if ("${xapresponse}" != "") {
      Flite(${xapresponse});
      set(xapresponse="");
      return;
   } else {
      set(maxcount=${maxount}-1);
      if ("${maxcount}" != "0") {
         goto START;
      } else {
         return;
      };
   };
};
// house-attendant is a possible entry point for home automation
// If you specify your initial contexts within extensions.conf
// then add something like the following to your default or
// corresponding context to associate the attendant w/ dialing
// the operator:
//
// exten => 0,1,Goto(house-attendant, s, 1)
context house-attendant {
   s => {
      Wait(1);
      Answer();
      TIMEOUT(digit)=7;
      TIMEOUT(response)=10;
      Wait(1);
greeting:
      Flite("welcome to the house attendant");
menu:
      Flite("press 1 for current time");
      Flite("press 2 for local weather");
      Flite("press 3 for the heating status");
// specify a timeout so that the user comes back to the menu if no selection  made
      WaitExten(10);
   };
// each numeric extension is the "handler" for the xap command
   1 => {
      &xapcmd(what time is it,1);
      goto s|menu;
   };
   2 => {
      &xapcmd(what is the weather like,2);
      goto s|menu;
   };
   3 => {
      &xapcmd(what is the status of Heating GO,2);
      goto s|menu;
   };
   * => {
      if ("${last_exten}" != "") {
         goto ${last_exten}|1;
      } else {
         goto s|menu;
      };
   };
   o => goto s|menu;
   # => {
      Playback(goodbye);
      Hangup();
   };
   t => goto s|menu;
   i => {
      Playback(invalid);
      goto s|menu;
   };
};

The changes for the extensions_custom.conf are shown below. These are in the from-internal-custom context. Extension 555 is used here.

exten => 555,1,GoTo(house-attendant,s,1)
exten => 555,2,HangUp

Just before these lines:


; custom-count2four,s,1 can be used as a custom target for
; a Digital Receptionist menu or a Call Group