Zuordnung von Replys / Follow-Ups

Mal eine allgemeine Frage zum Verständnis: Wie funktioniert im OTRS denn eigentlich genau die Zuordnung von Follow-Up's? Ich meine, wenn ich in eine Mail im Betreff auf die Ticketnummer verweise dann wird das Ticket automatisch als Follow-Up erkannt. Soweit so gut! Wenn ich aber eine Mail bekomme, die keine Ticketnummer beinhaltet, sondern nur ein Reply ist (Bsp. 1. Mail: Testsubject XYZ -- 2. Mail: Re: Testsubject XYZ) dann wird dies vom OTRS auch als FollowUp erkannt. Das würde ich jetzt eigentlich gerne dafür nutzen, von unseren Servern generierte Meldungen automatisch zuzuordnen. Beispiel: Server schickt eine Fehlermeldung mit Betreff => $servername - $dienst - $messageID Im Body steht dann die Fehlermeldung. Sobald der Fehler beseitigt ist, wird eine weitere Mail mit exakt dem gleichen Betreff generiert. Hier erkennt OTRS aber komischerweise keinen Zusammenhang und macht ein neues Ticket auf. Gewollt? Fehler im OTRS? Fehler in meiner Überlegung? Kann mir mal jemand auf die Sprünge helfen? Thx schonmal Dennis -- Mit freundlichen Grüßen i. A. Dennis Mohn ACTIS.BSP IT Services GmbH Phone +49 69 6 65 37-225 Fax +49 69 6 65 37-113 mailto:dennis.mohn@actisbsp.com www.actisbsp.com

Hi Dennis, On Mo, Jan 15, 2007 at 09:50:57 +0100, Dennis Mohn wrote:
Wie funktioniert im OTRS denn eigentlich genau die Zuordnung von Follow-Up's?
Ich meine, wenn ich in eine Mail im Betreff auf die Ticketnummer verweise dann wird das Ticket automatisch als Follow-Up erkannt. Soweit so gut! Wenn ich aber eine Mail bekomme, die keine Ticketnummer beinhaltet, sondern nur ein Reply ist (Bsp. 1. Mail: Testsubject XYZ -- 2. Mail: Re: Testsubject XYZ) dann wird dies vom OTRS auch als FollowUp erkannt.
Ja, da die Mail im "references" und "in-reply-to" Header die Message-IDs der Mails enthält, auf die sie sich bezieht. Der Betreff ist nur ein unzureichendes Kriterium und wird nur im Notfall zur Thread-Zuordnung verwendet, wenn eine Mail keine references bzw. in-reply-to Header enthält.
Das würde ich jetzt eigentlich gerne dafür nutzen, von unseren Servern generierte Meldungen automatisch zuzuordnen. Beispiel: Server schickt eine Fehlermeldung mit Betreff => $servername - $dienst - $messageID Im Body steht dann die Fehlermeldung. Sobald der Fehler beseitigt ist, wird eine weitere Mail mit exakt dem gleichen Betreff generiert. Hier erkennt OTRS aber komischerweise keinen Zusammenhang und macht ein neues Ticket auf.
Damit die Mail als Follow-up erkannt wird, muß sie entweder die oben genannten Header oder eine Ticketnummer im Betreff oder im Body enthalten. Ich hoffe, das hilft dir weiter. Viele Grüße Henning -- Henning Oschwald ((otrs)) :: OTRS GmbH :: Europaring 4 :: D - 94315 Straubing Fon: +49 (0) 9421 56818-0 :: Fax: +49 (0) 9421 56818-18 http://www.otrs.com/ :: Communication with success!

Das würde ich jetzt eigentlich gerne dafür nutzen, von unseren Servern generierte Meldungen automatisch zuzuordnen. Beispiel: Server schickt eine Fehlermeldung mit Betreff => $servername - $dienst - $messageID Im Body steht dann die Fehlermeldung. Sobald der Fehler beseitigt ist, wird eine weitere Mail mit exakt dem gleichen Betreff generiert. Hier erkennt OTRS aber komischerweise keinen Zusammenhang und macht ein neues Ticket auf.
Damit die Mail als Follow-up erkannt wird, muß sie entweder die oben genannten Header oder eine Ticketnummer im Betreff oder im Body enthalten.
Das lässt sich leider nicht so einfach bewerkstelligen. Unser Server kann ja, nachdem er die erste Mail (meistens eine Fehlermeldung) erstellt hat, nicht erkennen, unter welcher Ticketnummer diese Mail aufgenommen wurde. Und die Message-ID wird ja vom Mailer vergeben und ist somit auch transparent. Gibt es da keine andere Möglichkeit eine Zuordnung zu erleichtern? Denn bei ca. 2 x 100 Mails pro Tag wird das händische Matchen der Tickets schnell zu einer großen Last!

