[How-To] Queue <-> Services

User avatar
miguelmz
OTRS superhero
Posts: 351
Joined: 17 Nov 2011, 17:46
OTRS Version?: 3.0.11
Real Name: Miguel
Company: SIA
Location: Madrid, Spain.

[How-To] Queue <-> Services

Postby miguelmz » 30 Oct 2012, 19:48

Buenas a todos,

Últimamente hay muchos post acerca de este tema, las distintas posibilidades existentes para realizar una asignación de servicios con sus SLAS por colas en vez de usar el método estandar de SLA <-> Cola o Customers <-> Services <-> SLA.


Introducción

Las ventajas de asignar servicios a colas es principalmente la posibilidad de tener una cola con múltiples cálculos de SLA. De forma estandar, OTRS solo permite asignar los Servicios con usuarios registrados y estos podrian abrir sus tickets con los Servicios y SLA correspondientes asignados en cualquier Cola.

Existen numerosas formas de realizarlo, la mas común es por medio de las ACL pero este tipo de configuración requiere recargar apache haciendo la operación inviable para un entorno de administración delegado ya que requiere hacerlo "a mano" dentro de la propia maquina.
Ronaldo Richieri desarrollo un modulo que permite realizar las construcciones de ACL de forma dinámica, abstrayendo esta administración al frontal del OTRS (ver aqui ). Pero este modulo sigue teniendo el hándicap de la recarga del servidor web, por lo que no era inmediato o era necesario forzar al servidor a recargarse con un reload.

En este tutorial os voy a presentar mi modificación para llevar a cabo esta asignación por código, para ello empleare gran parte del modulo desarrollado por Ronaldo para generar la interfaz administrativa. Este desarrollo está sobre versiones 3.0.x, no está probado en 3.1 pero por lo que he visto las funciones a usar utilizan los mismos parámetros y es posible usarlo con posibles ligeras modificaciones en Ticket.pm.

Con esta modificacion, cualquier usuario con permiso de escritura sobre una Cola que tenga asignado un Servicio podría crear un ticket concreto con los SLA disponibles que los administradores le proporcionen para esa Cola exclusivamente. Con esto, tambien se resuelven los problemas mencionados, ya que no se basa en si el usuario esta registrado o no, si tiene acceso puede abrir el ticket con el SLA; y si el usuario dispusiera de diferentes SLA de otros asuntos que no corresponden a esa cola, no podran asignar mas que los SLA que nosotros asociemos por la herramienta.


Ficheros modificados

- otrs/Kernel/System/Ticket.pm
- otrs/Kernel/Modules/AgentTicketPhone.pm
- otrs/Kernel/Modules/AgentTicketEmail.pm


Ficheros añadidos

- otrs/Kernel/Config/Files/QueueServices.xml
- otrs/Kernel/Modules/AdminQueueServices.pm
- otrs/Kernel/Output/HTML/Standard/AdminQueueServices.dtl


Funcionamiento

El funcionamiento interno del modulo es muy simple, el entorno grafico de asignaciones recrea una simulación parecida al de Customer <-> Services. Las asignaciones son guardadas bajo el xml global de OTRS (ZZZAuto.pm).
Despues, con los cambios efectuados sobre AgentTicketPhone (New Phone Ticket) , AgentTicketEmail (New Email Ticket) y ticket.pm hemos enlazado en la función del desplegable del servicio los datos guardados en el xml. Cada vez que se selecciona una Cola en la creación del Ticket, OTRS preguntara al xml si existen asignaciones:
- De no existir, continuara su flujo normal
- De existir, rellenara los Servicios asignados y continuara el flujo normal. Los SLAS serán posteriormente cargados normalmente cuando se seleccione su Servicio.

En este tutorial solo he expuesto una aplicación practica para creaciones del Ticket, pero es extensible a mas operaciones como el botón de Prioridad o frontales de cliente. Todos ellos tiran de la función TicketServiceList de Ticket.pm que es llamada a través de un función GetServices.pm. Solo es necesario buscar para cada tipo de acción su modulo correspondiente y modificar el GetServices que disponga como el expuesto en AgentTicketPhone.


Instalacion del modulo

