[rt-users] take and resolve actions via email

Gene LeDuc gleduc at mail.sdsu.edu
Tue Nov 27 17:13:22 EST 2007


I think you could make these changes in the scrip:

{ ### True if e-mail contains 'ok' - sets owner, resolves ticket
     my $Transaction = $self->TransactionObj;
     my $CreatorMail = $Transaction->CreatorObj->EmailAddress();
     my $val = $Transaction->Type eq 'Correspond'
            && $CreatorIdMail =~ /\@foo\.com/i
            && $Transaction->Content  =~ /\bok\s/i;
     return $val;
}


At 01:37 PM 11/27/2007, Mark Fuller wrote:
>So to be a pain but ran into an issue after setting up and testing.
>
> >Custom condition:
> >{ ### True if e-mail contains 'ok' - sets owner, resolves ticket
> >    my $Transaction = $self->TransactionObj;
> >    my $CreatorId = $Transaction->CreatorObj->Id;
> >    my $Queue = $self->TicketObj->QueueObj;
> >    my $val = $Transaction->Type eq 'Correspond'
> >           && $Queue->IsAdminCc($CreatorId)
> >           && $Transaction->Content  =~ /\bok\s/i;
> >    return $val;
> >}
>
>I have a group of level 1 techs that do not have a unique logon since it 
>is an ever changing group of folks. is there a way that I can do this 
>based on the domain name of there email and set it to a specified user?
>
>
>something like
>
><mailto:%@foo.com>%@foo.com = creatorid 21
>
>Also I found a way at least for my setup to get it to not send emails to 
>requestors. We send the message to the comment address and I changed it to be
>
>
>Custom condition:
>{ ### True if e-mail contains 'ok' - sets owner, resolves ticket
>     my $Transaction = $self->TransactionObj;
>     my $CreatorId = $Transaction->CreatorObj->Id;
>     my $Queue = $self->TicketObj->QueueObj;
>     my $val = $Transaction->Type eq 'Comment'
>            && $Queue->IsAdminCc($CreatorId)
>            && $Transaction->Content  =~ /\bok\s/i;
>     return $val;
>}
>
>and that works perfect for my level 2 and 3 support groups
>
>
>
>Mark Fuller<?xml:namespace prefix = o ns = 
>"urn:schemas-microsoft-com:office:office" />
>
>BandTel Engineering
>
>603-528-6538 Option 2
>
>603-528-6937 FAX
>
>
>-----Original Message-----
>From: Gene LeDuc [mailto:gleduc at mail.sdsu.edu]
>Sent: Tuesday, November 27, 2007 3:50 PM
>To: Mark Fuller; Asrai khn
>Cc: rt-users at lists.bestpractical.com
>Subject: RE: [rt-users] take and resolve actions via email
>
>Hi Mark (and Askar),
>
>After reviewing my previous advice, I've changed my mind.  This should be 
>a cleaner solution.
>
>1.  Don't mess with your templates.
>
>2.  I don't know whether _Set works with custom fields, so I'd use the 
>following to set your CF in the scrip I sent you.  The scrip should 
>probably be a queue scrip, not global, unless you want to do this for all 
>your queues:
>set_custom('noemail', "yes", 0);
>### Sets custom field value
>### Usage: set_custom($field_name, $field_value, $record_transaction)
>sub set_custom {
>   my ($CFName, $CFValue, $record) = @_;
>   $record = $record ? 1 : 0;
>   my $cf = RT::CustomField->new($RT::SystemUser);
>   my ($id,$msg) = $cf->LoadByName(Name=>$CFName,);
>   if (!$id) {
>     $RT::Logger->debug("Error loading custom field '$CFName'");
>     return undef;
>   }
>   ($id, $msg) = $Ticket->AddCustomFieldValue
>      (Field=>$cf, Value=>$CFValue, RecordTransaction=>$record);
>}
>
>3.  Modify your Global Scrips #6 ("On Correspond Notify Requestors and Ccs 
>with template Correspondence") and #7 ("On Correspond Notify Other 
>Recipients with template Correspondence") and
>   a) change the Condition to User Defined; and
>   b) put the following code in the Custom condition area of both scrips:
>{ ### True when transaction is incoming email and CF 'noemail' is not set
>   my $Transaction = $self->TransactionObj;
>   my $Ticket = $self->TicketObj;
>   my $val = $Transaction->Type eq "Correspond"
>       && ! get_custom("noemail");
>   return $val;
>
>   ### Returns custom field value
>   ### get_custom($field_name)
>   sub get_custom {
>     my $target_name = $_[0];
>     my $val = $Ticket->FirstCustomFieldValue($target_name);
>     return $val if defined $val;
>     return undef;
>   }
>}
>
>So you should have 2 scenarios now with incoming email.
>1.  Email is from AdminCc and contains trigger word(s) in first line.
>   a) Your new scrip fires and sets the CF 'noemail' to 'yes', Owner to 
> email sender, Status to resolved
>   b) Global scrip #5 ("On Correspond Notify AdminCcs with template Admin 
> Correspondence") fires and sends mail to AdminCcs
>   c) Global scrips #6 and #7 do not fire because CF 'noemail' is set, so 
> no mail is sent to anyone else
>
>2.  Email is not from AdminCc or does not contain trigger word(s) in first 
>line:
>   a) Your new scrip does not fire because both conditions are not met, so 
> CF 'noemail' is not set
>   b) Global scrip #5 fires
>   c) Global scrips #6 and #7 fire because CF 'noemail' either doesn't 
> exist or is not set
>
>Have fun!
>
>Regards,
>Gene
>
>At 10:06 AM 11/27/2007, Mark Fuller wrote:
>>Ok I am very new to this so I added
>>
>>
>>  $Ticket->_Set(Field => 'noemail', Value => 'yes', RecordTransaction => 0);
>>
>>Now how do I tell the correspondence to look for that. And also if I change
>>the main script like that and I have the custom field set how do I get the
>>filed to be blank or no so that all future correspondence will work.
>>
>>Again I am new to RT but we love it and are expanding it's use. I thought
>>about command by email but the CTO is concerned as am I with security and
>>this seems the safer way. Also we do want to comment via email
>>
>>Mark Fuller
>>
>>BandTel Engineering
>>
>>603-528-6538 Option 2
>>
>>603-528-6937 FAX
>>
>>-----Original Message-----
>>From: Gene LeDuc [ mailto:gleduc at mail.sdsu.edu]
>>Sent: Monday, November 26, 2007 4:27 PM
>>To: Mark Fuller
>>Cc: rt-users at lists.bestpractical.com
>>Subject: RE: [rt-users] take and resolve actions via email
>>
>>Hi Mark,
>>
>>I'm not sure how you could change a correspondence transaction to a
>>comment.  However...
>>
>>If I wanted to just change the way that email is sent (only AdminCcs
>>getting an email), I'd add a custom field to the queue called
>>"NoCorrespond" and then modify the Correspondence template used for the "On
>>Correspond" scrip to include a check at the beginning to see if there is a
>>"NoCorrespond" field and whether it has anything in it.  If so, exit the
>>template and don't send the email, otherwise proceed as usual.  Then I'd
>>have the scrip I gave you put something into the "NoCorrespond" custom
>>field at the same time that it sets the owner and status.  It's kind of
>>clunky and there are probably more elegant solutions, but I think it would
>>work.  You might also want to make another scrip to send the mail to the
>>AdminCc when the "NoCorrespond" field gets something assigned to it (by
>>your other scrip), something like (I haven't tried this scrip, so it may
>>need work):
>>
>>Condition: User Defined
>>Action: Notify AdminCcs as Comment
>>Template: Global template: Admin Comment
>>Custom condtion:
>>{ ### True on state change to "NoCorrespond"
>>    my $Transaction = $self->TransactionObj;
>>    my $val = $Transaction->Type eq "CustomField"
>>        && $Transaction->Field eq "NoCorrespond"
>>        ;
>>    return $val;
>>}
>>
>>Good luck!
>>Gene
>>
>>At 12:00 PM 11/26/2007, Mark Fuller wrote:
>> >Thanks Gene it works great but.. Is there a way to make it a comment so
>> >only admin staff gets it
>> >
>> >Mark Fuller
>> >
>> >-----Original Message-----
>> >From: Gene LeDuc [ mailto:gleduc at mail.sdsu.edu]
>> >Sent: Monday, November 26, 2007 12:26 PM
>> >To: Mark Fuller
>> >Cc: rt-users at lists.bestpractical.com
>> >Subject: RE: [rt-users] take and resolve actions via email
>> >
>> >
>> >Hi Mark,
>> >
>> >Here's the scrip we use to resolve tickets via e-mail.
>> >
>> >In order to resolve a ticket this way, the e-mail must be from an
>> >AdminCc for that queue and it must contain the word "Ok" on the first
>> >line.
>> >
>> >Description: Resolved by e-mail
>> >Condition: User Defined
>> >Action: User Defined
>> >Template: Global template: Blank
>> >Stage: TransactionCreate
>> >
>> >Custom condition:
>> >{ ### True if e-mail contains 'ok' - sets owner, resolves ticket
>> >    my $Transaction = $self->TransactionObj;
>> >    my $CreatorId = $Transaction->CreatorObj->Id;
>> >    my $Queue = $self->TicketObj->QueueObj;
>> >    my $val = $Transaction->Type eq 'Correspond'
>> >           && $Queue->IsAdminCc($CreatorId)
>> >           && $Transaction->Content  =~ /\bok\s/i;
>> >    return $val;
>> >}
>> >
>> >Custom action prep code:
>> >return 1;
>> >
>> >Custom action cleanup code:
>> >### Set Set owner to e-mail sender, status to 'resolved'
>> >my $Ticket = $self->TicketObj;
>> >my $Transaction = $self->TransactionObj;
>> >my $CreatorId = $Transaction->CreatorObj->Id;
>> >$Ticket->_Set(Field=>'Owner', Value=>$CreatorId, RecordTransaction=>0);
>> >$Ticket->_Set(Field => 'Status', Value => 'resolved', RecordTransaction
>> >=> 0);
>> >
>> >The 2 lines at the end of the cleanup code could also be:
>> >      $Ticket->SetOwner($CreatorId);
>> >      $Ticket->SetStatus('resolved');
>> >but I use _Set instead because I don't want to fire off any more
>> >transactions when I resolve tickets this way.
>> >
>> >Regards,
>> >Gene
>
>
>--
>Gene LeDuc, GSEC
>Security Analyst
>San Diego State University


-- 
Gene LeDuc, GSEC
Security Analyst
San Diego State University 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bestpractical.com/pipermail/rt-users/attachments/20071127/978d1c9e/attachment.htm>


More information about the rt-users mailing list