login
|
register
>Quick Links
Main Page
Asterisk
Open Source VOIP Software
VOIP Service Providers
VOIP Phones
What is VOIP?
VOIP Event Calendar
>Home
Main Page
>Forums
List Forums
Asterisk
FreeSWITCH
GrandStream
Polycom Phones
VOIP Questions and Help
Hardware For Sale
Minutes For Sale or Wanted
Zycoo Tech
>About
About Voip-info.org
Voip-Info.org Mirrors
>VOIP Quote
Search:
3CX Phone System for Windows Download the Free Edition
View
Discussion (0)
History
PERL-SIPCALLOUT-AGI
#!/usr/bin/perl
// SipDialOUT.agi by imran
use Asterisk::AGI;
use lib "/var/lib/asterisk/agi-bin";
use Db;
$AGI = new Asterisk::AGI;
$|=1;
my %input = $AGI->ReadParse();
$Digit =$ARGV
0
;
$CLI =$ARGV
1
;
$Zap="Zap/18-12312";
my %CDR_HASH;
my $gsm_file="";
my $wav_file="";
my $d_path ="/recordings";
$CDR_HASH{CALLERID} =$CLI;
$CDR_HASH{CALLRECORDINGFILE} ='';
MyVerbose("Call is being originated from CLI: $CLI");
if($CLI eq "")
{
MyVerbose("User not recognized on channel bank CLI : $CLI");
exitWithCongestion();
}
if($Digit==9)
{
$DialedNo= $AGI->get_data('dialtone',6000,1);
MyVerbose("\$DialedNo : $DialedNo");
$DialedNo1= $AGI->get_data('silence',5000,3);
MyVerbose("\$DialedNo1 : $DialedNo1");
$TimeOut =5000;
$Digit =3;
if($DialedNo1 =~/
3/gsi)
{
$TimeOut=10000;
$Digit =7;
}
elsif($DialedNo ==1)
{
$TimeOut=8000;
$Digit =5;
}
elsif($DialedNo ==0)
{
$TimeOut=11000;
$Digit =10;
}
$DialedNo2= $AGI->get_data('silence',$TimeOut,$Digit);
MyVerbose("\$DialedNo2 : $DialedNo2");
$DialedNo1.=$DialedNo2;
$DialedNoToValid=$DialedNo . $DialedNo1;
$DialedNo ="" . $DialedNo . $DialedNo1;
MyVerbose("\$DialedNo : $DialedNo");
my $dialstr;
$dialstr = "Zap/g1/" . $DialedNo . "|1000|tTL(" . 30*60 + 0)*1000) .":7000:5000)";
MyVerbose("\$dialstr : $dialstr");
if(!IsInteger($DialedNo
{
exitWithCongestion();
}
NaV
Type=GetDialedNumberType("$DialedNoToValid");
$Authorized=1;
if($Type{localNumber} && !$Rights{IsLocalAllowed})
{
MyVerbose("CLI : $CLI is not authorized to call to Local # $DialedNoToValid");
$Authorized=0;
}
if($Type{Mobile} && !$Rights{IsMobileAllowed})
{
MyVerbose("CLI : $CLI is not authorized to call to Mobile # $DialedNoToValid");
$Authorized=0;
}
if($Type{NationWide} && !$Rights{IsNationWideAllowed})
{
MyVerbose("CLI : $CLI is not authorized to call to NWD # $DialedNoToValid");
$Authorized=0;
}
if($Type{International} && !$Rights{IsInternationalAllowed})
{
MyVerbose("CLI : $CLI is not authorized to call to International # $DialedNoToValid");
$Authorized=0;
}
if(!$Authorized)
{
$AGI->answer();
$AGI->stream_file('auth-incorrect');
sleep(4);
exitWithCongestion();
}
if($Type{Mobilink})
{
$dialstr = "Zap/g4/" . $DialedNoToValid . "|1000|tTL(" . 30*60 + 0)*1000) .":7000:5000)";
$CDR_HASH{CALLEDID} =$DialedNoToValid ;
$CDR_HASH{TRUNK}="Zap/g4/";
}
else
{
$CDR_HASH{CALLEDID} =$DialedNo;
$CDR_HASH{TRUNK}="Zap/g1/";
}
$AGI->answer();
$res = $AGI->exec("SetCIDNum $Rights{DirectPhone}");
$res = $AGI->exec("SetCIDName $Rights{Name}");
if ($Rights{CALLRECORDING})
{
callrecording($CDR_HASH{CALLEDID});
}
$res = $AGI->exec("DIAL $dialstr");
$answeredtime = $AGI->get_variable("ANSWEREDTIME");
$dialstatus = $AGI->get_variable("DIALSTATUS");
$CDR_HASH{DIALSTATUS}=$dialstatus;
$CDR_HASH{ANSWERTIME}=$answeredtime;
MyVerbose("\$answeredtime: $answeredtime");
MyVerbose("\$dialstatus: $dialstatus");
} ################ end digit 9 if case
elsif($Digit==1)
{
$DialedNo=$AGI->get_data('silence',20000,3);
$DialedNo ="1" . $DialedNo;
$dialstr = "SIP/" . $DialedNo . "\@carrier
{
exitWithCongestion();
}
$CDR_HASH{TRUNK}="Sip";
$CDR_HASH{CALLEDID} =$DialedNo;
if ($Rights{CALLRECORDING})
{
callrecording($CDR_HASH{CALLEDID});
}
$res = $AGI->exec("DIAL $dialstr");
$answeredtime = $AGI->get_variable("ANSWEREDTIME");
$dialstatus = $AGI->get_variable("DIALSTATUS");
$CDR_HASH{DIALSTATUS}=$dialstatus;
$CDR_HASH{ANSWERTIME}=$answeredtime;
MyVerbose1("\$dialstatus: $dialstatus");
}################ end digit 1 if else case
elsif($Digit==2)
{
$DialedNo=$AGI->get_data('silence',20000,2);
$DialedNo ="2" . $DialedNo;
$dialstr = "SIP/" . $DialedNo . "\@carrier|1000|trTL(" . 30*60 + 0)*1000) .":7000:5000)";
if(!IsInteger($DialedNo
{
exitWithCongestion();
}
$CDR_HASH{TRUNK}="Sip";
$CDR_HASH{CALLEDID} =$DialedNo;
if ($Rights{CALLRECORDING})
{
callrecording($CDR_HASH{CALLEDID});
}
$res = $AGI->exec("DIAL $dialstr");
$answeredtime = $AGI->get_variable("ANSWEREDTIME");
$dialstatus = $AGI->get_variable("DIALSTATUS");
$CDR_HASH{DIALSTATUS}=$dialstatus;
$CDR_HASH{ANSWERTIME}=$answeredtime;
MyVerbose("\$dialstatus: $dialstatus");
} ################ end digit 2 if else case
if ( $dialstatus eq 'ANSWER')
{
#saveCdrData(%CDR_HASH);
}
if ($Rights{CALLRECORDING})
{
my $C = $AGI->get_variable(CHANNEL);
my $t = $AGI->exec("StopMonitor $C");
$AGI->hangup();
sleep(2);
system("sox $d_path/$gsm_file $d_path/$wav_file");
}
saveCdrData(%CDR_HASH);
$AGI->hangup();
exit;
sub MyVerbose
{
my ($Msg) = @_;
#return;
$Msg =~ s/\n/ /gi ;
$AGI->verbose("DialoutCLI.pl_Debug: $Msg", 3) ;
}
sub IsInteger
{
my $InputString = shift;
if ($InputString !~ /
0-9
+$/)
{
return 0;
}
else
{
return 1;
}
}
sub exitWithCongestion
{
MyVerbose("Executing hangup due to invalid dialed number");
$res = $AGI->exec("Congestion");
sleep(3);
$AGI->hangup();
exit;
}
sub GetLineRights
{
my $Line = shift;
@Result=Db->ExecuteQuery("
select
IsLocalAllowed ,
IsMobileAllowed ,
IsNationWideAllowed ,
IsInternationalAllowed ,
Name,
DirectPhone,
CallRecording,
VoiceMail
from siprelation
where
username=\"$Line\"
");
my %Hash;
$Hash{IsLocalAllowed} = $Result
1
0
;
$Hash{IsMobileAllowed} = $Result
1
1
;
$Hash{IsNationWideAllowed} = $Result
1
2
;
$Hash{IsInternationalAllowed} = $Result
1
3
;
by imran
$Hash{Name} = $Result
1
4
;
$Hash{DirectPhone} = $Result
1
5
;
$Hash{CALLRECORDING} = $Result
1
6
;
$Hash{VOICEMAIL} = $Result
1
7
;
end
return %Hash;
}
sub GetDialedNumberType
{
my $DialNumber = shift;
my %Hash;
$Hash{localNumber} =0;
$Hash{Mobile} =0;
$Hash{Mobilink} =0;
$Hash{NationWide} =0;
$Hash{International} =0;
if(length($DialNumber)==7)
{
$Hash{localNumber} =1;
}
if( (substr($DialNumber,0,2) eq "03") && (length($DialNumber)==11) )
{
$Hash{Mobile} =1;
}
if( ( ($DialNumber =~ /
0300/gsi) || ($DialNumber =~ /
0301/gsi)) && (length($DialNumber)==11))
{
$Hash{Mobilink} =1;
}
if($DialNumber =~ /
00/gsi)
{
$Hash{International} =1;
}
if(($DialNumber =~ /
0/gsi) && !$Hash{International} && !$Hash{Mobile})
{
$Hash{NationWide} =1;
}
return %Hash;
}
table mycdr by imran
IN Hash
OUT nothing
sub saveCdrData
{
my (%HASH)=@_;
$HASH{CONTEXT} ="";
$HASH{BILLSEC} = "";
Db->ExecuteQuery("insert into mycdr(src,dst,dcontext,channel,duration,billsec,disposition,calldate,recordedfile)
values('$HASH{CALLERID}','$HASH{CALLEDID}','$HASH{CONTEXT}','$HASH{TRUNK}','$HASH{ANSWERTIME}','$HASH{BILLSEC}','$HASH{DIALSTATUS}',sysdate(),'$HASH{CALLRECORDINGFILE}')");
}
sub callrecording
{
my ($phoneno) =@_;
my $CalledNumber = $phoneno;
my $CurDate;
my $calleridnum = $CLI;
$CurDate = $AGI->get_variable("DATETIME");
$CurDate =~ s/://gsi;
$CurDate=substr($CurDate,4,4) . substr($CurDate,2,2) .substr($CurDate,0,2) .substr($CurDate,8,7);
$gsm_file = "Callfrom-$calleridnum-CallTo-$CalledNumber-at-$CurDate.gsm";
$wav_file = "Callfrom-$calleridnum-CallTo-$CalledNumber-at-$CurDate.WAV";
$res = $AGI->exec("Monitor gsm|$d_path/Callfrom-$calleridnum-CallTo-$CalledNumber-at-$CurDate|m");
$CDR_HASH{CALLRECORDINGFILE} = $gsm_file;
}
Created by:
ddx
,Last modification on Fri 26 of Aug, 2005 [09:26 UTC]
Links to this page...
Asterisk tips and tricks
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here:
Register
Thanks! -
support@voip-info.org
Page Changes
|
Comments
Search:
Ads
Last modif pages
remote computer repair
IAXtel.com
AT-620
AX-400P
Grandstream GXP 2100
Xorcom Astribank
chan_mobile
VOIP Service Providers Residential
voip server monitoring
Asterisk Consultants France
Show More…
Free
3CX VoIP phone - free softphone for Windows
Whitepaper - 10 advantages of a Windows PBX
Free VOIP Publications
Ads
Server stats
Execution time: 0.34s
Memory usage: 2.43MB
Database queries: 40
DB time: 0.169s 49.8%
GZIP: Disabled
Server load: 2.81
Get Help
Ask a question
Re: How to place ad?
by
admin
Fri 05 of Aug, 2011
You can contact: support@voip-info.org
Re: Asterisk/Altigen Sip connection One way audio
by
jimmywag
Wed 03 of Aug, 2011
I am not sure why then, maybe you should contact a tech guy. I only have limited knowledge when it comes to these kinda stuff. Good luck
Re: Asterisk/Altigen Sip connection One way audio
by
siselin
Wed 03 of Aug, 2011
My codecs are matching. ulaw. 711 , also would i get audio from asterisk to altigen if the codecs were not matching?
View More...
Google Ads