Ihr erreicht damit also eine CTI (Computer Telephony Integration) Funktionalität im OTRS, ohne dass Ihr einen CTI Client auf dem Rechner des Agenten laufen haben müsst.
Vorraussetzung: Eure Telfonanlage legt ein Callfile an, welches die Daten enthällt.
Die Daten müssen in folgender Form im Callfile abgelegt werden:
Code: Select all
TimeOfCall;;CallerNumber;;CalledNumber;;CustomerEmail
Es gibt dafür 3 neue Sysconfig Optionen, die über die Datei Callfile.xml bereit gestellt werden.
Code: Select all
<?xml version="1.0" encoding="iso-8859-1" ?>
<otrs_config version="1.0" init="phone">
<CVS>$Id: Callfile.xml,v 1.00 2010/03/14 10:00:00 abauer Exp $</CVS>
<ConfigItem Name="Ticket::Callfile::Use" Required="1" Valid="1">
<Description Lang="en">If enabled, OTRS will use data from callfile in AgentTicketPhone. Content of callfile have to be "TimeOfCall;;CallerNumber;;CalledNumber;;CustomerID;;CustomerEmail".</Description>
<Description Lang="de">Wird diese Option aktiviert, nutzt OTRS Daten aus einem Callfile in AgentTicketPhone. Der Inhalt des Callfiles muss "TimeOfCall;;CallerNumber;;CalledNumber;;CustomerID;;CustomerEmail" sein.</Description>
<Group>Ticket</Group>
<SubGroup>Callfile</SubGroup>
<Setting>
<Option SelectedID="0">
<Item Key="0">No</Item>
<Item Key="1">Yes</Item>
</Option>
</Setting>
</ConfigItem>
<ConfigItem Name="Ticket::Callfile::Directory" Required="1" Valid="1">
<Description Lang="en">HTTP or FTP Link to the callfiles directory. The name of the callfile (phonenumber of agent) have to be stored in field UserComment of Agent.</Description>
<Description Lang="de">HTTP oder FTP Link zum Callfiles Verzeichnis. Der Name des Callfiles (Telefonnummer des Agenten) muss im Feld UserComment des Agenten gespeichert werden.</Description>
<Group>Ticket</Group>
<SubGroup>Callfile</SubGroup>
<Setting>
<String Regex="^(http|ftp):\/\/.*/$">http://localhost/callfiles/</String>
</Setting>
</ConfigItem>
<ConfigItem Name="Ticket::Callfile::ValidTime" Required="1" Valid="1">
<Description Lang="en">Time in seconds which content of callfile is valid.</Description>
<Description Lang="de">Zeit in Sekunden, die das Callfile gültig ist.</Description>
<Group>Ticket</Group>
<SubGroup>Callfile</SubGroup>
<Setting>
<String Regex="[0-9]*">60</String>
</Setting>
</ConfigItem>
</otrs_config>
Die zweite Option gibt den HTTP oder FTP Pfad zum Callfile Verzeichnis an.
Die dritte Option gibt an, wie lange das Callfile gültig ist.
Das ganze wird anhand des Datums im Callfile geprüft. Wenn Asterisk und OTRS auf verschiedenen Servern installiert sind, sollte also unbedingt ein NTP Daemon die Uhren aktuell halten.
Das Datumsformat für "TimeOfCall" muss sein "dd.mm.yyyy HH:MM:SS" also z.B. "20.05.2010 13:42:32".
Ist das Callfile älter als der Wert aus Ticket::Callfile::ValidTime, wird ein leeres Telfonticket erstellt.
Der Name des Callfiles wird wie schon beim Click2Dial im Adminbereich über "Users" im Feld "Comment" des Agenten gespeichert. Es ist also die Telfonnummer des Agenten anzugeben.
Damit das ganze funktioniert muss die Datei AgentTicketPhone.pm gepatch werden. Der folgende Patch ist für OTRS 2.4.7:
Code: Select all
81a82,105
> # get customer data from callfile
> if ( $Self->{ConfigObject}->Get('Ticket::Callfile::Use') ) {
> use LWP::Simple;
> use Time::Local;
> my @CallfileContent = split(/;;/, get($Self->{ConfigObject}->Get('Ticket::Callfile::Directory').$Self->{UserComment}));
> if (@CallfileContent != "") {
> my $CallTime = timegm(substr($CallfileContent[0], 17, 2), substr($CallfileContent[0], 14, 2), substr($CallfileContent[0], 11, 2),
> substr($CallfileContent[0], 0, 2), substr($CallfileContent[0], 3, 2)-1, substr($CallfileContent[0], 8, 2));
> my $CurrentTime = timegm(localtime);
> my $ValidTime = $Self->{ConfigObject}->Get('Ticket::Callfile::ValidTime');
> if ($CallTime+$ValidTime > $CurrentTime){
> my $CTI = $Self->{ParamObject}->GetParam( Param => 'CTI' );
> my $CTI_Body = "$CallfileContent[0] - Caller: $CallfileContent[1] - Called: $CallfileContent[2]";
> my $CTI_From = $CallfileContent[3];
> if ( $CTI != 1 ) {
> # redirect to AgentTicketPhone with parameters
> return $Self->{LayoutObject}->Redirect(
> OP => "Action=AgentTicketPhone&Subaction=StoreNew&ExpandCustomerName=1&From=$CTI_From&CTI=1&Body=$CTI_Body"
> );
> }
> }
> }
> }
>
Dieses Callfile muss bei jedem neuen angenommenen Anruf überschrieben werden.