<chapter id="generic-agent">
<title>Generic-Agent</title>
<para>
Der Generic-Agent (zu finden unter bin/GenericAgent.pl) ist ein Kommandozeilenprogramm, welches verschiedene Aktionen (bspw. Notizen einfügen, Status setzen, Besitzer ändern...) in Bezug auf die Tickets ausführen kann. 
</para>

<section id="generic-agent-web">
<title>Web-Interface (bevorzugt)</title>
<para>
OTRS 1.3 oder höher kommt mit einen Web-Interface um GenericAgent Jobs zu verwalten. 
</para>
<para>
    Admin - GenericAgent Job-Übersicht
    <screenshot>
    <screeninfo>Admin - GenericAgent Job-Übersicht</screeninfo>
    <graphic fileref="screenshots/admin-genericagent1.png" scale="40" srccredit="generic agent screen - screenshot"></graphic>
    </screenshot>
</para>
<para>
    Admin - GenericAgent Job-Bearbeiten
    <screenshot>
    <screeninfo>Admin - GenericAgent Job-Bearbeiten</screeninfo>
    <graphic fileref="screenshots/admin-genericagent2.png" scale="40" srccredit="generic agent screen - screenshot"></graphic>
    </screenshot>
</para>
</section>


<section id="generic-agent-config-file">
<title>Konfigurationsdatei (optional)</title>
<para>
Kernel/Config/GenericAgent.pm ist wiederum die zugehörige Konfigurationsdatei. Diese muss, ebenso wie die anderen Konfigurationsdateien von OTRS erst aus der Vorlage Kernel/Config/GenericAgent.pm.dist nach Kernel/Config/GenericAgent.pm kopiert werden. 
</para>
<para>
Es ist genau so gut möglich, verschiedene Konfigurationsdateien zu verwenden. Kopieren Sie die Vorlage einfach nach z.B. Kernel/Config/GenericAgentFileB.pm und ändern Sie die Bezeichung des Packets in der neuen Datei.
<programlisting>
[...]
package Kernel::Config::GenericAgentFileB;
[...]
</programlisting>
Führen Sie den bin/GenericAgent.pl mit der Option "-c Kernel::Config::GenericAgentFileB" aus und schon wird die neue Konfigurationsdatei verwendet.
</para>

