在Asterisk拨号方案中将单词转换为数字

时间:2012-10-10 03:57:37

标签: php perl asterisk agi

我花了最近3周试图让这个工作。我想使用github上提供的googletts.agi脚本从星号进行语音拨号。它有效,但问题是googletts有时会在“话语”变量中返回一个单词而不是数字,如18004633339可能会返回“180046树树树”或“1800 force 6 tree tree 339”等。

https://github.com/zaf/asterisk-googletts https://github.com/zaf/asterisk-speech-recog

以下链接有一个将单词转换为数字的脚本

http://www.karlrixon.co.uk/writing/convert-numbers-to-words-with-php

这是我的拨号方案

exten => 2255,1,Answer()
exten => 2255,n,Wait(1)
;exten => 2255,n,flite("Say the number you wish to call. Then press the pound key.")
exten => 2255,n,Espeak("Say the number you wish to call. Then press the pound key.")
exten => 2255,n(record),agi(speech-recog.agi,en-US)
exten => 2255,n,Noop(= Script returned: ${status} , ${id} , ${confidence},            ${utterance} =)
exten => 2256,6,Set(NUM2CALL=${utterance})

这里需要的代码需要$ {utterance}或NUM2CALL变量并修复它,如果有正确的数字,星号可以拨打

exten => 2255,n,SayDigits("${NUM2CALL2}")
exten => 2255,n,Background(vm-star-cancel)
exten => 2255,n,Background(vm-tocallnum)
exten => 2255,n,Read(PROCEED,beep,1)                                        
exten => 2255,n,GotoIf($["foo${PROCEED}" = "foo1"]?15:16)
exten => 2255,15,Goto(outbound-allroutes,${NUM2CALL2},1)
exten => 2255,16,hangup

我在想如果我可以添加到字典数组中,我最终会有一个非常准确的语音拨号器。我花了4天时间测试tropo ASR,它对于单个数字是非常准确的,但是多位数的准确性很快就会消失。在此先感谢您的任何帮助。我将完成的脚本作为github上的项目发布。我尝试使用TIDIGITS语法和模型使用pocketphinx,但这比使用类似问题的pocketsphinx默认字典更糟糕。

1 个答案:

答案 0 :(得分:1)

使用AGIPHP-AGI你可以调用一个函数,即。 convert_word_to_numberset a Variable, 您可以在执行AGI脚本后在Dialpan中使用它。

在拨号方案

exten => 2256,6,Set(NUM2CALL=${utterance})
exten => 2256,n,AGI(/home/asterisk/agi-bin/words_agi.php);

和AGI脚本:

#!/usr/bin/php -q
<?php
set_time_limit(30);
require_once 'phpagi.php';

// replace this function with yours
function convert_word_to_number($word) {
   $words = array(
     'tree',
     'too',
      // ...
    );
    $numbers = array(3,2)
   // replace words with numbers - example only
   $num = str_replace($words, $numbers, $word);
   return $num;
}

$agi = new AGI();
$word = $agi->get_variable("NUM2CALL"); 
$spokenNumber = convert_word_to_number($word);
$agi->set_variable("NUM2CALL", $spokenNumber);

您只需要实现更准确的convert_word_to_number版本来替换带有数字的单词,将其替换为您的函数。