Asterisk Click2Dial Link in CustomerInfo Bereich erstellen

Howto's zu OTRS Themen. Keine neuen Topics mit Fragen in diesem Forum!
Post Reply
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Asterisk Click2Dial Link in CustomerInfo Bereich erstellen

Post by Andre Bauer »

Ich habe mir in Perl ein Click2Dial Script geschrieben, welches über die Map in der Config.pm mit Agentcomment und Telefonnummer des Kunden befüttert wird und somit einen Call auf einem Asterisk Server erzeugen kann.

Mit dem Asterisk Server wird per Telnet kommuniziert.

Sollte der Asteriskserver nicht im eigenen Netzwerk stehn, sollte die Verbindung über einen SSL Tunnel aufgebaut werden.

Die Konfiguration wird über die Sysconfig erledigt.

Hier der Code für /opt/otrs/bin/cgi-bin/click2dial.pl:

Code: Select all

#!/usr/bin/perl -w
#
# Asterisk - Click 2 Dial for OTRS via Telnet by André Bauer
#
# License: AGPL3
#

# use ../../ as lib location
use FindBin qw($Bin);
use lib "$Bin/../..";
use lib "$Bin/../../Kernel/cpan-lib";

use strict;
use warnings;
use Net::Telnet;
use CGI;
use Kernel::Config;


# get vars from sysconfig
my %CommonObject = ();
$CommonObject{ConfigObject} = Kernel::Config->new();
my $TELNET_HOST = $CommonObject{ConfigObject}->Get('Asterisk::Host');
my $TELNET_PORT = $CommonObject{ConfigObject}->Get('Asterisk::Port');
my $TELNET_USER = $CommonObject{ConfigObject}->Get('Asterisk::User');
my $TELNET_PASS = $CommonObject{ConfigObject}->Get('Asterisk::Password');
my $AST_CONTEXT = $CommonObject{ConfigObject}->Get('Asterisk::Context');
my $AST_WAITTIME = $CommonObject{ConfigObject}->Get('Asterisk::Waittime');
my $AST_DIALPREFIX = $CommonObject{ConfigObject}->Get('Asterisk::Dialprefix');


# get env vars
my $REFERER = $ENV{'HTTP_REFERER'};


# get vars from url
my $CGI = new CGI;
my $AST_CALLER = $CGI->param('agent');
my $AST_CALLED = $CGI->param('customer');
my $INTERNCALL = $CGI->param('intern');


# delete dialprefix
# thats for internal calls
# just add &intern=1 to click2dial url
if ($INTERNCALL eq "1"){
    $AST_DIALPREFIX = "";
}


# check for args
if (($AST_CALLER eq "") || ($AST_CALLED eq "")) {
    print "Content-type: text/html\n\n";
    print "<html>\n";
    print "<head>\n";
    print "<title>OTRS - VOIP Alert</title>\n";
    if ($REFERER != ""){
        print "<meta http-equiv=\"refresh\" content=\"1; url=$REFERER\">\n";
    }
    print "</head>\n";
    print " <body>\n";
    print "<script language=\"javascript\" type=\"text/javascript\">\n";
    print "<!-- //\n";
    print "alert('No Agent or Customer phonenumber given. Exiting.')\n";
    print "// -->\n";
    print "</script>\n";
    print "</body>\n";
    print "</html>\n";
    return 0;
}


# delete unwanted chars from caller and called
$AST_CALLER =~ s/[^0-9]//g;
$AST_CALLED =~ s/[^0-9]//g;


# open telnet connection to asterisk server
my $TELNET_CONNECT = new Net::Telnet (Port => $TELNET_PORT,
    Prompt => '/.*[\$%#>] $/',
    Output_record_separator => '',
    Errmode    => 'return'
);

$TELNET_CONNECT->open("$TELNET_HOST");
$TELNET_CONNECT->waitfor('/0\n$/');
$TELNET_CONNECT->print("Action: Login\n");
$TELNET_CONNECT->print("Username: $TELNET_USER\n");
$TELNET_CONNECT->print("Secret: $TELNET_PASS\n\n");

if (!($TELNET_CONNECT->waitfor('/Authentication accept*/'))) {
    print "Content-type: text/html\n\n";
    print "<html>\n";
    print "<head>\n";
    print "<title>OTRS - VOIP Alert</title>\n";
    if ($REFERER != ""){
        print "<meta http-equiv=\"refresh\" content=\"1; url=$REFERER\">\n";
    }
    print "</head>\n";
    print " <body>\n";
    print "<script language=\"javascript\" type=\"text/javascript\">\n";
    print "<!-- //\n";
    print "alert('Asterisk Manager Interface login failed, verify username and password: $TELNET_CONNECT->lastline')\n";
    print "// -->\n";
    print "</script>\n";
    print "</body>\n";
    print "</html>\n";
    return 0;
}

