VoIP Mailing List Archives
Mailing list archives for the VoIP community |
|
View previous topic :: View next topic |
Author |
Message |
Mailings at kh-dev.de Guest
|
Posted: Fri Jun 26, 2009 3:23 pm Post subject: [Freeswitch-users] hangup hook after intercept doesn't get t |
|
|
Actually one of my first actions in the script is
$session->setHangupHook('on_hangup');
When a call comes in the hook is set and working.
The second time the script is called when I try to intercept. As it’s the same script there’s also the function setHangupHook called.
That’s what I’ve currently done.
How can I set up the hook for the “new” bridge?
Or is there a possibility to set a global hook?
Thanks, Klaus
From: freeswitch-users-bounces@lists.freeswitch.org [mailto:freeswitch-users-bounces@lists.freeswitch.org] On Behalf Of Brian West
Sent: Friday, June 26, 2009 10:07 PM
To: freeswitch-users@lists.freeswitch.org
Subject: Re: [Freeswitch-users] hangup hook after intercept doesn't get triggered...
Depends what side of the call was the hangup hook on?
/b
On Jun 26, 2009, at 2:48 PM, Klaus Hochlehnert wrote:
Hi all,
I’m just writing a perl script as dialplan to learn how to handle freeswitch.
Now I have the issue that my hangup hook won’t be triggered after I intercepted a call.
A “normal” hangup triggers the function.
Does anybody have a hint how to get the hangup hook triggered?
Thanks, Klaus
______________ |
|
Back to top |
|
|
Mailings at kh-dev.de Guest
|
Posted: Fri Jun 26, 2009 3:40 pm Post subject: [Freeswitch-users] hangup hook after intercept doesn't get t |
|
|
Ok, and how can I ask the hook to come with me?
If I understand this right...
When a call comes in the hook is set on the a-leg and it rings on the b-leg.
When I do an intercept I kill the ringing b-leg and the interceptor is now the “new” b-leg, right?
I would assume that the “old” a-leg still has the hook on it or this wrong.
Thanks, Klaus
From: freeswitch-users-bounces@lists.freeswitch.org [mailto:freeswitch-users-bounces@lists.freeswitch.org] On Behalf Of Brian West
Sent: Friday, June 26, 2009 10:28 PM
To: freeswitch-users@lists.freeswitch.org
Subject: Re: [Freeswitch-users] hangup hook after intercept doesn't get triggered...
well in your case I suspect your intercepting the leg of the call without the hook on it.
/b
On Jun 26, 2009, at 3:22 PM, Klaus Hochlehnert wrote:
Actually one of my first actions in the script is
$session->setHangupHook('on_hangup');
When a call comes in the hook is set and working.
The second time the script is called when I try to intercept. As it’s the same script there’s also the function setHangupHook called.
That’s what I’ve currently done.
How can I set up the hook for the “new” bridge?
Or is there a possibility to set a global hook?
Thanks, Klaus |
|
Back to top |
|
|
Mailings at kh-dev.de Guest
|
Posted: Fri Jun 26, 2009 6:23 pm Post subject: [Freeswitch-users] hangup hook after intercept doesn't get t |
|
|
Brian told me to open a jira, what I did now.
But here’s the script.
It basically writes incoming calls to a database and removes them after hangup.
When intercepting it also rewrites the destination of the call.
Thanks, Klaus
#!/usr/bin/perl
use strict;
use DBI;
use POSIX qw(strftime);
our $session;
use constant {
false => 0,
true => 1,
};
my $EmptyString = " "; # Used to delete regexp catches
my $dbargs = {AutoCommit => 0,
PrintError => 1};
my $dbh = DBI->connect("dbi:SQLite:dbname=/opt/freeswitch/db/dialplan_call_info.db", "", "", $dbargs);
$session->setHangupHook('on_hangup');
logInfo("Hook set");
sub logString {
my ($Level, $Msg) = @_;
freeswitch::consoleLog("$Level", "$Msg\n");
}
sub logDebug { my ($Msg) = @_; logString("DEBUG", ">>>>> $Msg"); }
sub logInfo { my ($Msg) = @_; logString("INFO", ">>>>> $Msg"); }
sub logNotice { my ($Msg) = @_; logString("NOTICE", ">>>>> $Msg"); }
sub logWarning { my ($Msg) = @_; logString("WARNING", ">>>>> $Msg"); }
sub logError { my ($Msg) = @_; logString("ERR", ">>>>> $Msg"); }
sub logCritical { my ($Msg) = @_; logString("CRIT", ">>>>> $Msg"); }
sub logAlert { my ($Msg) = @_; logString("ALERT", ">>>>> $Msg"); }
# The idea of these functions is to allow for easy pull in of variables and then
# automatically export any ones that have been changed when UPDATEV.
# It will ensure you don't write to any non-imported variables, but as we are
# using a hash we cannot prevent invalid reads. If you are really concerned about
# this then you could use a specific read function which first checks to make sure
# its defined in CLEAN_VARS before returning.
my %VARS;
my %CLEAN_VARS;
# Takes one or more variables names to import in
sub GETV {
my @Arr = @_;
foreach my $Var (@Arr) {
$VARS{$Var} = $session->getVariable("$Var");
$CLEAN_VARS{$Var} = $VARS{$Var};
if (! defined $CLEAN_VARS{$Var}) {
$CLEAN_VARS{$Var} = "";
}
}
}
# Generally not called directly, but will set the variable to the value requested right away
sub SETV {
my ($Var, $Value) = @_;
$session->setVariable("$Var", "$Value");
$VARS{$Var} = "$Value";
$CLEAN_VARS{$Var} = "$Value";
}
# If we don't care about a variables value, but wan't to override it this will add it to the hash
# so that when we write to it, we don't consider it a typo
sub ADDV {
my @Arr = @_;
foreach my $Var(@Arr) {
$CLEAN_VARS{$Var} = "123zzzzzZnzZZzz"; # Something definitely won't match
$VARS{$Var} = "";
}
}
# Updates any changed variables
sub UPDATEV {
foreach my $Var (keys %VARS) {
# Make sure there were no typos
if (! defined $CLEAN_VARS{$Var}) {
die "Warning a variable of: '$Var' was not found in CLEAN_VARS, did you forget to GET/ADD it first?";
}
if ($VARS{$Var} ne $CLEAN_VARS{$Var}) {
SETV($Var, $VARS{$Var});
}
}
}
# Dump all variables
sub DUMPV {
foreach my $Var (sort keys %VARS) {
logInfo("$Var = '" . $VARS{$Var} . "'");
}
}
sub CAN_ACCESS {
my ($Req) = @_;
if ($VARS{app_rights} eq "ALL" || $VARS{app_rights} =~ /#$Req#/) {
return true;
} else {
return false;
}
}
# Fetch some generic variables
GETV("uuid", "base_dir", "domain", "app_rights", "de-ring", "outgoing_soundtouch_profile", "hold_music", "continue_on_fail");
GETV("destination_number", "caller_id_name", "caller_id_number", "effective_caller_id_name", "effective_caller_id_number");
GETV("network_addr", "hangup_after_bridge", "called_party_callgroup", "ringback", "transfer_ringback", "sip_exclude_contact");
GETV("call_timeout", "source", "sip_to_params", "presence_id", "dialed_user", "dialed_domain");
GETV("voicemail_authorized", "sip_authorized", "username", "accountcode", "sip_from_user", "sip_to_user");
# Set some defaults
$VARS{hangup_after_bridge} = "true";
$VARS{ringback} = $VARS{'de-ring'};
$VARS{transfer_ringback} = $VARS{hold_music};
$VARS{sip_exclude_contact} = $VARS{network_addr};
$VARS{call_timeout} = "60";
$VARS{continue_on_fail} = "true"; # NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DESTINATION
UPDATEV();
sub bridgeCallInternally {
my ($DestNr) = @_;
if ("${DestNr}" == "21") {
$VARS{call_timeout} = "15";
}
UPDATEV();
$dbh->do("insert into current_calls (extension, uuid) values ('$DestNr', '$VARS{uuid}')");
$dbh->commit();
$session->execute("record_session","\${base_dir}/recordings/\${strftime(%Y-%m-%d-%H-%M-%S)}_\${destination_number}_\${caller_id_number}.wav");
$session->execute("bridge","user/${DestNr}\@$VARS{domain}");
}
sub on_hangup {
my $hup_session = shift;
my $hup_cause = shift;
logInfo("Hangup uuid: '" . $hup_session->{uuid} . "'");
logInfo("Hangup cause: '$hup_cause'");
$dbh->do("delete from current_calls where uuid = '" . $hup_session->{uuid} . "'");
$dbh->commit();
}
# Internal numbers
if ($VARS{destination_number} =~ /^(2[0-2])$/) {
UPDATEV();
bridgeCallInternally($VARS{destination_number});
}
# Intercept call
if ($VARS{destination_number} =~ /^\*8(\d+)$/) {
my $intercept_extension = "";
my $intercept_uuid = "";
my $sth = $dbh->prepare("select * from current_calls where extension = ?");
$sth->execute($1);
while (my @data = $sth->fetchrow_array()) {
$intercept_extension = $data[0];
$intercept_uuid = $data[1];
}
logInfo("Intercept call from '$intercept_extension' - '$intercept_uuid'");
GETV("caller_id_number");
$dbh->do("update current_calls set extension = '$VARS{caller_id_number}' where uuid = '$intercept_uuid'");
$dbh->commit();
$session->answer();
$session->execute("intercept", "$intercept_uuid");
$session->execute("sleep", "1000");
}
$dbh->disconnect();
return 1;
From: freeswitch-users-bounces@lists.freeswitch.org [mailto:freeswitch-users-bounces@lists.freeswitch.org] On Behalf Of Michael Collins
Sent: Friday, June 26, 2009 10:57 PM
To: freeswitch-users@lists.freeswitch.org
Subject: Re: [Freeswitch-users] hangup hook after intercept doesn't get triggered...
Can you paste in your script so we can see what is going on?
-MC
On Fri, Jun 26, 2009 at 1:39 PM, Klaus Hochlehnert <Mailings@kh-dev.de (Mailings@kh-dev.de)> wrote:
Ok, and how can I ask the hook to come with me?
If I understand this right...
When a call comes in the hook is set on the a-leg and it rings on the b-leg.
When I do an intercept I kill the ringing b-leg and the interceptor is now the “new” b-leg, right?
I would assume that the “old” a-leg still has the hook on it or this wrong.
Thanks, Klaus
From: freeswitch-users-bounces@lists.freeswitch.org (freeswitch-users-bounces@lists.freeswitch.org) [mailto:freeswitch-users-bounces@lists.freeswitch.org (freeswitch-users-bounces@lists.freeswitch.org)] On Behalf Of Brian West
Sent: Friday, June 26, 2009 10:28 PM
To: freeswitch-users@lists.freeswitch.org (freeswitch-users@lists.freeswitch.org)
Subject: Re: [Freeswitch-users] hangup hook after intercept doesn't get triggered...
well in your case I suspect your intercepting the leg of the call without the hook on it.
/b
On Jun 26, 2009, at 3:22 PM, Klaus Hochlehnert wrote:
Actually one of my first actions in the script is
$session->setHangupHook('on_hangup');
When a call comes in the hook is set and working.
The second time the script is called when I try to intercept. As it’s the same script there’s also the function setHangupHook called.
That’s what I’ve currently done.
How can I set up the hook for the “new” bridge?
Or is there a possibility to set a global hook?
Thanks, Klaus
_______________________________________________
Freeswitch-users mailing list
Freeswitch-users@lists.freeswitch.org (Freeswitch-users@lists.freeswitch.org)
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org |
|
Back to top |
|
|
Mailings at kh-dev.de Guest
|
Posted: Fri Jun 26, 2009 6:37 pm Post subject: [Freeswitch-users] hangup hook after intercept doesn't get t |
|
|
I used the Project „FS Scripts“. Hope that’s ok.
From: freeswitch-users-bounces@lists.freeswitch.org [mailto:freeswitch-users-bounces@lists.freeswitch.org] On Behalf Of Brian West
Sent: Saturday, June 27, 2009 1:28 AM
To: freeswitch-users@lists.freeswitch.org
Subject: Re: [Freeswitch-users] hangup hook after intercept doesn't get triggered...
Please open the jira and attach all this and the xml dialplan to execute it .. also the schema for the db would be helpful also.
Thanks,
/b
On Jun 26, 2009, at 6:16 PM, Klaus Hochlehnert wrote:
Brian told me to open a jira, what I did now. |
|
Back to top |
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|