写一个基于asterisk的满意度功能的代码
时间: 2024-03-17 21:39:43 浏览: 129
以下是一个基于Asterisk的满意度调查功能的示例代码。该代码使用Dialplan和AGI脚本来实现满意度调查,并将结果保存到CSV文件中。您需要将以下代码添加到您的Asterisk配置文件中,并根据需要进行修改。
1. Dialplan
在您的Asterisk配置文件(如extensions.conf)中,添加以下Dialplan代码:
```
[mysurvey]
exten => s,1,Answer()
same => n,Playback(welcome)
same => n,AGI(survey.agi)
same => n,Playback(thankyou)
same => n,Hangup()
```
该Dialplan定义了一个名为“mysurvey”的上下文,当有电话呼入时,会播放欢迎语音,启动AGI脚本进行满意度调查,并在调查结束后播放感谢语音并挂断电话。
2. AGI脚本
在您的Asterisk配置文件(如extensions.conf)所在的目录中,创建名为“survey.agi”的AGI脚本文件,并添加以下代码:
```
#!/usr/bin/perl
use Asterisk::AGI;
use Text::CSV;
my $AGI = new Asterisk::AGI;
my $callerid = $AGI->get_variable('CALLERID(num)');
my $filename = "/var/spool/asterisk/surveys/${callerid}.csv";
my $csv = Text::CSV->new({binary => 1, eol => $/}) or die "Cannot use CSV: " . Text::CSV->error_diag();
my $questions = [
{id => 'q1', text => 'How satisfied are you with our service?'},
{id => 'q2', text => 'How likely are you to recommend us to others?'},
{id => 'q3', text => 'Do you have any suggestions for improvement?'},
];
my $answers = {};
foreach my $question (@$questions) {
my $answer = $AGI->exec('Playback', $question->{text});
$answers->{$question->{id}} = $answer;
}
open(my $fh, '>>', $filename) or die "Cannot open $filename: $!";
$csv->print($fh, [$callerid, $answers->{q1}, $answers->{q2}, $answers->{q3}]) or die "Cannot write to $filename: $!";
close($fh);
```
该AGI脚本定义了一个名为“survey.agi”的AGI脚本,用于执行满意度调查并将结果保存到CSV文件中。该脚本首先获取来电号码,并根据号码生成CSV文件名。
然后,脚本定义了一个问题数组,用于存储要问的问题和问题ID。在调查过程中,脚本会遍历问题数组,并使用AGI命令“Playback”播放每个问题的语音,并等待来电者的回答。回答将存储在一个答案哈希表中。
最后,脚本将来电号码和答案存储到CSV文件中。如果文件不存在,则会创建一个新文件。如果文件已存在,则会在文件末尾添加新行。
3. 配置文件
在您的Asterisk配置文件中,添加以下内容以启用满意度调查功能:
```
[general]
autofallthrough=yes
[surveys]
exten => _X.,1,Goto(mysurvey,s,1)
```
该配置定义了一个名为“surveys”的上下文,用于匹配所有满意度调查呼叫。当有电话呼入时,该配置会将呼叫路由到之前定义的Dialplan“mysurvey”中。
需要注意的是,您需要根据您的Asterisk系统和需要进行适当的修改。例如,您可能需要更改CSV文件的路径和命名方式,或者修改问题数组中的问题。
阅读全文