[How-To] Queue <-> Services

Post Reply
miguelmz
Znuny wizard
Posts: 370
Joined: 17 Nov 2011, 17:46
Znuny Version: 6.0.10
Real Name: Miguel
Company: SIA
Location: Madrid, Spain.

[How-To] Queue <-> Services

Post by miguelmz »

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.
We want OTRS certifications in Spain!!

Check out my free addons! :mrgreen:
digipalka
Znuny newbie
Posts: 1
Joined: 20 May 2013, 19:32
Znuny Version: 3.1.11
Real Name: Alejandro Sierra
Company: Personal

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

Post by digipalka »

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
Znuny newbie
Posts: 1
Joined: 01 Sep 2013, 22:45
Znuny Version: 3.2.1

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

Post by linomartin »

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
Znuny newbie
Posts: 8
Joined: 16 Jul 2013, 15:09
Znuny Version: 3.2.8

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

Post by juanmattica »

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
Znuny newbie
Posts: 1
Joined: 04 Jul 2014, 18:30
Znuny Version: 3.3.8

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

Post by maquinalba »

Tremendo aporte, muy útil, muchas gracias!
jbustamante
Znuny newbie
Posts: 1
Joined: 16 Mar 2015, 07:26
Znuny Version: 3.0.22
Real Name: Julio
Company: Ninguna

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

Post by jbustamante »

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
Znuny newbie
Posts: 1
Joined: 01 Jun 2016, 17:00
Znuny Version: 3.3.6
Real Name: Alex Florez
Company: qwsa

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

Post by Remofero »

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.
hrobayo
Znuny newbie
Posts: 8
Joined: 04 Feb 2019, 21:48
Znuny Version: 6.0.16
Real Name: Hugo Camilo Robayo Ayala
Company: Aduana

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

Post by hrobayo »

Hello, there is a version for OTRS 6, thanks
Fabecu
Znuny newbie
Posts: 1
Joined: 02 Mar 2019, 00:10
Znuny Version: 6.0.16.1
Real Name: Fabricio Rivera
Company: Megasetec Cia. Ltda

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

Post by Fabecu »

Buenos días,
Gracias a miguelmz, por el detalle del proceso que enlazar las colas con los servicios.
En base al link que pone en su post, encontré la pagina del desarrollador en la cual nos da unos archivos des descarga pero no para la versión 6 como es mi caso que estoy ejecutando.
Así que en la misma pagina permite descargar los .opm para repositorios en versión 5 y 6 respectivamente.
Versión 5: https://complemento.net.br/repositorio- ... mplemento/
Versión 6: https://complemento.net.br/repositorio- ... ra-otrs-6/
Ahí encontraran la .opm "QueueAndServices 6..0.3", para la versión 6, estoy en fase de pruebas aún; pero está funcionando.
Nota: deben habilitar "Package::AllowNotVerifiedPackages", para que permita instalar opm's no certificados, después deshabilitarlo, ya que se queda el mensaje de que no está certificado.

Saludos,
Fabricio Rivera
OTRS-6.0.16.1
Linux Centos 7
hrobayo
Znuny newbie
Posts: 8
Joined: 04 Feb 2019, 21:48
Znuny Version: 6.0.16
Real Name: Hugo Camilo Robayo Ayala
Company: Aduana

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

Post by hrobayo »

Fabricio puedes compartir los archivos para la version 6, no es posible descargar mediante el link q nos indicaste
sansebas131
Znuny newbie
Posts: 1
Joined: 25 Jan 2021, 17:30
Znuny Version: 6.03
Real Name: Sebastian Sánchez
Company: ARBA

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

Post by sansebas131 »

Hola, vuelvo a consultar sobre este post. Pueden subir los archivos para la versión 6 QueueAndServices 6..0.3 ya que no se encuentran en el sitio de complemento.net.br. Muchas gracias!!
Post Reply