Como adicionar agentes programaticamente ao banco de dados do CommunityWFM. O CommunityWFM suporta tanto um procedimento armazenado quanto uma API. Para usar a interface do banco de dados, este documento assume que o leitor tem alguma familiaridade com T-SQL e clientes SQL Server. Além disso, o uso das funções da API RESTful requer um entendimento de como criar solicitações HTTP e como consumir dados formatados em JSON.
Integração de agentes do Community
O Community suporta dois métodos para adicionar agentes programaticamente ao banco de dados: um método de procedimento armazenado e uma função de API exposta pelo serviço RESTful CommunityWeb API.
Método de procedimento armazenado do Community
Com acesso ao banco de dados Community3, os usuários podem acessar o procedimento armazenado spAgentsInsert para adicionar linhas de usuários à t_agent_table. A assinatura do procedimento está incluída abaixo. Implementadas neste procedimento estão as restrições de chave estrangeira das quais você precisará estar ciente. Cada chave estrangeira é descrita na tabela abaixo.
Chaves estrangeiras
| Supervisor_id | FK para a tabela t_agent identificando o supervisor deste agente, ou NULL se não houver |
| Sa_activity_id | FK para t_activity identificando o site ao qual o agente está atribuído. Não pode ser NULL |
| Work_type | FK para a tabela t_exception_types identificando o tipo de evento de trabalho padrão para este agente. Não pode ser NULL |
| Sa_role_id | FK para a tabela t_roles identificando a função do sistema que este agente possui. 100=Agente, 200=Supervisor, 300=Scheduler e 400=Administrador. Não pode ser NULL |
| Sa_timezone_id | FK para a tabela t_timezones permitindo um fuso horário personalizado. Se for NULL, isso é herdado da definição do site. |
| EmpClassificationId | FK para t_employee_classifications. Pode ser NULL |
| ResponsibleAgentId | Identifica o usuário responsável por fazer esta alteração. Usado para fins de auditoria e deve ser uma entrada em t_agent |
Procedimento armazenado
O procedimento spAgentsInsert tem a seguinte assinatura:
ALTERAR PROCEDURE [dbo].[spAgentsInsert]
(@first_name nome
,@last_name nome
,@middle_initial nome
,@title nome
,@email_address descrição
,@employee_id nome
,@supervisor_id int
,@sa_activity_id int
,@hire_date datetime = NULL
,@work_type int
,@login_id nome
,@tiebreaker int
,@sa_role_id int
,@sa_timezone_id int
,@EmpClassificationId int
,@ResponsibleAgentId int = NULL
,@ExternalUserId nvarchar(255) = NULL
,@UserTags nvarchar(max)
,@sa_agent_id int OUTPUT)
Método de API
O Community também suporta uma função de API exposta pelo serviço RESTful CommunityWebAPI. As informações abaixo devem permitir que você adicione agentes com sucesso via serviço RESTful programaticamente.
Interface de API
O verbo é POST e o ponto de entrada é http://<servername>/CommunityWebApi/api/agent*
A execução da chamada retorna um objeto WebApiResult padrão do WFMSG (em formato JSON), que inclui os seguintes membros:
Success – booleano que indica que a operação foi bem-sucedida.
Data – se bem-sucedido, contém o objeto Agente recém-criado. Se não for bem-sucedido, este membro é NULL.
Message – se não for bem-sucedido, contém a exceção lançada; caso contrário, este membro está vazio.
ExceptionResult – se uma exceção for lançada, este é o corpo completo da exceção; caso contrário, este membro é NULL.
*Nota: O Community suporta o uso de implantações concorrentes da CommunityWeb API para integração dentro de uma arquitetura segura, bem como implantação em DMZ ou appliance dedicado para interfaces externas.
Pares nome/valor
A tabela a seguir contém os pares nome/valor que devem ser incluídos no envio do formulário para a chamada RESTful. Observe que, para inserir novos agentes no banco de dados, o valor transactionFlagId deve ser definido como 1.
| Membro da classe | Tipo | Obrigatório? | Descrição |
| transactionFlagId | int | Sim |
Indica o tipo de transação POST a ser realizada. Valores válidos são: 1: Inserir uma nova linha de Agente (t_agent) 2: Atualizar uma linha de Agente existente 3: Excluir uma linha de Agente existente 4: Atualizar o tipo de trabalho padrão para uma linha de Agente existente 5: Atualizar ID de login 6: Atualizar senha 7: Importar de sistema de terceiros (ex. Banco de Dados de Staging) |
| id | Int? | Não | Fornece o sa_agent_id único (de t_agent)
|
| defaultWorkTypeId | Int? | Não | Fornece o tipo de trabalho padrão para escalas deste agente (usuário). Este é um valor de chave estrangeira para a tabela t_exception_types, e NÃO É NULO na tabela t_agent.
|
| supervisorId | Int? | Não | Fornece o id do supervisor do agente. Esta é uma coluna que pode ser NULA na tabela t_agent. Além disso, é uma chave estrangeira da mesma tabela para a tabela t_agent.
|
| timeZoneId | Int | Não | Indica o fuso horário do agente. Se NULO, então o fuso horário padrão será usado (conforme definido pelo site do agente). |
| employeeClassificationId | Int | Não | Indica a classificação do funcionário atribuída a este agente. Se NULO, então nenhuma classificação será atribuída. |
| siteId | Int | Não | Indica o site ao qual este agente pertence. Chave estrangeira para a tabela t_activity. |
| firstName | String | Sim | Primeiro nome |
| lastName | String | Sim | Sobrenome |
| middleInitial | String | Sim | Inicial do meio |
| hireDate | String | Sim | Data de contratação; deve estar no formato AAAA/MM/DD |
| employeeId | String | Sim | ID do funcionário |
| title | String | Sim | Título |
| emailAddress | String | Sim | Endereço de e-mail |
| roleId | Int | Não | Função do agente dentro do aplicativo. Chave estrangeira para a tabela t_roles. |
| tiebreakValue | Int | Não | Valor de desempate |
| loginId | String | Sim | ID de login do aplicativo (note que este não é o ID de login do ACD). |
| Password | String | Sim | Senha para login |
| externalLoginId | String | Sim | Para ambientes que usam Domínio Ativo / Autenticação Integrada, este é o ID de login usado para conectar clientes externos ao aplicativo. Principalmente usado para os aplicativos móveis Community Everywhere. |
| userTags | String | Sim | Coleção de hashtags associadas ao agente. |
| userID | Int | Não | ID do usuário responsável por fazer as alterações neste agente. Usado para fins de segurança e auditoria. |
Declaração de classe de exemplo para os pares nome/valor descritos na tabela acima
public class AgentPostParams
{
/// <summary>
/// transactionFlagId decide como modificar o agente.
/// </summary>
public int transactionFlagId { get; set; }
/// <summary>
/// id
/// </summary>
public int? id { get; set; }
/// <summary>
/// defaultWorkTypeId
/// </summary>
public int? defaultWorkTypeId { get; set; }
/// <summary>
/// supervisorId
/// </summary>
public int? supervisorId { get; set; }
/// <summary>
/// timeZoneId
/// </summary>
public int? timeZoneId { get; set; }
/// <summary>
/// employeeClassificationId
/// </summary>
public int? employeeClassificationId { get; set; }
/// <summary>
/// siteId
/// </summary>
public int? siteId { get; set; }
/// <summary>
/// firstName
/// </summary>
public string firstName { get; set; }
/// <summary>
/// lastName
/// </summary>
public string lastName { get; set; }
/// <summary>
/// middleInitial
/// </summary>
public string middleInitial { get; set; }
/// <summary>
/// hireDate
/// </summary>
public string hireDate { get; set; }
/// <summary>
/// employeeId
/// </summary>
public string employeeId { get; set; }
/// <summary>
/// título
/// </summary>
public string title { get; set; }
/// <summary>
/// endereço de e-mail
/// </summary>
public string emailAddress { get; set; }
/// <summary>
/// funçãoId
/// </summary>
public int? roleId { get; set; }
/// <summary>
/// valor de desempate
/// </summary>
public int? tiebreakValue { get; set; }
/// <summary>
/// loginId
/// </summary>
public string loginId { get; set; }
/// <summary>
/// senha
/// </summary>
public string password { get; set; }
/// <summary>
/// loginId externo
/// </summary>
public string externalLoginId { get; set; }
/// <summary>
/// Tags do usuário
/// </summary>
public string userTags { get; set; }
/// <summary>
/// Para fins de segurança.
/// </summary>
public int? userId { get; set; }
}