Eingehende Emails nicht vom Customer automatisch internal
Eingehende Emails nicht vom Customer automatisch internal
Hallo,
wir haben eine Anforderung bei uns bekommen, die ich noch nicht geschafft habe umzusetzen.
Bei uns soll es möglich sein, wenn jemand eine Email mit dem Titel eines Tickets (mit Ticketnummer) an das System schickt, dass diese Email automatisch als "email-internal" zum Ticket angehangen wird.
Dies soll nur passieren, wenn der Absender der Email nicht der Customer ist.
Mit dem PostMaster Filter kann man das meine ich nicht machen, da ich mit einem RegExp nicht an die Customer Daten herankomme.
Hat jemand hierfür vielleicht eine Lösung?
wir haben eine Anforderung bei uns bekommen, die ich noch nicht geschafft habe umzusetzen.
Bei uns soll es möglich sein, wenn jemand eine Email mit dem Titel eines Tickets (mit Ticketnummer) an das System schickt, dass diese Email automatisch als "email-internal" zum Ticket angehangen wird.
Dies soll nur passieren, wenn der Absender der Email nicht der Customer ist.
Mit dem PostMaster Filter kann man das meine ich nicht machen, da ich mit einem RegExp nicht an die Customer Daten herankomme.
Hat jemand hierfür vielleicht eine Lösung?
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: Eingehende Emails nicht vom Customer automatisch interna
Ein Filter-Modul ist hier die Lösung. Als Grundlage kann Dir viewtopic.php?f=35&t=10824&p=42169&hili ... dul#p42169 dienen. In dem Modul musst Du halt eine Kundensuche auf Basis der Senderadresse machen und dann darauf reagieren.
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Re: Eingehende Emails nicht vom Customer automatisch interna
Hallo reneeb,
außer den paar Änderungen im OTRS habe ich mit PERL bisher noch nichts gemacht. Verstehe da noch vieles nicht.
Ich bin mir nicht sicher, ob meine Lösung zum Erfolg führt.
Vielleicht kannst du mir bisschen unter die Arme greifen.
außer den paar Änderungen im OTRS habe ich mit PERL bisher noch nichts gemacht. Verstehe da noch vieles nicht.
Ich bin mir nicht sicher, ob meine Lösung zum Erfolg führt.
Vielleicht kannst du mir bisschen unter die Arme greifen.
Code: Select all
package Kernel::System::PostMaster::Filter::SetEmailInternalIfNotCustomer;
use strict;
use warnings;
use vars qw($VERSION);
$VERSION = qw($Revision: 1.7 $) [1];
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
$Self->{Debug} = $Param{Debug} || 0;
# get needed objects
for (qw(ConfigObject LogObject DBObject MainObject TicketObject ParserObject CustomerUserObject)) {
$Self->{$_} = $Param{$_} || die "Got no $_!";
}
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
# check needed stuff
for (qw(TicketID JobConfig GetParam)) {
if ( !$Param{$_} ) {
$Self->{LogObject}->Log( Priority => 'error', Message => "Need $_!" );
return;
}
}
my %GetParam = %{ $Param{GetParam} };
# get sender email
my @EmailAddresses = $Self->{ParserObject}->SplitAddressLine( Line => $GetParam{From}, );
for (@EmailAddresses) {
my $SenderMailAdress = $Self->{ParserObject}->GetEmailAddress( Email => $_, );
}
# get all article
my @ArticleIndex = $Self->{TicketObject}->ArticleGet(
TicketID => $Param{TicketID},
DynamicFields => 0,
);
return if !@ArticleIndex;
# get latest customer article (current arrival)
my $CurrentArrivalArticle;
for my $Article ( reverse @ArticleIndex ) {
next if $Article->{SenderType} ne 'customer';
$CurrentArrivalArticle = $Article;
$ArticleID = $Article->{ArticleID};
last;
}
return 1 if !$CurrentArrivalArticle;
my %CustomerUser = $Self->{CustomerUserObject}->CustomerUserDataGet(
User => $CurrentArrivalArticle{CustomerUserID},
);
# if sender email not equal customer email
if ( $CustomerUser{UserEmail} ne $SenderMailAdress) {
# set article type to email-internal
$Self->{TicketObject}->ArticleUpdate(
ArticleID => $ArticleID,
Key => 'ArticleType',
Value => 'email-internal',
UserID => 1,
TicketID => $Param{TicketID},
);
return 1;
}
return 1;
}
1;
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: Eingehende Emails nicht vom Customer automatisch interna
Ok, grundsätzlich sieht das gar nicht so schlecht aus. Aber erstmal muss klar sein was überhaupt passieren soll (der Threadtitel ist mehrdeutig). Ich schreibe hier nur Möglichkeiten auf. Wenn etwas davon abweichend zu Deinem Vorhaben ist, dann bitte anmerken.
Annahme: Mail von person.a@company.example (A) trifft ein
Szenario 1: Mail erzeugt neues Ticket. Article ist external
Szenario 2: Mail ist Followup. Ticket wurde von person.b@company.example (B) erstellt (B != A)
-> a) A ist ein existierender Kunde ist, daher ist Artikel external.
-> b) A ist kein Kunde, daher ist Artikel internal
-> c) weil B != A (also nicht der initiale Ticketkunde ist), ist Artikel auf jeden Fall internal
Szenario 3: Mail ist Followup. person.a@company.example hat Ticket erstellt (A == A).
-> a) A ist kein Kunde, also ist Artikel internal
-> b) A ist Kunde, also ist Artikel external
Annahme: Mail von person.a@company.example (A) trifft ein
Szenario 1: Mail erzeugt neues Ticket. Article ist external
Szenario 2: Mail ist Followup. Ticket wurde von person.b@company.example (B) erstellt (B != A)
-> a) A ist ein existierender Kunde ist, daher ist Artikel external.
-> b) A ist kein Kunde, daher ist Artikel internal
-> c) weil B != A (also nicht der initiale Ticketkunde ist), ist Artikel auf jeden Fall internal
Szenario 3: Mail ist Followup. person.a@company.example hat Ticket erstellt (A == A).
-> a) A ist kein Kunde, also ist Artikel internal
-> b) A ist Kunde, also ist Artikel external
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Re: Eingehende Emails nicht vom Customer automatisch interna
Szenario 1: Mail erzeugt neues Ticket. Article ist external
Der Artikel des initialien Ticketkunden soll natürlich external.
Szenario 2: Mail ist Followup. Ticket wurde von person.b@company.example (B) erstellt (B != A)
-> a) A ist ein existierender Kunde ist, daher ist Artikel external.
-> b) A ist kein Kunde, daher ist Artikel internal
-> c) weil B != A (also nicht der initiale Ticketkunde ist), ist Artikel auf jeden Fall internal
c wäre korrekt. also nur die Mails des initialien Ticketkunden sollen external sein. Es ist egal, ob der Kunde existiert oder nicht sobald A!=B dann internal!
Szenario 3: Mail ist Followup. person.a@company.example hat Ticket erstellt (A == A).
-> a) A ist kein Kunde, also ist Artikel internal
-> b) A ist Kunde, also ist Artikel external
Hier trifft nichts zu. Es ist egal, ob der Kunde existiert oder nicht. Ssobald A != B dann internal. A==A dann external.
Hintergrund ist, dass wir Personen im Unternehmen haben, die sich den Betreff eines Tickets rauskopieren und dann an das Ticketsystem eine Antwort senden, da sie in der Annahme sind, dass ihre Email als eine Art interne Notiz an das Ticket gehängt wird. Das wird man den Leuten wohl auch nicht mehr ausreden können (kurzfristig ja.. in Zukunft wird dies aber immer wieder vorkommen). Und dann haben wir wieder den Salat, dass Informationen an den Kunden gelangen, die dieser nicht sehen darf.
Zusätzlich werden wir auch zukünftig keinen solchen Fall haben, dass wir einen externen Supporter per Weiterleitung des Tickets mit in ein Gespräch im Ticket holen.
Der Artikel des initialien Ticketkunden soll natürlich external.
Szenario 2: Mail ist Followup. Ticket wurde von person.b@company.example (B) erstellt (B != A)
-> a) A ist ein existierender Kunde ist, daher ist Artikel external.
-> b) A ist kein Kunde, daher ist Artikel internal
-> c) weil B != A (also nicht der initiale Ticketkunde ist), ist Artikel auf jeden Fall internal
c wäre korrekt. also nur die Mails des initialien Ticketkunden sollen external sein. Es ist egal, ob der Kunde existiert oder nicht sobald A!=B dann internal!
Szenario 3: Mail ist Followup. person.a@company.example hat Ticket erstellt (A == A).
-> a) A ist kein Kunde, also ist Artikel internal
-> b) A ist Kunde, also ist Artikel external
Hier trifft nichts zu. Es ist egal, ob der Kunde existiert oder nicht. Ssobald A != B dann internal. A==A dann external.
Hintergrund ist, dass wir Personen im Unternehmen haben, die sich den Betreff eines Tickets rauskopieren und dann an das Ticketsystem eine Antwort senden, da sie in der Annahme sind, dass ihre Email als eine Art interne Notiz an das Ticket gehängt wird. Das wird man den Leuten wohl auch nicht mehr ausreden können (kurzfristig ja.. in Zukunft wird dies aber immer wieder vorkommen). Und dann haben wir wieder den Salat, dass Informationen an den Kunden gelangen, die dieser nicht sehen darf.
Zusätzlich werden wir auch zukünftig keinen solchen Fall haben, dass wir einen externen Supporter per Weiterleitung des Tickets mit in ein Gespräch im Ticket holen.
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: Eingehende Emails nicht vom Customer automatisch interna
ungetestet: https://gist.github.com/reneeb/10115413
Edit: Das ist als Pre-Filter umgesetzt, so dass der Filter so in der Config eingeschaltet werden muss:
Edit: Das ist als Pre-Filter umgesetzt, so dass der Filter so in der Config eingeschaltet werden muss:
Code: Select all
$Self->{'PostMaster::PreFilterModule'}->{'010-EmailAsInternal'} = {
'Module' => 'Kernel::System::PostMaster::Filter::Invoices'
};
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Re: Eingehende Emails nicht vom Customer automatisch interna
Vielen Dank reneeb!
Zwei kleine Fehlerchen waren noch drinnen.
Hier der funktionierende Code:
In der Config:
Zwei kleine Fehlerchen waren noch drinnen.
Hier der funktionierende Code:
Code: Select all
package Kernel::System::PostMaster::Filter::SetEmailInternalIfNotCustomer;
use strict;
use warnings;
use vars qw($VERSION);
$VERSION = qw($Revision: 1.7 $) [1];
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
$Self->{Debug} = $Param{Debug} || 0;
# get needed objects
for (qw(ConfigObject LogObject DBObject MainObject TicketObject ParserObject)) {
$Self->{$_} = $Param{$_} || die "Got no $_!";
}
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
# check needed stuff
for (qw(JobConfig GetParam)) {
if ( !$Param{$_} ) {
$Self->{LogObject}->Log( Priority => 'error', Message => "Need $_!" );
return;
}
}
# do not change anything when a new ticket is going to be created
return 1 if !$Param{TicketID};
# get first article of the existing ticket
my %FirstArticle = $Self->{TicketObject}->ArticleFirstArticle(
TicketID => $Param{TicketID},
UserID => 1,
);
my @CustomerAddresses = $Self->{ParserObject}->SplitAddressLine( Line => $FirstArticle{From} );
my %CustomerMailAddresses = map{
$Self->{ParserObject}->GetEmailAddress( Email => $_ ) => 1;
}@CustomerAddresses;
my %GetParam = %{ $Param{GetParam} };
# get sender email
my @EmailAddresses = $Self->{ParserObject}->SplitAddressLine( Line => $GetParam{From}, );
for (@EmailAddresses) {
my $SenderMailAddress = $Self->{ParserObject}->GetEmailAddress( Email => $_, );
if ( $CustomerMailAddresses{$SenderMailAddress} ) {
$Param{GetParam}->{'X-OTRS-FollowUp-ArticleType'} = 'email-internal';
last;
}
}
return 1;
}
1;
Code: Select all
$Self->{'PostMaster::PreFilterModule'}->{'010-SetEmailInternalIfNotCustomer'} = {
'Module' => 'Kernel::System::PostMaster::Filter::SetEmailInternalIfNotCustomer'
};
Re: Eingehende Emails nicht vom Customer automatisch internal
Ist das in der 4er Version so noch aktuell?
LIVE: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
TEST: OTRS 5.0.14 || Debian || MySQL/LDAP
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: Eingehende Emails nicht vom Customer automatisch internal
Für OTRS >= 4 (ungetestet):
Code: Select all
package Kernel::System::PostMaster::Filter::SetEmailInternalIfNotCustomer;
use strict;
use warnings;
use Kernel::System::EmailParser;
our @ObjectDependencies = qw(
Kernel::System::Log
Kernel::System::Ticket
);
sub new {
my ( $Type, %Param ) = @_;
# allocate new hash for object
my $Self = {};
bless( $Self, $Type );
$Self->{Debug} = $Param{Debug} || 0;
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
my $LogObject = $Kernel::OM->Get('Kernel::System::Log');
my $TicketObject = $Kernel::OM->Get('Kernel::System::Ticket');
my $ParserObject = Kernel::System::EmailParser->new(
Mode => 'Standalone',
);
# check needed stuff
for (qw(JobConfig GetParam)) {
if ( !$Param{$_} ) {
$LogObject->Log( Priority => 'error', Message => "Need $_!" );
return;
}
}
# do not change anything when a new ticket is going to be created
return 1 if !$Param{TicketID};
# get first article of the existing ticket
my %FirstArticle = $TicketObject->ArticleFirstArticle(
TicketID => $Param{TicketID},
UserID => 1,
);
my @CustomerAddresses = $ParserObject->SplitAddressLine( Line => $FirstArticle{From} );
my %CustomerMailAddresses = map{
$ParserObject->GetEmailAddress( Email => $_ ) => 1;
}@CustomerAddresses;
my %GetParam = %{ $Param{GetParam} };
# get sender email
my @EmailAddresses = $ParserObject->SplitAddressLine( Line => $GetParam{From}, );
for (@EmailAddresses) {
my $SenderMailAddress = $ParserObject->GetEmailAddress( Email => $_, );
if ( $CustomerMailAddresses{$SenderMailAddress} ) {
$Param{GetParam}->{'X-OTRS-FollowUp-ArticleType'} = 'email-internal';
last;
}
}
return 1;
}
1;
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de