Para instalar el modulo hay que dirigirse al frontal de OTRS y acceder al Gestor de paquetes situado en la pestaña de Administración.
Una vez en ella, aparecerá un panel a la izquierda donde podremos buscar el fichero opm (modulo a instalar) e instalarlo.
Siga los pasos detallados.

Cuando haya instalado el modulo vera que en la pestaña Administracion dispone de un panel adicional llamado Queue <-> Services, este panel realiza las asignaciones de Servicios y Colas de forma grafica, pero para que funcione completamente es necesario modificar 3 ficheros addicionales.
- otrs/Kernel/System/Ticket.pm
- otrs/Kernel/Modules/AgentTicketPhone.pm
- otrs/Kernel/Modules/AgentTicketEmail.pm
La razón de la modificación posterior es que son ficheros claves que varían según si se tiene o no instalado el ITSM, antes de la modificación asegúrese que dispone de una copia de los ficheros.


Ticket.pm

Situese sobre la función TicketServiceList y sustitúyala por lo siguiente:

Code: Select all

sub TicketServiceList {
    my ( $Self, %Param ) = @_;

    # check needed stuff
    if ( !$Param{UserID} && !$Param{CustomerUserID} ) {
        $Self->{LogObject}->Log(
            Priority => 'error',
            Message  => 'Need UserID, CustomerUserID or UserID and CustomerUserID is needed!',
        );
        return;
    }

    # check needed stuff
    if ( !$Param{QueueID} && !$Param{TicketID} ) {
        $Self->{LogObject}->Log(
            Priority => 'error',
            Message  => 'Need QueueID or TicketID!',
        );
        return;
    }
    my %Services;


#    if ( !$Param{CustomerUserID} ) {
#        %Services = $Self->{ServiceObject}->ServiceList( UserID => 1, );
#    }
#    else {
    if ( $Param{CustomerUserID} )  {
        %Services = $Self->{ServiceObject}->CustomerUserServiceMemberList(
            Result            => 'HASH',
            CustomerUserLogin => $Param{CustomerUserID},
            UserID            => 1,
        );
    }

    # workflow
    my $ACL = $Self->TicketAcl(
        %Param,
        ReturnType    => 'Ticket',
        ReturnSubType => 'Service',
        Data          => \%Services,
    );

### Queue <-> Services


    if ( $Self->{ConfigObject}->Get('QueueService::QSActive') ) {
        my $recorrido;
        my $qs_hash=$Self->{ConfigObject}->Get('QueueService::QueueServicesName');
        my %QueueServices = %{$qs_hash};
        my @Items;
        my $Queue;
        my $aux;
        for my $Queue ( keys %QueueServices ) {
                @Items = split /;/, $QueueServices{$Queue};
                if ( $Queue eq $Param{QueueID} )
                {
                        %Services = ();
                        foreach $recorrido (@Items)
                        {
                                $Self->{DBObject}->Prepare(
                                        SQL   => 'select id from service WHERE name = ?',
                                        Bind  => [ \$recorrido, ],
                                );
                                while ( my @Row = $Self->{DBObject}->FetchrowArray() ) {
                                        $aux = $Row[0];
                                }
                                $Services{$aux} = $recorrido;
                        }
                }
        }
    }

    return $Self->TicketAclData() if $ACL;

    return %Services;
}


Esta modificación permite realizar una búsqueda adicional cuando se selecciona una cola en la que sustituirá cualquier servicio y SLA asignados por los posibles si encuentra alguna asignación hecha por el modulo.


AgentTicketPhone.pm y AgentTicketEmail.pm

Situese sobre la función _GetServices y sustitúyala por lo siguiente:

Code: Select all

sub _GetServices {
    my ( $Self, %Param ) = @_;

    # get service
    my %Service;
#    if ( ( $Param{QueueID} || $Param{TicketID} ) && $Param{CustomerUserID} ) {
if  ( $Param{QueueID} || $Param{TicketID} )
    {
        %Service = $Self->{TicketObject}->TicketServiceList(
            %Param,
            Action => $Self->{Action},
            UserID => $Self->{UserID},
        );
    }
    return \%Service;
}