$TELNET_CONNECT->print("Action: originate\n");
$TELNET_CONNECT->print("Exten: $AST_DIALPREFIX$AST_CALLED\n");
$TELNET_CONNECT->print("Context: $AST_CONTEXT\n");
$TELNET_CONNECT->print("Channel: SIP/$AST_CALLER\n");
$TELNET_CONNECT->print("Priority: 1\n");
$TELNET_CONNECT->print("WaitTime: $AST_WAITTIME\n");
$TELNET_CONNECT->print("Timeout: 10000\n");
$TELNET_CONNECT->print("Callerid: $AST_CALLER\n\n");

if (!($TELNET_CONNECT->waitfor('/Event: Newchannel.*/'))) {
    print "Content-type: text/html\n\n";
    print "<html>\n";
    print "<head>\n";
    print "<title>OTRS - VOIP Alert</title>\n";
    if ($REFERER != ""){
        print "<meta http-equiv=\"refresh\" content=\"1; url=$REFERER\">\n";
    }
    print "</head>\n";
    print "<body>\n";
    print "<script language=\"javascript\" type=\"text/javascript\">\n";
    print "<!-- //\n";
    print "alert('Unable to determine call status: $TELNET_CONNECT->lastline')\n";
    print "// -->\n";
    print "</script>\n";
    print "</body>\n";
    print "</html>\n";
    return 0;
}

$TELNET_CONNECT->print("Action: Logoff\n\n");

if ($REFERER eq ""){
    print "Content-type: text/html\n\n";
    print "<html>\n";
    print "<head>\n";
    print "<title>VOIP Call from $AST_CALLER to $AST_CALLED</title>\n";
    print "</head>\n";
    print "<body>\n";
    print "<p>VOIP Call from $AST_CALLER to $AST_CALLED</p>\n";
    print "</script>\n";
    print "</body>\n";
    print "</html>\n";
}
else {
    # redirect to referer (OTRS -> AgentTicketZoom)
    print $CGI->redirect($REFERER);
}

exit 0;
Die dazugehörige Map für die Config.pm:

Code: Select all

[ 'UserPhone',        'Phone (VOIP Call)',       'phone_1',        1, 0, 'var', 'click2dial.pl?agent=$Env{"UserComment"}&customer=$Data{"UserPhone"}', 0 ],
Wie man hier schon sieht muss die VOIP Telefonnummer des Agenten vom Admin in das Feld "Comment" des jeweiligen Agenten eingetragen werden.


Hier der Code für /opt/otrs/Kernel/Config/Files/Asterisk.xml:

Code: Select all

<?xml version="1.0" encoding="iso-8859-1" ?>
<otrs_config version="1.0" init="Asterisk">
    <CVS>$Id: Asterisk.xml,v 1.00 2009/09/24 10:00:00 abauer Exp $</CVS>
    <ConfigItem Name="Asterisk::User" Required="0" Valid="0">
        <Description Lang="en">The user name to access the Asterisk Server.</Description>
        <Description Lang="de">Der Benutzername um den Asterisk Server benutzen zu koennen.</Description>
        <Group>Framework</Group>
        <SubGroup>Core::Asterisk</SubGroup>
        <Setting>
            <String Regex="">some_user</String>
        </Setting>
    </ConfigItem>
    <ConfigItem Name="Asterisk::Password" Required="0" Valid="0">
        <Description Lang="en">The password to access the Asterisk Server.</Description>
        <Description Lang="de">Das Passwort um den Asterisk Server nutzen zu koennen.</Description>
        <Group>Framework</Group>
        <SubGroup>Core::Asterisk</SubGroup>
        <Setting>
            <String Regex="">some_pass</String>
        </Setting>
    </ConfigItem>
    <ConfigItem Name="Asterisk::Host" Required="0" Valid="0">
        <Description Lang="en">The host of the Asterisk Server.</Description>
        <Description Lang="de">Der Host des Asterisk Servers.</Description>
        <Group>Framework</Group>
        <SubGroup>Core::Asterisk</SubGroup>
        <Setting>
            <String Regex="">127.0.0.1</String>
        </Setting>
    </ConfigItem>
    <ConfigItem Name="Asterisk::Port" Required="0" Valid="0">
        <Description Lang="en">The port of the Asterisk Server.</Description>
        <Description Lang="de">Der Port des Asterisk Servers.</Description>
        <Group>Framework</Group>
        <SubGroup>Core::Asterisk</SubGroup>
        <Setting>
            <String Regex="">5038</String>
        </Setting>
    </ConfigItem>
    <ConfigItem Name="Asterisk::Context" Required="0" Valid="0">
        <Description Lang="en">The context used for the call.</Description>
        <Description Lang="de">Der Kontext der beim Anruf benutzt wird.</Description>
        <Group>Framework</Group>
        <SubGroup>Core::Asterisk</SubGroup>
        <Setting>
            <String Regex="">from-internal</String>
        </Setting>
    </ConfigItem>
    <ConfigItem Name="Asterisk::Waittime" Required="0" Valid="0">
        <Description Lang="en">Ringtime customer.</Description>
        <Description Lang="de">Klingeldauer Kunde.</Description>
        <Group>Framework</Group>
        <SubGroup>Core::Asterisk</SubGroup>
        <Setting>
            <String Regex="">60</String>
        </Setting>
    </ConfigItem>
    <ConfigItem Name="Asterisk::Dialprefix" Required="0" Valid="0">
        <Description Lang="en">Dialprefix.</Description>
        <Description Lang="de">Amt.</Description>
        <Group>Framework</Group>
        <SubGroup>Core::Asterisk</SubGroup>
        <Setting>
            <String Regex="">0</String>
        </Setting>
    </ConfigItem>
