Asterisk Click2Dial Link in CustomerInfo Bereich erstellen

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

Asterisk Click2Dial Link in CustomerInfo Bereich erstellen

Postby Andre Bauer » 24 Sep 2009, 14:30

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
OTRS guru
Posts: 1002
Joined: 13 Apr 2009, 12:26
OTRS Version?: 3.1.10
Real Name: Wolfgang Fürtbauer
Company: ASAMER Holding

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Postby Wolfgangf » 05 May 2010, 17:07

Funktioniert perfekt! Vielen Dank
Produktiv:
OTRS 3.3.10/ ITSM 3.2.10
OS: openSuSE 12.2 Linux, MySql 5.5.x
Windows 2003 AD Integration (agents and customers), Asterisk dialout integration, Nagios integration (incidents, CMDB), Survey, TimeAccounting

rtausend
OTRS newbie
Posts: 16
Joined: 03 Nov 2010, 18:30
OTRS Version?: 3

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Postby rtausend » 03 Nov 2010, 18:32

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
OTRS guru
Posts: 1002
Joined: 13 Apr 2009, 12:26
OTRS Version?: 3.1.10
Real Name: Wolfgang Fürtbauer
Company: ASAMER Holding

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Postby Wolfgangf » 03 Nov 2010, 18:50

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 3.3.10/ ITSM 3.2.10
OS: openSuSE 12.2 Linux, MySql 5.5.x
Windows 2003 AD Integration (agents and customers), Asterisk dialout integration, Nagios integration (incidents, CMDB), Survey, TimeAccounting

Andre Bauer
OTRS guru
Posts: 2191
Joined: 08 Dec 2005, 17:01
OTRS Version?: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Postby Andre Bauer » 15 Nov 2010, 15:20

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:

http://localhost/otrs/click2dial.pl?agent=1000&customer=1001&intern=1


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
OTRS newbie
Posts: 4
Joined: 03 Mar 2011, 12:52
OTRS Version?: 3.0.6

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Postby Marcofan76 » 03 Mar 2011, 13:07

perfect in version 3.0.6 :o

jokakilla
OTRS newbie
Posts: 23
Joined: 18 Feb 2011, 16:25
OTRS Version?: 3.1.3

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstell

Postby jokakilla » 29 Feb 2012, 15:30

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

Postby fayebryant00 » 19 Mar 2012, 04:05

nice one indeed. :)

Wolfgangf
OTRS guru
Posts: 1002
Joined: 13 Apr 2009, 12:26
OTRS Version?: 3.1.10
Real Name: Wolfgang Fürtbauer
Company: ASAMER Holding

Re: Asterisk Click2Dial Link in CustomerInfo Bereich erstellen

Postby Wolfgangf » 01 Jul 2015, 15:16

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 3.3.10/ ITSM 3.2.10
OS: openSuSE 12.2 Linux, MySql 5.5.x
Windows 2003 AD Integration (agents and customers), Asterisk dialout integration, Nagios integration (incidents, CMDB), Survey, TimeAccounting


Return to “Howto's”

Who is online

Users browsing this forum: No registered users and 1 guest