[rt-users] Adding new users and CC users to tickets

Jason A. Smith smithj4 at bnl.gov
Fri Jul 13 08:19:08 EDT 2007


On Fri, 2007-07-13 at 00:11 -0700, Shiv Sikand wrote:
> Hello,
> 
> We are using RT 3.4.5.
> 
> I would be grateful for the list's help on the following:
> 
> 
> We have the following scenario:
> 
> 1) User A opens a ticket via email. We reply via email and User A
> forwards the message via email to User B.
> 
> User B now replies to the ticket using our rt address and the
> correspondence is added to the ticket.
> 
> But, user B does not receive updates to the ticket when we reply via email.
> 
> How can we set it up such that user B is added automatically as an
> additional requestor or CC ?


We do it with a custom global scrip, we called AddWatchersOnCorrespond.
Besides the sender, it will also add any additional people that the
correspondence was sent to.  We also have a "General" queue and
associated group which includes all admins, and if the correspondence
includes one of these admins who is not already watching the ticket,
then they are added as an AdminCc instead of a Cc.


Condition: On Correspond
Action: User Defined


Custom action preparation code:
return 1;


Custom action cleanup code:
# Get some info:
my $scrip = 'Scrip:AddWatchersOnCorrespond';
my $Transaction = $self->TransactionObj;
my $EmailAddr = $self->TransactionObj->CreatorObj->EmailAddress;
my $Queue = $self->TicketObj->QueueObj;
my $Ticket = $self->TicketObj;
my $Id = $self->TicketObj->id;

# Extract a list of people associated with this transaction:
#  - including the transaction creator, and if it is an email, the sender and recipients of that email message.
my @People = ($EmailAddr);
foreach my $h (qw(From To Cc)) {
  my $header = $Transaction->Attachments->First->GetHeader($h);
  my @addr = Mail::Address->parse($header);
  foreach my $addrobj (@addr) {
    my $addr = lc $RT::Nobody->UserObj->CanonicalizeEmailAddress($addrobj->address);
    # Ignore the specific addresses for this queue:
    next if lc $Queue->CorrespondAddress eq $addr or lc $Queue->CommentAddress eq $addr;
    # Ignore any email address that looks like one for any of our queues:
    next if RT::EmailParser::IsRTAddress('', $addr);
    $RT::Logger->debug("$scrip: Ticket #$Id correspondence contains header - $h: $addr");
    push @People, $addr;
  }
}

# Lookup the 'experts' (general) group to use below:
my $Experts = RT::Group->new($self->CurrentUser);
$Experts->LoadUserDefinedGroup('general');

# Now check if each user is already watching the ticket or queue:
foreach my $addr (@People) {
  my $User = RT::User->new($RT::SystemUser);
  $User->LoadByEmail($addr);
  my $Name = $User->Name;
  my $Principal = $User->PrincipalId if $User->Id;
  if (not ($Queue->IsWatcher(Type => 'Cc', PrincipalId => $Principal) or
           $Queue->IsWatcher(Type => 'AdminCc', PrincipalId => $Principal) or
           $Ticket->IsWatcher(Type => 'Cc', PrincipalId => $Principal) or
           $Ticket->IsWatcher(Type => 'AdminCc', PrincipalId => $Principal) or
           $Ticket->IsWatcher(Type => 'Requestor', PrincipalId => $Principal)
          )) {
    # If the user is a member of the experts group, then add them as an AdminCc, otherwise as a normal Cc:
    my $type = $Experts->HasMember($User->PrincipalObj) ? 'AdminCc' : 'Cc';
    # Add the new watcher now and check for errors:
    my ($ret, $msg) = $Ticket->AddWatcher(Type  => $type,
                                          Email => $addr,
                                          PrincipalId => $Principal,);
    if ($ret) {
      $RT::Logger->info("$scrip: New $type watcher added to ticket #$Id: $addr (#$Principal)");
    } else {
      $RT::Logger->error("$scrip: Failed to add new $type watcher to ticket #$Id: $addr (#$Principal) - $msg");
    }
  }
}

return 1;



> 2) User A opens a ticket via email and specifies a bunch of CC's in the
> email.
> 
> How can I add all email CC fields as CC's to the ticket ?

Look in the RT_SiteConfig.pm file for this option:

$ParseNewMessageForTicketCcs

and don't forget to set this option as well:

$RTAddressRegexp


~Jason


> Thanks,
> Shiv
> _______________________________________________
> http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users
> 
> Community help: http://wiki.bestpractical.com
> Commercial support: sales at bestpractical.com
> 
> 
> Discover RT's hidden secrets with RT Essentials from O'Reilly Media. 
> Buy a copy at http://rtbook.bestpractical.com
> 



More information about the rt-users mailing list