</otrs_config>
Die Konfiguration dann über die Sysconfig vornehmen.



Das ganze hab ich auch im Bugtracker gepostet. Eventuell wirds ja irgendwann, nach etwas Überarbeitung, integriert.

http://bugs.otrs.org/show_bug.cgi?id=4332
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
Wolfgangf
Znuny ninja
Posts: 1029
Joined: 13 Apr 2009, 12:26
Znuny Version: 6.0.13
Real Name: Wolfgang Fürtbauer
Company: PBS Logitek GmbH
Location: Pinsdorf

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Post by Wolfgangf »

Funktioniert perfekt! Vielen Dank
Produktiv:
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
rtausend
Znuny newbie
Posts: 16
Joined: 03 Nov 2010, 18:30
Znuny Version: 3

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Post by rtausend »

Hallo,

ich hab mir das hier mal angeschaut, man sollte meinen das es ganz einfach ist, nur bin ich mitder Information "in die config.pm" eintragen erlich gesagt überfordert :)
was meinst Du damit? ich hab die 3 beta laufen und finde das die config.pm irgendwie komplett anders ausschaut und traue mich da jetzt nichts einzutragen,

kannst Du mir hier weiter helfen?

Danke
Robert
--
OTRS 3.0.2, Fedora Core, Standardinstallation
Wolfgangf
Znuny ninja
Posts: 1029
Joined: 13 Apr 2009, 12:26
Znuny Version: 6.0.13
Real Name: Wolfgang Fürtbauer
Company: PBS Logitek GmbH
Location: Pinsdorf

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Post by Wolfgangf »

Servus,
wo genau steigst du aus?
das click2dial.pl ist im /usr/local/bin

in der /opt/otrs/Kernel/Config.pm findest du die Zeile:

Code: Select all

[ 'UserPhone',        'Phone (VOIP Call)',       'phone_1',        1, 0, 'var', '', 0 ],
die änderst Du auf

Code: Select all

[ 'UserPhone',        'Phone (VOIP Call)',       'phone_1',        1, 0, 'var', 'click2dial.pl?agent=$Env{"UserComment"}&customer=$Data{"UserPhone"}', 0 ],
das Asterisk.xml spielst Du unter /opt/otrs/Kernel/Config/Files/ ein

danach kann Du über sysconfig -> suche nach Asterisk -> die Werte für den Asterisk ... ändern

und im useraccount Deine Durchwahl in der Bemerkung eingeben

und los gehts ;)
Produktiv:
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Post by Andre Bauer »

Habe dem Click2dial.pl Script nun noch eine kleine Anpassung spendiert, die es erlaubt über das Script auch interne VOIP Telefonate mit anderen Asterisk Accounts zu initiieren, indem der Dialpräfix gelöscht wird.

Einen Anruf auf einer internen Nummer kann man dann über den Aufruf folgender Url erledigen:
Eventuell kanns ja jemand gebrauchen.
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
Marcofan76
Znuny newbie
Posts: 4
Joined: 03 Mar 2011, 12:52
Znuny Version: 3.0.6

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Post by Marcofan76 »

perfect in version 3.0.6 :o
jokakilla
Znuny newbie
Posts: 23
Joined: 18 Feb 2011, 16:25
Znuny Version: 3.1.3

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Post by jokakilla »

sorry dass ich den alten Thread hier nochmal auskrame. Kann mir vielleicht jemand helfen? Ich habe die click2dial.pl abgelegt und wollte gerade die Config.pm bearbeiten.
Leider gibt es in meiner Config.pm weder einen Block $Self->{CustomerUser} = { } noch eine Map darin. Wenn ich den Bereich aus der Defaults.pm kopiere werden mir in den Tickets allerdings nicht mehr die Kunden-Infos angezeigt. Irgendeine Idee woran das liegen könnte?
fayebryant00

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Post by fayebryant00 »

nice one indeed. :)
Wolfgangf
Znuny ninja
Posts: 1029
Joined: 13 Apr 2009, 12:26
Znuny Version: 6.0.13
Real Name: Wolfgang Fürtbauer
Company: PBS Logitek GmbH
Location: Pinsdorf

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstellen

Post by Wolfgangf »

für die 3.3 Versionen:

im xml file Zeile

Code: Select all

<otrs_config version="1.0" init="Asterisk">
auf

Code: Select all

<otrs_config version="1.0" init="Changes">
ändern und funktioniert
Produktiv:
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
Post Reply