Esta modificación permite asignar un servicio y un SLA sin un usuario registrado, esto evita la limitación del uso del desplegable exclusivo por asignaciones Cliente <-> Servicio.



Os adjunto el paquete .opm base para instalar la interfaz grafica.

Un saludo. :wink:
You do not have the required permissions to view the files attached to this post.
OTRS 3.0.11 Upgrading 3.1.1, Ubuntu Server 11.10, MySQL

digipalka
OTRS newbie
Posts: 1
Joined: 20 May 2013, 19:32
OTRS Version?: 3.1.11
Real Name: Alejandro Sierra
Company: Personal

Re: [How-To] Queue <-> Services

Postby digipalka » 28 May 2013, 00:33

Excelente, funciona de maravilla. Probado en 3.2.7. Lo único que tenemos que hacer es editar el paquete QueueServices1.0.opm con un editor de texto y cambiar la version del Framework:

1. Buscar la línea <Framework>3.0.x</Framework>
2. Cabiar a <Framework>3.2.x</Framework>
3. Guardar y cargar por el Gestor de Paquetes

Saludos.

linomartin
OTRS newbie
Posts: 1
Joined: 01 Sep 2013, 22:45
OTRS Version?: 3.2.1

Re: [How-To] Queue <-> Services

Postby linomartin » 01 Sep 2013, 22:56

Hola Miguel,

Soy nuevo usando el OTRS, y mi necesidad es la siguiente:

Que el cliente cree un ticket, solo seleccione el tipo y el servicio. ( cola/fila y SLA deberan estar ocultos ) Pero el OTRS obliga a que debe ser seleccionada una cola/fila.

Vi tu codigo y solucion y realmente es CASI lo que quiero .... pero alterando el order de COLA->SERVICIO a SERVICIO->COLA y SERVICIO->SLA

Desde nuestro punto de vista COLA/FILA debe ser transparente o oculto para el usuario ( normalmente tenemos nombres tecnicos y el cliente no debe saber esto )

Por otro lado : Yo tengo ya definido una relacion N a 1 entre SERVICIOS-> COLA/FILAS ( o 1 a 1 ... cada servicio va a unica cola/fila)

Creees que seria muy dificil cambiar tu codigo para cubrir nuestra necesidad?

Te lo agradeceria mucho.
Abrazo

juanmattica
OTRS newbie
Posts: 8
Joined: 16 Jul 2013, 15:09
OTRS Version?: 3.2.8

Re: [How-To] Queue <-> Services

Postby juanmattica » 15 Jan 2014, 22:27

esto es posible por medio de los ACL en la nueva version 3.3.3
este nuevo metodo es por medio de entrada grafica.
te recomiendo que lo pruebes


saludos

maquinalba
OTRS newbie
Posts: 1
Joined: 04 Jul 2014, 18:30
OTRS Version?: 3.3.8

Re: [How-To] Queue <-> Services

Postby maquinalba » 04 Jul 2014, 22:45

Tremendo aporte, muy útil, muchas gracias!

jbustamante
OTRS newbie
Posts: 1
Joined: 16 Mar 2015, 07:26
OTRS Version?: 3.0.22
Real Name: Julio
Company: Ninguna

Re: [How-To] Queue <-> Services

Postby jbustamante » 16 Mar 2015, 07:34

Esto un problema con la implementacion de colas - servicios, realice los pasos que describen pero solo se lista los servicios asociados a una cola cuando estoy con el usuario root, no sucede con los usuarios que tienen acceso a escritura en la cola.

por favor me pueden ayudar que podria estar mal?

mi version de otrs es 3.0.22 y la version de queueservice es 0.0.2

Remofero
OTRS newbie
Posts: 1
Joined: 01 Jun 2016, 17:00
OTRS Version?: 3.3.6
Real Name: Alex Florez
Company: qwsa

Re: [How-To] Queue <-> Services

Postby Remofero » 01 Jun 2016, 18:33

Al instalar el paquete me arroja el error adjunto. Como se podría corregir?
You do not have the required permissions to view the files attached to this post.


Return to “¿Cómo lo hago?”

Who is online

Users browsing this forum: No registered users and 1 guest