[Asterisk-Users] re: PHPAGI Swift Escape Digits

Clarke Kawakami ckkawakami at optellabs.com
Fri Jun 10 06:08:20 MST 2005


Michael...

I don't believe that PHPAGI supports this currently. What you are looking 
for is a combination of 2 functions: get_data() and swift().

PHPAGI code is very easy to follow so build your own function to do what you 
want and add it to your copy of PHPAGI.php. Ain't OSS wonderful?

I did the following... (my apologies to PHPAGI and PHP gurus for my 
inelegant code... but it works for me).

----snip----
   /**
    * Use Cepstral Swift to read text and get dtmf
    */
    function swift_get_data($text, $frequency=8000, $voice=NULL, 
$addl_params='', $timeout=NULL, $max_digits=NULL)
    {
      $text = trim($text);
      if($text == '') return true;

      if(!is_null($voice))
        $voice = "-n $voice";
      elseif(isset($this->config['cepstral']['voice']))
        $voice = "-n {$this->config['cepstral']['voice']}";

      if($addl_params != '')
        $addl_params = ",$addl_params";

      // create the wave file
      $fname = $this->config['phpagi']['tempdir'] . DIRECTORY_SEPARATOR;
      $fname .= str_replace('.', '_', 'swift_' . 
$this->request['agi_uniqueid']);
      $p = popen("{$this->config['cepstral']['swift']} -p 
audio/channels=1,audio/sampling-rate=$frequency$addl_params $voice -o 
$fname.wav -f -", 'w');
      fputs($p, $text);
      pclose($p);

      // stream it
      $ret = $this->get_data($fname, $timeout, $max_digits);

      // destroy it
      if(file_exists($fname . '.wav'))
        unlink($fname . '.wav');

      return $ret;
    }

----/snip----

usage:

----snip----

  $result = $agi->swift_get_data('To do thing 1 press 1. 'To do thing 2 
press 2. 'To do thing 3 press 3. ',8000,'David','',2500,1);
  $keys = $result['result'];

  if ($keys == "1") {
   // ***** do thing 1
  } elseif ($keys == "2") {
   // ***** do thing 2
  } elseif ($keys == "3") {
   // ***** do thing 3
  }

----/snip----

Clarke Kawakami
Open Telephony Labs LLC
http://www.optellabs.com

>I am trying to use swift in PHP/AGI.
>
>function swift($text, $escape_digits='', $frequency=8000, $voice=NULL,
>$fnameIn='')
>
>During swift speaking some text I want the caller to be able to press
>1, 2 or 3 to do thing 1, thing 2 or thing 3.
>
>How are these digit defines and then caught?
>
>Thanks,
>Michael




More information about the asterisk-users mailing list