⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 magicvoicemail.agi.pl

📁 asterisk系统源代码 程序截获SIGHUP信号来保证语音处理部分正常结束。 正常结束,产生MVMSTATUS变量 Main模式: 程序截获SIGHUP信号来保证语音处理部分正常结束。
💻 PL
📖 第 1 页 / 共 2 页
字号:
#!/opt/perl/bin/perl#-----------------------------------------------------------------------------------#			MagicVoicemail## Copyright by hoowa.sun <hoowa.sun@gmail.com># Dalian Baihe Mulitmedia Co.,Ltd.## This Program public under miniAsterisk.org Projects.## This program distributed under the terms of the GNU General Public License(GPL).# See the LICENSE file at the top of the source tree.## 1.0 by hoowa.sun 2007-3-9#------------------------------------------------------------------------------------# Record#exten => number,1,AGI(MagicVoiceMail|record|[Voicemail_number]|u/b)# Main#exten => number,1,AGI(MagicVoiceMail|main|[Voicemail_number])#use FindBin qw($Bin);use Asterisk::AGI;use Asterisk::config;use MIME::Base64 qw(encode_base64);use Digest::MD5 qw(md5_hex);use strict;$|=1;# VERSIONmy $VERSION='1.0';if ($ARGV[0] eq '--version') {	print "$VERSION\n";exit;}my $CONF = "$Bin/../../../etc/magicvoicemail.conf";# START AGImy $AGI = new Asterisk::AGI;my %input = $AGI->ReadParse();# Asterisk::configmy ($rc,$magicvoicemail_conf);$rc = new Asterisk::config;&done('400') if (!eval{($magicvoicemail_conf) = $rc->load_config(filename=>$CONF)});&done('401') if (!-d$magicvoicemail_conf->{'general'}{'greetfolder'}[0]);&done('401') if (!-d$magicvoicemail_conf->{'general'}{'vmfolder'}[0]);# GLOBALS FOR MEmy ($args,$do_record,$startime,@seek_files);$SIG{HUP} = sub {&exitprog()};# Default language$input{'language'} = 'en' if (!exists($magicvoicemail_conf->{$input{'language'}}));# START CHECKif ($ARGV[0] eq 'main') {&main_progress;}else {&record_progress;}exit(0);###############################################################################################################	Function with main mode#$AGI->record_file(文件名,'WAV',结束按键,超时(百分秒),'0',1,寂静时间(秒));##############################################################################################################sub main_progress{my ($max_jump,$action,$act_args);$max_jump=1;$AGI->answer();	#流程循环系统	while ($max_jump <= 30) {		$max_jump++;		#---------------------------------------------------个人设置 1.0		#ARGS:	VMID		if ($action eq '1.0') {		my	($sel,$myargs);			undef($action);	$myargs = $act_args;	undef($act_args);			$sel = &playback('vm-options', '#',undef,10000, 1);			#------------------------------------选择录u b n			if ($sel eq '1' || $sel eq '2' || $sel eq '3') {			my	($filename);				#分析filename				if ($sel eq '1') {		&playback('vm-rec-unv');$filename='unavail';}				elsif ($sel eq '2') {	&playback('vm-rec-busy');$filename='busy';}				elsif ($sel eq '3') {	&playback('vm-rec-name');$filename='greet';}				else {last;}				#录音				&vm_uo_record($myargs->{'vmid'},$filename);				#返回1.0				sleep(1);				$action='1.0';				$act_args->{'vmid'}=$myargs->{'vmid'};				next;			#------------------------------------选择录t			} elsif ($sel eq '4') {			my	$temp = &playback('vm-tempgreeting2','#',undef, 10000, 1);				if ($temp eq '1') {					&playback('vm-rec-temp');					&vm_uo_record($myargs->{'vmid'},'temp');				} else {					unlink($magicvoicemail_conf->{'general'}{'greetfolder'}[0].'/'.$myargs->{'vmid'}."/temp.WAV");					&playback('vm-tempremoved');				}				#返回1.0				sleep(1);				$action='1.0';				$act_args->{'vmid'}=$myargs->{'vmid'};				next;			#------------------------------------选择改密码			} elsif ($sel eq '5') {			my	($newpass,$repass,$itsok);				while (!$itsok) {					$newpass = &playback('vm-newpassword','#',undef, 10000, 12);					$repass = &playback('vm-reenterpassword','#',undef, 10000, 12);					#密码不对					if ($newpass ne $repass || $newpass eq '') {&playback('vm-mismatch');next;}					else {$itsok=1;}				}				#修改密码			my	$value = $magicvoicemail_conf->{'users'}{$myargs->{'vmid'}}[0];				$value =~ s/^(.+?)\,//;				$value = "$newpass,$value";				$rc->clean_assign();				$rc->assign_editkey(section=>'users',key=>$myargs->{'vmid'},new_value=>$value);				$rc->save_file(filename=>$CONF);				#修改完成返回1.0				&playback('vm-passchanged');				sleep(1);				$action='1.0';				$act_args->{'vmid'}=$myargs->{'vmid'};				next;			#------------------------------------选择返回主菜单			} elsif ($sel eq '*') {				sleep(1);				$action='1.B';				$act_args->{'vmid'}=$myargs->{'vmid'};				next;			#------------------------------------再执行一次本程序			} else {				sleep(1);				$action='1.0';				$act_args->{'vmid'}=$myargs->{'vmid'};				next;			}		#---------------------------------------------------阅读留言 1.1		#ARGS:	vmid folder [filename]		} elsif ($action eq '1.1') {		my	($sel,$myargs);			undef($action);	$myargs = $act_args;	undef($act_args);			#记录状态进入读消息状态			undef($do_record);	undef($args);			$do_record=6;	$args->{'vmid'}=$myargs->{'vmid'};						#获得文件			$myargs->{'folder'}='new' if ($myargs->{'folder'} eq '');			undef(@seek_files);			&seekfile($magicvoicemail_conf->{'general'}{'vmfolder'}[0]."/".$myargs->{'vmid'}."/".					$myargs->{'folder'}."/");			@seek_files = sort {$a cmp $b} @seek_files;			next if ($#seek_files < 0);			#语音处理			my	($filename,$info,$calleridnum,$nextdo,$i);			#找出filename			for ($i=0;$i<=$#seek_files ;$i++) {				next if ($myargs->{'filename'} ne '' && $seek_files[$i] ne $myargs->{'filename'});				$filename = $seek_files[$i];				last;			}			#解码&播放			$filename =~ s/\.WAV//;			($info) = $rc->load_config(filename=>$filename.'.txt');			$calleridnum = $info->{'message'}{'callerid'}[0];			$calleridnum=~/\<(.+?)\>/;	$calleridnum=$1;			if ($i == 0) {&playback('vm-first',undef,{CALLERIDNUM=>$calleridnum});}			elsif ($i == $#seek_files) {	&playback('vm-last',undef,{CALLERIDNUM=>$calleridnum});	}			else {	&playback('vm-numbermsg',undef,{CALLERIDNUM=>$calleridnum,NUMBER=>($i+1)});	}			$AGI->stream_file($filename);			#选择			while (1) {				$sel = &playback('vm-playbackopts','#',undef,10000,1);				if ($sel eq '' || $sel eq '#') {	$nextdo='#';last;	}#退出				elsif ($sel eq '*') {	next;}#重复				elsif ($sel eq '4') {	$nextdo='4';last;	}#退出				elsif ($sel eq '5') {	$nextdo='5';last;	}#退出				elsif ($sel eq '6') {	$nextdo='6';last;	}#退出				elsif ($sel eq '7') {	$nextdo='7';last;	}#退出			}			if ($nextdo eq '4' || $nextdo eq '5' || $nextdo eq '6' || $nextdo eq '7') {				#选择4播放上一条:如果当前是第一条				if ($nextdo eq '4' && $i == 0) {					$act_args->{'folder'}=$myargs->{'folder'};	$act_args->{'filename'}=$seek_files[$i];				#选择4播放上一条:				} elsif ($nextdo eq '4') {					$act_args->{'folder'}=$myargs->{'folder'};	$act_args->{'filename'}=$seek_files[$i-1];				#选择5重复播放				} elsif ($nextdo eq '5') {					$act_args->{'folder'}=$myargs->{'folder'};	$act_args->{'filename'}=$seek_files[$i];				#选择6播放下一条				} elsif ($nextdo eq '6' && $i < $#seek_files) {					$act_args->{'folder'}=$myargs->{'folder'};	$act_args->{'filename'}=$seek_files[$i+1];				#选择6播放下一条:如果当前既是最后一条				} elsif ($nextdo eq '6') {					&playback('vm-nomore');		&main_readend($myargs->{'vmid'});				#选择7删除消息				} elsif ($nextdo eq '7' && $i < $#seek_files) {					unlink("$filename.txt");	unlink("$filename.WAV");		&playback('vm-deleted');					$act_args->{'folder'}=$myargs->{'folder'};		$act_args->{'filename'}=$seek_files[$i+1];				#选择7删除消息:如果当前是最后一条				} elsif ($nextdo eq '7') {					unlink("$filename.txt");	unlink("$filename.WAV");		&playback('vm-deleted');					sleep(1);					&playback('vm-nomore');		&main_readend($myargs->{'vmid'});				}				$action='1.1';	$act_args->{'vmid'}=$myargs->{'vmid'};			#选择#的时候			} else {				&main_readend($myargs->{'vmid'});			}			next;		#---------------------------------------------------阅读留言 1.2		#ARGS:	vmid		} elsif ($action eq '1.2') {		my	($sel,$myargs);			undef($action);	$myargs = $act_args;	undef($act_args);			$sel = &playback('vm-changeto','#',{NEW=>'0',OLD=>'1'},10000,1);			if ($sel eq '0') {				$action='1.1';	$act_args->{'vmid'}=$myargs->{'vmid'};	$act_args->{'folder'}='new';next;			} elsif ($sel eq '1') {				$action='1.1';	$act_args->{'vmid'}=$myargs->{'vmid'};	$act_args->{'folder'}='old';next;			} elsif ($sel eq '') {				$action='1.2';	$act_args->{'vmid'}=$myargs->{'vmid'};	next;			} else {				$action='1.B';	$act_args->{'vmid'}=$myargs->{'vmid'};	next;			}		#---------------------------------------------------主菜单系统 1.B		#ARGS:	VMID		} elsif ($action eq '1.B') {		my	($sel,$myargs);			undef($action);	$myargs = $act_args;	undef($act_args);			#选择			$sel = &playback('vm-opts','#',undef,10000,1);			if ($sel eq '0') {				$action='1.0';	$act_args->{'vmid'}=$myargs->{'vmid'};	next;			} elsif ($sel eq '1') {				$action='1.1';	$act_args->{'vmid'}=$myargs->{'vmid'};	$act_args->{'folder'}='new';next;			} elsif ($sel eq '2') {				$action='1.2';	$act_args->{'vmid'}=$myargs->{'vmid'};	next;			} elsif ($sel eq '3') {			} elsif ($sel eq '' ||$sel eq '#' ) {				last;			} else {				$action='1.B';	$act_args->{'vmid'}=$myargs->{'vmid'};	next;			}		#---------------------------------------------------登陆系统 1.A		#ARGS:		} else {		my	($vmid,$vmpass,$vmdata);			undef($action);		undef($act_args);			sleep(1);			#用户填写VMID			if (!exists($magicvoicemail_conf->{'users'}{$ARGV[1]})) {				$vmid = &playback('vm-login', '#',undef,10000, 12);			} else {				$vmid = $ARGV[1];			}			#检测是否填写VMID			&done('406') if ($vmid eq '');			#检测用户是否存在			next if (!exists($magicvoicemail_conf->{'users'}{$vmid}));			#解码数据			$vmdata = &get_vmdata($vmid);			if ($vmdata->{'password'} ne '') {				#用户填写VMPASS				$vmpass = &playback('vm-password','#',undef,10000, 12);				#检测密码是否正确				if ($vmdata->{'password'} ne $vmpass) {	&playback('vm-incorrect');	next;	}			}			#进入后			undef(@seek_files);			&seekfile($magicvoicemail_conf->{'general'}{'vmfolder'}[0]."/$vmid/new/");			if ($#seek_files < 0) {	&playback('vm-youhaveno');		}			else {	&playback('vm-youhave',undef,{NEWCOUNT=>($#seek_files+1)});	}			$action='1.B';	$act_args->{'vmid'}=$vmid;	next;		}	}&done('201');}###########################################################	User read endsub main_readend{my	$vmid = shift;	undef(@seek_files);	&seekfile($magicvoicemail_conf->{'general'}{'vmfolder'}[0]."/$vmid/new/");	foreach  (@seek_files) {	my	$filename = $_;		$filename =~ s/\.WAV//;		system("mv -f $filename.WAV ".$magicvoicemail_conf->{'general'}{'vmfolder'}[0]."/$vmid/old/");		system("mv -f $filename.txt ".$magicvoicemail_conf->{'general'}{'vmfolder'}[0]."/$vmid/old/");	}return();}###########################################################	User Opts Record sub vm_uo_record{my	$vmid = shift;my	$filename = shift;my	($vmdata,$timeout,$acdo);		$vmdata = &get_vmdata($vmid);	#用户数据解码	if (exists($vmdata->{'maxgreet'})) {	$timeout=$vmdata->{'maxgreet'}*1000;	}	else {		$timeout=30000;	}	#建立用户greet目录	umask($magicvoicemail_conf->{'general'}{'dirmask'}[0]);	if (!-d$magicvoicemail_conf->{'general'}{'greetfolder'}[0].'/'.$vmid) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -