[rt-users] Tickets from other Ticketsystem

Eierschmalz, Bernhard Bernhard.Eierschmalz at scheppach.com
Mon Sep 14 18:51:13 EDT 2015


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 number.

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
	    $self->TicketObj->MergeInto($id);
	}


best regards,
Bernhard



-----Ursprüngliche Nachricht-----
Von: rt-users [mailto:rt-users-bounces at lists.bestpractical.com] Im Auftrag von Eierschmalz, Bernhard
Gesendet: Montag, 11. Mai 2015 10:44
An: rt-users at lists.bestpractical.com
Cc: falcone at 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 number
- 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
Bernhard


-----Ursprüngliche Nachricht-----
Von: rt-users [mailto:rt-users-bounces at lists.bestpractical.com] Im Auftrag von Kevin Falcone
Gesendet: Mittwoch, 3. September 2014 22:34
An: rt-users at 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 it.
The plugin never allows the second ticket to be created.

-kevin

> 
> 
> -----Ursprüngliche Nachricht-----
> Von: rt-users [mailto:rt-users-bounces at lists.bestpractical.com] Im 
> Auftrag von Kevin Falcone
> Gesendet: Freitag, 22. August 2014 16:01
> An: rt-users at 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


More information about the rt-users mailing list