如何使用AGI函数SAY DIGITS并在Perl中读取变量



Perl中的SAY DIGITS函数不会从包含在Perl中执行的命令行的STDOUT结果的变量中读取,但当我为变量分配任何值时,它会起作用。

#!/usr/bin/perl
use strict;
my $Hour = qx(date "+%I"); 
print "SAY DIGITS $Hour ""n";

extensions.conf文件:

exten => 222,1,Answer()
exten => 222,2,AGI(time.sh)
exten => 222,3,Hangup()

代码应该告诉调用者当前时间。就这么简单。

qx(...)(以及backticks和readpipe)的返回值通常会附加一个换行符,您通常希望在下游使用该值之前chomp

my $Hour = qx(date "+%I"); 
chomp($Hour);
print "SAY DIGITS $Hour ""n";

您可能需要在CPAN上使用Lingua::ENG::Numbers模块。

Lingua::ENG::Numbers将数值转换为等效的英文字符串。

以下是如何使用它的示例:

#!/usr/bin/perl
use Lingua::ENG::Numbers;
my $hour       = 0 + qx(date "+%I"); 
my $minute     = 0 + qx(date "+%M");
my $hour_str   = "";
my $minute_str = "";

if(my $o = Lingua::ENG::Numbers->new($hour)) {
    $hour_str = $o->get_string;
};
if(my $o = Lingua::ENG::Numbers->new($minute)) {
    $minute_str = $o->get_string;
};
print "It's $hour_str $minute_str";

您将得到类似It's Seven Seventeen的输出(这是我所在时区的时间)。

如果你需要从中获取音频,你可以通过espeak进行传输,espeak是一种适用于英语和其他语言的语音合成器。

更新:啊,我明白了,所以SAY DIGITS已经在Asterisk中实现了。

相关内容

  • 没有找到相关文章

最新更新