[rt-users] solution for auto-setting values on new tickets

Andrew Libby alibby at tangeis.com
Tue Aug 19 22:05:35 EDT 2008


Thanks Emmanuel,  This is a great help!

I'm off and running.

Thanks again.

Andy


Emmanuel Lacour wrote:
> On Tue, Aug 19, 2008 at 11:38:35AM -0400, Andrew Libby wrote:
>> Greetings,
>>
>> I'm using RT, and use a variety of custom fields.
>> I'd like to have the queue, and some default values for
>> custom fields set on tickets "automagically".  The ideal
>> solution for me would be to set the queue based on a lookup
>> in some data that relates queues to email domains, or
>> whole email addresses.  Then custom fields like customer,
>> billing rate, owner, etc could be set at the same time.
>>
>> I seem to be spending more and more time maintaining these
>> fields.  I'd love a solution to this issue.  I've 
>> experimented with scrips, but never really got it down.
>>
>> I imagine others have dealt with the likes of this before?
>>
>> Most of our tickets are created via the mail gateway, so 
>> either a replacement for, or enhancement to that would be 
>> ideal.
>>
> 
> You just have to write an RT scrip that do that.
> 
> For _example_, here, all emails comes to a queue named "support", we have a
> scrip like this which lookup the requestor in our customer DB and move the
> ticket to the right queue (one queue per customer here, but this can be also a
> customfield). Hope this can help you writting the correct scrips for your
> setup.
> 
> Condition: On Create
> Action: User defined
> Template: empty
> Stage: TransactionCreate
> 
> Action:
> ----------------
> # Creator
> my $Actor = $self->TransactionObj->Creator;
> # Not for RT_SystemUser
> return 1 if $Actor == $RT::SystemUser->id;
> 
> # Creator Email
> my $CurrentUser = RT::CurrentUser->new();
> $CurrentUser->Load($Actor);
> my $email = $CurrentUser->EmailAddress;
> $RT::Logger->info("AutoQueue: Creator: $email");
> 
> 
> # Queue
> my $Queue = $self->TicketObj->QueueObj;
> 
> # Only for queue support
> return 1 if ($Queue->Name ne 'support');
> 
> # Get the customer
> my $newqueue;
> use Net::LDAP;
> use Net::LDAP::LDIF;
> my $binddn = "";
> my $bindpw = "";
> my $base = "ou=customers,o=foo-bar";
> my $host = "ldaps://ldap.foo-bar.fr/";
> $RT::Logger->info("AutoQueue: Ldap connect");
> my $ldap = Net::LDAP->new($host);
> $RT::Logger->info("AutoQueue: Ldap bind");
> $ldap->bind("$binddn", password => "$bindpw", version => 3) if ($binddn && $bindpw);
> 
> $RT::Logger->info("AutoQueue: Ldap search");
> my $mesg = $ldap->search(base => $base , filter => "(&(objectclass=eecustomerpeople)(mail=$email))", attrs => [ 'dn' ]);
> # Check we get only one customer
> if ($mesg->count == 1) {
>     my $entry = $mesg->entry(0);
>     $newqueue = $entry->dn();
>     $newqueue =~ s/^.*,uid=([^,]+),ou=customers,o=foo-bar/$1/;
>     $RT::Logger->info("AutoQueue: Newqueue: $newqueue");
>     $ldap->unbind;
> } else {
>     $RT::Logger->info("AutoQueue: Ldap disconnect");
>     $ldap->unbind;
>     return 1;
> }
> 
> # Change queue
> if ($newqueue) {
>         $RT::Logger->info("AutoQueue: Queue change");
>         my ($status, $msg) = $self->TicketObj->SetQueue($newqueue);
>         unless ($status) {
>             $RT::Logger->warning("AutoQueue: unable to set new queue");
>              return undef;
>         }
> }
> 
> return 1;
> 
> -----------
> 

-- 

===============================================
Tangeis, LLC
Andrew Libby
alibby at tangeis.com
www.tangeis.com
610-761-1991
===============================================




More information about the rt-users mailing list