<section id="generic-agent-example">
<title>Beispiele:</title>
<para>
Wir wollen nun einige Beispiele vorstellen. Eine Beispielkonifguration finden sie zudem unter: Kernel/Config/GenericAgent.pm.examples
</para>
<para>
Hier nun die möglichen Optionen:
<programlisting>
   'name of job' => {
      # get all tickets with these properties 
      TicketNumber => '200%01',
      Queue => 'system queue',
      States => ['new', 'open'],
      Priorities => ['1 very low', '2 low', '3 normal'],
      Locks => ['unlock'],
      From => '%spam@example.com%',
      To => '%support@example.com%',
      Cc => '%client@example.com%',
      TicketFreeKey1 => 'Product',
      TicketFreeText1 => 'adasd',
      TicketFreeKey2 => 'Product',
      TicketFreeText2 => 'adasd',
      Subject => '%VIRUS 32%',
      Body => '%VIRUS 32%',
      CustomerID => '123',
      CustomerUserLogin => 'uid123',
      # tickets older the 60 minutes
      TicketCreateTimeOlderMinutes => 60,
      # tickets newer then 60 minutes
      TicketCreateTimeNewerMinutes => 60,
      # tickets with create time older then ....
      TicketCreateTimeOlderDate => '2004-01-19 00:00:01',
      # tickets with create time newer then ...
      TicketCreateTimeNewerDate => '2004-01-09 23:59:59',

      # or escalation tickets
      Escalation => 1,

      # new ticket properties (no option is required, use just the options
      # which should be changed!)
      New => {
        # new queue
        Queue => 'new system queue',
        # possible states (closed successful|closed unsuccessful|open|new|removed) 
        State => 'closed successful',
        Priority => '3 normal',
        # new ticket free text
        TicketFreeKey1 => 'Product123',
        TicketFreeText1 => 'adasd123',
        # new ticket owner (if needed)
        Owner => 'root@localhost',
        # set customer id and customer user
        CustomerID => '123',
        CustomerUserLogin => 'usd213',
        # if you want to add a Note
        Note => {
          From => 'GenericAgent',
          Subject => 'Your subject!',
          Body => 'Some comment!',
          ArticleType => 'note-internal', # note-internal|note-external|note-report
        },
        # your program (/path/to/your/program) will be executed like
        # "/path/to/your/program $TicketNumber $TicketID" ARG[0] will 
        # be the ticket number and ARG[1] the ticket id
        CMD => '/path/to/your/program',
        # DELETE ticket from database and filesystem
        Delete => 1,
     },
</programlisting>
</para>

<section>
<title>Spam Tickets schließen</title>
<para>
Wenn Sie auf Ihrer System-E-Mail-Adresse Spam Nachrichten erhalten und Sie nicht viel Zeit damit verschwenden wollen, legen Sie einfach eine Queue (bspw. Spam) an und verschieben Sie diese Spam-Tickets in diese Queue. Wenn der GenericAgent.pl ausgeführt wird, werden alle offenen Tickets in dieser Queue automatisch geschlossen. 
</para> 
<para>
Beispiel für die Konfigurationsdatei: Kernel/Config/GenericAgent.pm
<programlisting>
[...]
   # --
   # [name of job] -> close all tickets in queue spam
   # --
   'close spam' => {
      # get all tickets with this properties  
      Queue => 'spam',
      States => ['new', 'open'],
      Locks => ['unlock'],
      # new ticket properties (no option is required, use just the options
      # which should be changed!)
      New => {
        # new queue
        Queue => 'spam',
        # possible states (closed successful|closed unsuccessful|open|new|removed) 
        State => 'closed successful',
        # new ticket owner (if needed)
        Owner => 'root@localhost',
        # if you want to add a Note
        Note => {
          From => 'GenericAgent',
          Subject => 'spam!',
          Body => 'Closed by GenericAgent.pl because it is spam!',
       },
     },
   },
[...]
</programlisting>
</para> 
</section>

<section>
<title>Tickets löschen</title>
<para>
Wenn Sie Tickets (aus der Datenbank und dem Dateiensystem) löschen möchten, verwenden Sie das folgende:
</para> 
<para>
Beispiel für die Konfigurationsdatei: Kernel/Config/GenericAgent.pm
<programlisting>
[...]
   # --
   # [name of job] -> close and delete all tickets in queue delete
   # --
   'delete' => {
      # get all tickets with this properties  
      Queue => 'delete',
      States => ['new', 'open'],
      Locks => ['unlock'],
      # new ticket properties (no option is required, use just the options
      # witch should be changed!)
      New => {
        # DELETE!
        Delete => 1,
     },
   },
[...]
</programlisting>
</para> 
</section>

<section>
<title>Tickets von "tricky" nach "experts" verschieben</title>
<para>
Verschieben von Tickets aus der Queue "tricky" in die Queue "experts" und anhängen einer Notiz.
</para> 
<para>
Beispiel für die Konfigurationsdatei: Kernel/Config/GenericAgent.pm
<programlisting>
[...]
   # --
   # [name of job] -> move all tickets from tricky to experts
   # --
   'move tickets from tricky to experts' => {
      # get all tickets with this properties  
      Queue => 'tricky',
      States => ['new', 'open'],
      Locks => ['unlock'],
      # new ticket properties
      New => {
        Queue => 'experts',
        Note => {
          From => 'GenericAgent',
          Subject => 'Moved!',
          Body => 'Moved from "tricky" to "experts" because it was not possible to find a sollution!',
          ArticleType => 'note-internal', # note-internal|note-external|note-report
        },
      },
   },
[...]
</programlisting>
</para> 
</section>

<section>
<title>Verschieben von Tickets von abc nach experts und Änderung der Priorität</title>
<para>
Verschieben von Tickets aus der Queue "abc" in die Queue "experts" und ändern der Priorität von "3 normal" auf "4 hoch".
</para> 
<para>
Beispiel für die Konfigurationsdatei: Kernel/Config/GenericAgent.pm
<programlisting>
[...]
   # --
   # [name of job] -> move all tickets from abc to experts and change priority
   # --
   'move all abc priority "3 normal" tickets to experts and change priority'=> {
      # get all tickets with this properties  
      Queue => ['abc'],
      States => ['new', 'open'],
      Locks => ['unlock'],
      Priorities => ['3 normal'],
      # new ticket properties
      New => {
        Queue => 'experts',
        Priority => '4 high',
      },
   },
[...]
</programlisting>
</para> 
</section>

<section>
<title>Verschieben von eskalierten Tickets nach experts und ausführend eines Kommandos</title>
<para>
Wenn es eskalierte Tickets gibt, werden diese in die Queue experts verschoben und anschließend ein Kommando ausgeführt. 
</para> 
<para>
Beispiel für die Konfigurationsdatei: Kernel/Config/GenericAgent.pm
<programlisting>
[...]
   # --
   # [name of job] -> move all tickets from xyz to experts
   # --
   'move escalation ticket to experts and execute CMD' => {
      # get all tickets with this properties  
      Queue => 'xyz',
      Escalation => 1,
      # new ticket properties
      New => {
        Queue => 'experts',
        # your program (/path/to/your/program) will be executed like
        # "/path/to/your/program $TicketNumber $TicketID" ARG[0] will 
        # be the ticket number and ARG[1] the ticket id
        CMD => '/path/to/your/program',
      },
   },
[...]
</programlisting>
</para> 
</section>


<section>
<title>Löschen aller Tickets mit dem Betreff "I love you" in der Queue "abc"</title>
<para>
Löschen aller Tickets mit dem Betreff "I love you" in der Queue "abc".
</para> 
<para>
Beispiel für die Konfigurationsdatei: Kernel/Config/GenericAgent.pm
<programlisting>
[...]
   'delete all tickets with subject "VIRUS 32" in queue abc' => {
      # get all tickets with this properties
      Queue => 'abc',
#      From => '%spam@example.com%',
#      To => '%support@example.com%',
#      Cc => '%client@example.com%',
      Subject => '%VIRUS 32%',
#      Body => '%testing case 1245%',
      # new ticket properties
      New => {
        # DELETE!
        Delete => 1,
      },
   },
[...]
</programlisting>
</para>
</section>

</section>

</section>

</chapter>
