Map Variablen in Config.pm?

Hilfe zu Znuny Problemen aller Art
Locked
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:

Map Variablen in Config.pm?

Post by Andre Bauer »

Ich habe mir in PHP ein Click2Dial Script geschrieben, welches über die Map in der Config.pm mit Agentennamen und Telefonnummer des Kunden befüttert werden soll, um ein Callfile für Asterisk zu erstellen.

Der entsprechende Eintrag in der Map sieht bei mir wie folgt aus:

Code: Select all

[ 'UserPhone',        'Phone',       'phone_1',        1, 0, 'var', 'http://asteriskserver/click2dial.php?agent=$Env{"UserComment"}&recipient=$Env{"UserPhone"}', 0, '_blank' ],
Wenn ich den Link nun im CustomerInfo Bereich von AgetnTicketZoom anklicke wird mir auch ein neues Fenster geöffnet. Jedoch wird im Link leider nur der Comment des Agenten übergeben, in dem ich dessen VOIP Nummer gespeichert habe.

Wie komm ich an die Telefonnumer des Kunden?

Gibts da ne andere Variable für?

Ich möchte nichts am Quellcode ändern müssen, damit es funktioniert.



P.S.: Falls noch jemand Interesse am Click2Dial Script hat... Bitteschön:

Code: Select all

<?php

# config
$ast_context="outbound-allroutes";
$ast_maxretries="1";
$ast_retrytime="60";
$ast_waittime="60";
$ast_dialprefix="0";
$ast_outdir="/var/spool/asterisk/outgoing";
$ast_callfile = "otrs_call_" . mt_rand();

# script

# remove unwanted chars from agents number
$agent_nr=preg_replace('/[^0-9]/', '', $HTTP_GET_VARS["agent"]);

# remove unwanted chars from customers number
$recipient=$ast_dialprefix . preg_replace('/[^0-9]/', '', $HTTP_GET_VARS["recipient"]);

if( !isset($agent) || !isset($recipient) || $recipient == $ast_dialprefix){
    echo "no agent or recipient given";
    exit;
}


# check if agent nr could be fetched from db
if (!isset($agent_nr)){
    echo "cant call customer because your sip number is unknown.";
    exit;
}


# create callfile
$fh = fopen($ast_callfile, 'w');
$stringdata = "Channel: $agent_nr
MaxRetries: $ast_maxretries
RetryTime: $ast_retrytime
WaitTime: $ast_waittime
Context: $ast_context
Extension: $recipient";
fwrite($fh, $stringdata);
fclose($fh);


# move callfile to asterisk outgoing dir
exec('mv ' . escapeshellarg($ast_callfile) . '  ' . escapeshellarg($ast_outdir) . '');
echo "calling customer $recipient via extension " . preg_replace('/SIP\//', '', $agent_nr) . " of agent $agent";

?>
Prod: Ubuntu Server 16.04 / Zammad 1.2

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

OtterHub.org
jojo
Znuny guru
Posts: 15020
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Click2Dial Link in CustomerInfo Bereich erstellen?

Post by jojo »

Hallo,

die Kundenvariablen kannst Du nicht über $Env erreichen

Code: Select all

http://asteriskserver/click2dial.php?agent=$Env{"UserLogin"}&recipient=$Data{"UserPhone"}
ist die Lösung...
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
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:

Click2Dial Link in CustomerInfo Bereich erstellen?

Post by Andre Bauer »

Ahh... Cool. Vielen Dank :-)

Ich hatte schon befürchtet, dass man dafür an den Quellcode ran muss, da ich sowas in der ML gelesen hatte.

Ich werde morgen noch mal probieren das per Perl mit dem Asterisk Manager zu machen. Da kann man den Call einfach per Telnet auf Port 5038 erstellen.

So muss man das Click2Dial Script nicht auf den Asterisk Server kopieren und könnte das direkt in OTRS integrieren. Fehlt dann nur noch die Sysconfig Option für Asterisk Host, Port, User und Pass...

Naja. Mehr als Proof of Concept wird das mit meinen bescheidenen Programmierkünsten aber wohl nicht werden :o
Prod: Ubuntu Server 16.04 / Zammad 1.2

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

OtterHub.org
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:

Click2Dial Link in CustomerInfo Bereich erstellen?

Post by Andre Bauer »

So, hier wie versprochen das Ganze per Perl / Telnet, so dass das Script direkt unter /opt/otrs/bin/cgi-bin/click2dial.pl liegen und auch mit entfernten Asterisk Servern kommunizieren kann:

Code: Select all

#!/usr/bin/perl -w
#
# Asterisk - Click 2 Dial for OTRS via Telnet by monotek
#

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


# config

# asterisk server config
my $TELNET_HOST = "127.0.0.1";
my $TELNET_PORT = "5038";
my $TELNET_USER = "user";
my $TELNET_PASS = "pass";

# asterisk call config
my $AST_DIALPREFIX = "0";
my $AST_CONTEXT = "from-internal";
my $AST_WAITTIME = "60";


# script
my $CGI = new CGI;


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


# check for args
if (($AST_CALLER eq "") || ($AST_CALLED eq "")) {
    exit 1;
}


# 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 "Asterisk Manager Interface login failed, verify username and password: $TELNET_CONNECT->lastline\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 "Unable to determine call status: $TELNET_CONNECT->lastline";
    return 0;
}

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


# redirect to referer (OTRS -> AgentTicketZoom)
my $REFERER = $ENV{'HTTP_REFERER'};
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.


Was mir jetzt noch fehlt ist die Config aus der OTRS Sysconfig zu laden.
Ich habe die Framework.xml schon dahingehend angepasst, dass die Daten drinstehn:

Code: Select all

    
     </ConfigItem>
        <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 benutzen 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 to access the Asterisk Server.</Description>
        <Description Lang="de">Der Host um den Asterisk Server benutzen zu koennen.</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 to access the Asterisk Server.</Description>
        <Description Lang="de">Das Port um den Asterisk Server benutzen zu koennen.</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">How long should phone call on customers side?</Description>
        <Description Lang="de">Wie lange soll das Telefon beim Kunden klingeln?.</Description>
        <Group>Framework</Group>
        <SubGroup>Core::Asterisk</SubGroup>
        <Setting>
            <String Regex="">60</String>
        </Setting>
    </ConfigItem>
    <ConfigItem Name="Asterisk::Dailprefix" 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> 
Wie ich die nun in der click2dial.pl verwende ist mir noch nicht klar.

Eventuell kann ja jemand helfen, so dass das ganze eventuell ne Chance hat als Patch ins OTRS zu wandern :-)
Prod: Ubuntu Server 16.04 / Zammad 1.2

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

OtterHub.org
jojo
Znuny guru
Posts: 15020
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Click2Dial Link in CustomerInfo Bereich erstellen?

Post by jojo »

Hallo,

am besten änderst Du die Ticket.xml nicht, sondern packst eine eigene dazu...

Welche OTRS Klassen Du genau einbinden musst, hab ich leider auch net im Kopf... Nimm doch die rpc.pl als Muster
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
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:

Click2Dial Link in CustomerInfo Bereich erstellen?

Post by Andre Bauer »

Edit: Hier gehts zu endgültigen Lösung:

http://www.otrs-forum.de/viewtopic.php? ... 864#p14864
Prod: Ubuntu Server 16.04 / Zammad 1.2

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

OtterHub.org
Locked