Hallo,
Quoting Dennis Mohn
Das würde ich jetzt eigentlich gerne dafür nutzen, von unseren Servern generierte Meldungen automatisch zuzuordnen. Beispiel: Server schickt eine Fehlermeldung mit Betreff => $servername - $dienst - $messageID Im Body steht dann die Fehlermeldung. Sobald der Fehler beseitigt ist, wird eine weitere Mail mit exakt dem gleichen Betreff generiert. Hier erkennt OTRS aber komischerweise keinen Zusammenhang und macht ein neues Ticket auf.
Damit die Mail als Follow-up erkannt wird, muß sie entweder die oben genannten Header oder eine Ticketnummer im Betreff oder im Body enthalten.
Das lässt sich leider nicht so einfach bewerkstelligen. Unser Server kann ja, nachdem er die erste Mail (meistens eine Fehlermeldung) erstellt hat, nicht erkennen, unter welcher Ticketnummer diese Mail aufgenommen wurde. Und die Message-ID wird ja vom Mailer vergeben und ist somit auch transparent.
Gibt es da keine andere Möglichkeit eine Zuordnung zu erleichtern? Denn bei ca. 2 x 100 Mails pro Tag wird das händische Matchen der Tickets schnell zu einer großen Last!
der oben angeführte Gedanke mit Ticketnummer im Betreff funktioniert recht gut, wenn ein eigener Filter programmiert wird. Meine Anforderung sah wie folgt aus: bei Meldungen von Adresse xyz soll nur dann ein neues Ticket generiert werden, wenn kein offenes Ticket existiert. Für den Fall, dass ein offenes Ticket existiert, verändert der Filter die Betreff-Zeile und das Ticket wird dem bestehenden Ticket als Follow-Up zugeordnet. Hierzu habe ich im Bereich Kernel::System::PostMaster::Filter einen neuen Filter implementiert, der dann unter PostMaster::PreFilterModule zugeordnet ist. Der Filter extrahiert ein möglichst aussagefähiges Kriterium aus der eMail (in meinem Fall die IP des betroffenen Host) und sucht mit diesem Kriterium in der DB nach offenen Tickets. Vielleicht kannst Du Deine Anforderung über eine vergleichbare Programmierung im Bereich eigene Postmaster-Filter lösen. Beste Grüße Marcus

Marcus Schmidt schrieb:
der oben angeführte Gedanke mit Ticketnummer im Betreff funktioniert recht gut, wenn ein eigener Filter programmiert wird.
Meine Anforderung sah wie folgt aus: bei Meldungen von Adresse xyz soll nur dann ein neues Ticket generiert werden, wenn kein offenes Ticket existiert. Für den Fall, dass ein offenes Ticket existiert, verändert der Filter die Betreff-Zeile und das Ticket wird dem bestehenden Ticket als Follow-Up zugeordnet.
Hierzu habe ich im Bereich Kernel::System::PostMaster::Filter einen neuen Filter implementiert, der dann unter PostMaster::PreFilterModule zugeordnet ist. Der Filter extrahiert ein möglichst aussagefähiges Kriterium aus der eMail (in meinem Fall die IP des betroffenen Host) und sucht mit diesem Kriterium in der DB nach offenen Tickets.
Vielleicht kannst Du Deine Anforderung über eine vergleichbare Programmierung im Bereich eigene Postmaster-Filter lösen.
Beste Grüße Marcus
Wäre es möglich, dass du mir da mal eine kleine Starthilfe (Quellcode etc.) zukommen lassen könntest? Ich bin mit PERL nicht alzu fit! Gruß Dennis

Hallo Denis,
Quoting Dennis Mohn
Wäre es möglich, dass du mir da mal eine kleine Starthilfe (Quellcode etc.) zukommen lassen könntest? Ich bin mit PERL nicht alzu fit! ...
Ich hatte meine ersten Perl Begegnungen im Bereich OTRS ;-) Meine Vorlage ist der Filter ...\Kernel\System\PostMaster\Filter\Match.pm In einer Kopie dieses Filters im sub run vor return 1 habe ich die Implementierung eingebracht. Also etwa so: # Search the message body for the regex criteria´s from the config # and extract the found value from the incoming email # for creating a sql query foreach (keys %SearchRegEx) { #Parse Mail line by line if ($Param{GetParam}->{'Body'} && $Param{GetParam}->{'Body'} =~ /$SearchRegEx{$_}/s) { # Search Criteria found in Message Body $SearchCriteria{$_} = $1; } } # %SearchCriteria is set my @Tickets = $Self->TicketSearch( SearchCriteria => {%SearchCriteria}, ); if (@Tickets == 1) { # one ticket found, so let´s set the prefix of the subject line # to the ticket number my $TicketHook = $Self->{ConfigObject}->Get('Ticket::Hook'); $Param{GetParam}->{'Subject'} = '['.$TicketHook.$Tickets[0]->{'Number'}.'] '.$Param{GetParam}->{'Subject'}; $Self->{LogObject}->Log( Priority => 'notice', Message => "Set subject to $Param{GetParam}->{'Subject'}.", ); } } return 1; Im Bereich TicketSearch kannst Du Deine Anforderungen umsetzen. In meiner Version ist der zentrale Aufruf: my @TicketIDs = $Self->{TicketObject}->TicketSearch( Result => 'ARRAY', %Param, %Search, UserID => 1, StateType => ['open', 'new'], ); %Search enthält die Kriterien und mit StateType nehme ich die gewünschte Einschränkung auf die Ticket-Status vor. Beste Grüße Marcus
participants (3)
-
Dennis Mohn
-
Henning Oschwald
-
Marcus Schmidt