Hello Kevin,

I found a solution on my own now - maybe interesting for somebody.
Quick discription:
1. I recognize the external ticket number with regex from subject and write 
this number to a Custom Field
2. search for existing tickets with same value in same Custom Field and merge 
the tickets

Now how I did: 

Step 1: create a custom field for all queues used for the external ticket 

Step 2: Create the following Scrip:

CustomIsApplicableCode: (at this part we check with if a ticket is created from 
a valid address with a valid regex-syntax for external ticket system)
        # only on creating tickets
        return 0 unless $self->TransactionObj->Type eq "Create";

        my $subject = $self->TransactionObj->Subject;
        return 0 unless defined($subject);

        # mail-addresses from other ticket systems
        my @ticketsender = ('...'); #<-- this is an array of addresses or parts 
of addresses wich are recognized for other ticketsystem-verification.

        my $ticketRequestor = lc($self->TicketObj->RequestorAddresses);

        if ( $subject =~ / \[plus ticket\d{8}\]/) #<-- regex-code for other 
external ticket numbers in message subject
          foreach (@ticketsender)
             if ($ticketRequestor =~ /$_/) #<-- check if sender is permitted
               return 1;
        return 0; 

CustomPrepareCode (at this part we write the external ticket number to the 
custom field)
        my $subject = $self->TransactionObj->Subject;

        $subject =~ s/.*\[plus ticket//;
        my $cfval = "PLUS".substr($subject,0,8); # <-- cfval contains the Value 
number of the external ticket plus some first letters to identify - this is to 
be able to add more external ticket numbers

        # write to CustomField
        my $cf = RT::CustomField->new ( $RT::SystemUser );
        $cf->Load('21'); #<-- ID of the custom field from step 1
        $self->TicketObj->AddCustomFieldValue ( Field => $cf, Value => $cfval );
        return 1;

CustomCommitCode (at this part we search for already existing tickets with same 
CF and merge them)

        my $extnr = $self->TicketObj->FirstCustomFieldValue('21'); #<-- load 
the custom field value

        # find all the ticket  to the reference number from ticketsystem
        my $search = new RT::Tickets(RT->SystemUser);
        $search->LimitCustomField(CUSTOMFIELD => '21', OPERATOR => '=', VALUE 
=> $extnr);

        while (my $ticket = $search->Next)
            # ignore if finding the new ticket itself
            next if $self->TicketObj->Id == $ticket->Id;

            my $id = $ticket->Id;

            # Logging
            $RT::Logger->info("Merging ticket " . $self->TicketObj->Id . " into 
$id because of Reference number $extnr match.");

            # merge Tickets

best regards,

-----Ursprüngliche Nachricht-----
Von: rt-users [mailto:rt-users-boun...@lists.bestpractical.com] Im Auftrag von 
Eierschmalz, Bernhard
Gesendet: Montag, 11. Mai 2015 10:44
An: rt-users@lists.bestpractical.com
Cc: falc...@bestpractical.com
Betreff: Re: [rt-users] Tickets from other Ticketsystem

Hello Kevin,

I know this is a very old mail below. I didn't install the plugin in this 
times, because it was not so urgent.
But now I have the same problem again.

I read about the extension you mentioned. But I think there is one problem.
What I understood about the extension is:
- when there is a new mail to an existing resolved ticket with defined ticket 
- open a new ticket

What I need is the following
- when there is a new mail to a new ticket AND the subject is starting with 
defined syntax
- check if there is any ticket with almost the same subject
- attach the new mail to the existing ticket instead of opening a new one.

So the difference is that the extension searches for a ticket with defined 
number - what I need is to search for any existing ticket with a defined syntax.

Are you sure the extension would work in my case?
Can you tell me how to use it?

Best regards

-----Ursprüngliche Nachricht-----
Von: rt-users [mailto:rt-users-boun...@lists.bestpractical.com] Im Auftrag von 
Kevin Falcone
Gesendet: Mittwoch, 3. September 2014 22:34
An: rt-users@lists.bestpractical.com
Betreff: Re: [rt-users] Tickets from other Ticketsystem

On Mon, Aug 25, 2014 at 08:27:00AM +0000, Eierschmalz, Bernhard wrote:
> Hello Kevin,
> I already thought about creating a scrip like
> Condition:
> Transaction obj = "create"
> Subject contains "[plus ticket#"
> Action:
> Search tickets with same plus-ticket no.
> If one exists, combine
> What do you think about this solution? Or would you prefer the strongly 
> modified plugin?

Scrip runs after the second ticket is created and sends email.  You then Merge 
The plugin never allows the second ticket to be created.


> -----Ursprüngliche Nachricht-----
> Von: rt-users [mailto:rt-users-boun...@lists.bestpractical.com] Im 
> Auftrag von Kevin Falcone
> Gesendet: Freitag, 22. August 2014 16:01
> An: rt-users@lists.bestpractical.com
> Betreff: Re: [rt-users] Tickets from other Ticketsystem
> On Tue, Aug 19, 2014 at 05:36:04AM +0000, Eierschmalz, Bernhard wrote:
> > we have one customer using its own ticket system. This customer 
> > sends us mails with an information about his own ticket in the subject.
> > 
> > i.e. [PLUS.DE Ticket#PD077994]
> > 
> > sometimes when this customer answers, he doesn’t send our ticket 
> > number in subject, so he opens a new ticket.
> > 
> > Is it possible to identify a mail by this PLUS ticket number and add 
> > to our already opened ticket instead of open a new one?
> Look at the code in
> https://github.com/bestpractical/rt-extension-repliestoresolved
> The function it hooks can be used to lie to RT and return a ticket id of the 
> existing ticket (as opposed to what this extension does, which is suppress 
> the ticket id so that a new ticket will be created).
> -kevin
> --
> RT Training - Boston, September 9-10
> http://bestpractical.com/training

Reply via email to