Conexão de telefonia Sipuni

1. Para conectar a telefonia Sipuni ao Usedesk, abra a seção "Canais" – "API" e clique em "Adicionar".

2. Preencha o campo "Nome do canal" – um campo obrigatório que será exibido na lista geral de canais na seção "Canais" e ao trabalhar com tickets.

3. Marque as caixas ao lado de "Solicitação JSON" e "enviar em UTF-8" e clique em "Salvar".

4. Após salvar o canal, copie a chave secreta e transfira o canal criado para os monitorados. Clique em "Salvar" novamente.

Da parte do Usedesk, as configurações estão concluídas; vá para a conta pessoal da telefonia Sipuni.

IMPORTANTE! A integração está disponível no plano Sipuni estendido.

5. Vá para sua conta Sipuni> seção "Integrações"> Usedesk.


6. Na seção "Autorização no Usedesk", insira a chave secreta salva do item 4 no campo "Chave API".


7. Na seção "Usuários", combine os funcionários que participarão da integração. A lista de funcionários é obtida automaticamente no Usedesk após salvar a chave API.


Você pode criar um número interno na seção "Design" - "Empregados".


Imediatamente, você será solicitado a instalar uma extensão ou comunicador.


Se estiver instalando uma extensão, para entrar, digite a chave do mensagemo "Editar funcionário" (exemplo na imagem anterior).


Verifique novamente se todos os usuários estão atribuídos corretamente e salve as definições de configuração

Importante!

O departamento de suporte da Sipuni responderá suas perguntas sobre a compra de um quarto, configuração de esquemas, contratação de funcionários, etc. Além disso, alguns detalhes sobre o trabalho de telefonia estão descritos na Base de Conhecimento Sipuni.


E continuaremos configurando a integração.

8. Em seguida, você precisa configurar o cenário de integração.

Recursos que podem ser configurados na telefonia:

  • Recebendo chamada para um número externo
  • Recebendo chamada para um número de ramal
  • Chamada de saída
  • Atenda ao telefone enquanto recebe uma chamada
  • Entrada ignorada
  • Saída não respondida
  • Conversa de entrada encerrada
  • A conversa de saída terminou
  • Chamada de CRM

Usando a função Sipuni , você pode usar o código já escrito ou escrever o seu próprio e começar a usar a integração inteiramente.

Um exemplo de código escrito (funções Sipuni) para um script:

  • Verificação do cliente por número de telefone (se não houver telefone, é criado um novo cliente).
  • Verificar um ticket para um cliente (se não houver ticket aberto para um cliente, é criado um novo).
  • Adicionando uma chamada a um ticket com um comentário e um link para a postagem.

Recebendo chamada para um número externo

1. Vá para a seção "Configurações" - "Integrações" e clique em node.


2. Selecione o Usedesk como CRM.


3. Clique em "Criar função" - "Chamada de entrada para o número externo."


4. Antes de escrever qualquer código, limpe a página. Adicione este código:


const SipuniUsedeskApi = require ('@ sipuni / usedesk');

<< $ 1> $ 1> function findClient (api, phone) {

const clients = await api.clients.list ({

offset: 0,

query: phone, // pesquisa por número de assinante

search_type: 'full_match',

});

if (clients.length> 0) {

return clients [0];

}

return null;

}

<< $ 1> $ 1> function createClient (api, phone) {

const client = await api.clients.create ({

name: phone,

phone: phone,

});

client.id = client.client_id; // adicione o campo id, como o cliente retornado de findClient

return client;}

<< $ 1> $ 1> function findOpenTicket (api, client) {

const found = await api.tickets.list ({

client_id: client.id,

fstatus: '1,8', // Tickets com status Aberto e Novo

});

if (! found.length) {

return null;

} else {

return found [0]; //Pegue o primeiro ticket

}

}

<< $ 1> $ 1> function createTicket (api, client, phone) {

const ticket = await api.tickets.create ({

subject: `Incoming call from $ {phone}`,

message: 'Incoming request',

client_id: client.id,

});

ticket.id = ticket.ticket_id;

return ticket;

}

module.exports = << $ 1> $ 1> (args) => {

const phone = args.call_args.src_num;

const token = args.settings.api_key;

let client = null;

let isExistingClient = true;

let ticket = null;

const api = new SipuniUsedeskApi ({token});

// Procurando por um cliente, crie se não for encontrado

client = await findClient (api, phone);

if (! client) {

client = await createClient (api, phone);

isExistingClient = false;

}

// Estamos procurando um tíquete aberto ou novo, se não for encontrado, crie

if (isExistingClient) {

ticket = await findOpenTicket (api, client);

}

if (! ticket) {

ticket = await createTicket (api, client, phone);

}

// Retorna um objeto com identificadores de cliente e ticket,

// e o sinalizador existing_client - o cliente foi encontrado ou criado

// Esta informação é útil em outras funções

return {

client_id: client.id,

ticket_id: ticket.id,

existing_client: isExistingClient,

};

};

5. Depois de adicionar o código, faça um teste. Aguarde no log "Salvo" o resultado da função.


6. Após concluir as etapas, clique em "Publicar".



Chamada recebida encerrada

1. Vá para a seção "Configurações" - "Integrações" e clique em node.


2. Selecione o Usedesk como CRM.



3. Clique em "Criar função" - "Chamada recebida encerrada."


4. Antes de escrever qualquer código, limpe a página. Adicione este código:


const SipuniUsedeskApi = require ('@ sipuni / usedesk');

const moment = require ('moment');

// Retorna a duração da conversa no formato 00:01:34

function getCallDuration (callArgs) {

// timestamp e call_answer_timestamp vêm como strings, então convertemos para um número

const conversationStarted = parseInt (callArgs.call_answer_timestamp, 10);

const conversationEnded = parseInt (callArgs.timestamp, 10);

const seconds = conversationEnded - conversationStarted;

return moment.utc (seconds * 1000) .format ('HH: mm: ss');

}

<< $ 1> $ 1> function createComment (api, ticketId, callArgs) {

const duration = getCallDuration (callArgs);

const message = ` Recording a conversation $ {duration}`;

const comment = await api.tickets.createComment ({

ticket_id: ticketId,

message,

});

comment.id = comment.comment_id;

return comment;

}

module.exports = << $ 1> $ 1> (args) => {

let commentId = null;

const ticketId = args.context.ticket_id; // obtém o id do ticket no contexto da chamada

if (ticketId) {

const token = args.settings.api_key;

const api = new SipuniUsedeskApi ({token});

const comment = await createComment (api, ticketId, args.call_args);

commentId = comment.id;

}

return {

comment_id: commentId,

};

};

5. Depois de adicionar o código, faça um teste. Aguarde no log "Salvo" o resultado da função.

6. Após concluir as etapas, clique em "Publicar".




Chamada não atendida

1. Vá para a seção "Configurações" - "Integrações" e clique em node.


2. Selecione o Usedesk como CRM.


3. Clique em "Criar função" - "Entrada perdida".


4. Antes de escrever qualquer código, limpe a página. Adicione este código:


const SipuniUsedeskApi = require ('@ sipuni / usedesk');

const moment = require ('moment');

<$ 1 data-verified = "redactor"> function createComment (api, ticketId, callArgs) {

const message = `Incoming call missed`;

const comment = await api.tickets.createComment ({

ticket_id: ticketId,

message,

});

comment.id = comment.comment_id;

return comment;

}

module.exports = <$ 1 data-verified = "redactor"> (args) => {

let commentId = null;

const ticketId = args.context.ticket_id; // obtém o id do ticket no contexto da chamada

if (ticketId) {

const token = args.settings.api_key;

const api = new SipuniUsedeskApi ({token});

const comment = await createComment (api, ticketId, args.call_args);

commentId = comment.id;

}

return {

comment_id: commentId,

};

};

5. Depois de adicionar o código, faça um teste. Aguarde no log "Salvo" o resultado da função.


6. Após concluir as etapas, clique em "Publicar".



Chamada de saída

1. Vá para a seção "Configurações" - "Integrações" e clique em node.


2. Selecione o Usedesk como CRM.


3. Clique em "Criar função" - "Chamada de saída".


4. Antes de escrever qualquer código, limpe a página. Adicione este código:


const SipuniUsedeskApi = require ('@ sipuni / usedesk');

function findClient (api, phone) {

const clients = await api.clients.list ({

offset: 0,

query: phone, // pesquisa por número de assinante

search_type: 'full_match',

});

if (clients.length> 0) {

return clients [0];

}

return null;

}

function createClient (api, phone) {

const client = await api.clients.create ({

name: phone,

phone: phone,

});

client.id = client.client_id; // adicione o campo id, como o cliente retornado de findClient

return client;

}

function findOpenTicket (api, client) {

const found = await api.tickets.list ({

client_id: client.id,

fstatus: '1,8', // Tickets com status Aberto e Novo

});

if (! found.length) {

return null;

} else {

return found [0]; // Pegue o primeiro ticket

}

}

function createTicket (api, client, phone) {

const ticket = await api.tickets.create ({

subject: `Outgoing call to $ {phone}`,

message: 'Outgoing request',

client_id: client.id,

});

ticket.id = ticket.ticket_id;

return ticket;

}

module.exports = (args) => {

const phone = args.call_args.dst_num;

const token = args.settings.api_key;

let client = null;

let isExistingClient = true;

let ticket = null;

const api = new SipuniUsedeskApi ({token});

// Procurando por um cliente, crie se não for encontrado

client = await findClient (api, phone);

if (! client) {

client = await createClient (api, phone);

isExistingClient = false;

}

// Estamos procurando um tíquete aberto ou novo, se não for encontrado, crie

if (isExistingClient) {

ticket = await findOpenTicket (api, client);

}

if (! ticket) {

ticket = await createTicket (api, client, phone);

}

// Retorna um objeto com identificadores de cliente e tíquete,

// e o sinalizador existing_client - o cliente foi encontrado ou criado

// Esta informação é útil em outras funções

return {

client_id: client.id,

ticket_id: ticket.id,

existing_client: isExistingClient,

};

};

5. Depois de adicionar o código, faça um teste. Aguarde no log "Salvo" o resultado da função.


6. Após concluir as etapas, clique em "Publicar".



Chamada de saída terminada

1. Vá para a seção "Configurações" - "Integrações" e clique em node.


2. Selecione o Usedesk como CRM.


3. Clique em "Criar função" - "Conversa de saída encerrada."


4. Antes de escrever qualquer código, limpe a página. Adicione o código abaixo:


const SipuniUsedeskApi = require ('@ sipuni / usedesk');

const moment = require ('moment');

// Retorna a duração da conversa no formato 00:01:34

function getCallDuration (callArgs) {

// timestamp e call_answer_timestamp vêm como strings, então convertemos para um número

const conversationStarted = parseInt (callArgs.call_answer_timestamp, 10);

const conversationEnded = parseInt (callArgs.timestamp, 10);

const seconds = conversationEnded - conversationStarted;

return moment.utc (seconds * 1000) .format ('HH: mm: ss');

}

function createComment (api, ticketId, callArgs) {

const duration = getCallDuration (callArgs);

const message = `Conversation recording $ {duration}`;

const comment = await api.tickets.createComment ({

ticket_id: ticketId,

message,

});

comment.id = comment.comment_id;

return comment;

}

module.exports = (args) => {

let commentId = null;

const ticketId = args.context.ticket_id; // obtém o id do ticket no contexto da chamada

context

if (ticketId) {

const token = args.settings.api_key;

const api = new SipuniUsedeskApi ({token});

const comment = await createComment (api, ticketId, args.call_args);

commentId = comment.id;

}

return {

comment_id: commentId,

};

};

5. Depois de adicionar o código, faça um teste. Aguarde no log "Salvo" o resultado da função.


6. Após concluir as etapas, clique em "Publicar".



Chamada Perdida

1. Vá para a seção "Configurações" - "Integrações" e clique em node.


2. Selecione o Usedesk como CRM.


3. Clique em "Nova função" - "Saída não atendida."


4. Antes de escrever qualquer código, limpe a página. Adicione este código:


const SipuniUsedeskApi = require ('@ sipuni / usedesk');

const moment = require ('moment');

function createComment (api, ticketId, callArgs) {

const message = `Couldn't get through`;

const comment = await api.tickets.createComment ({

ticket_id: ticketId,

message,

});

comment.id = comment.comment_id;

return comment;

}

module.exports = (args) => {

let commentId = null;

const ticketId = args.context.ticket_id; // obtém o id do ticket e o contexto da chamada

if (ticketId) {

const token = args.settings.api_key;

const api = new SipuniUsedeskApi ({token});

const comment = await createComment (api, ticketId, args.call_args);

commentId = comment.id;

}

return {

comment_id: commentId,

};

};

5. Depois de adicionar o código, faça um teste. Aguarde no log "Salvo" o resultado da função.


6. Após concluir as etapas, clique em "Publicar".



Como o script configurado se parece no Usedesk:

  • Verificação do cliente por número de telefone (se não houver telefone, é criado um cliente).
  • Verificar um ticket para um cliente (se não houver ticket aberto para um cliente, crie um novo).
  • Adicionando uma chamada a um ticket com um comentário e um link para a postagem.

Na ficha do cliente, o nome do novo cliente será preenchido com um número de telefone; você pode renomeá-lo, se necessário.


- O assunto na ficha do ticket corresponderá à chamada: chamada recebida / efetuada.


- A ficha do ticket exibirá a hora e a assinatura da criação do ticket:

  • Solicitação de saída - para chamadas de saída;
  • Solicitação de entrada - para chamadas recebidas

- Um registro de chamadas recebidas perdidas será incluído na ficha do ticket.

- A ficha do ticket conterá uma gravação da conversa, que pode ser ouvida.

Caso você não consiga entrar em contato com o cliente, não haverá gravação da conversa na ficha de solicitação, apenas a chamada de saída.

Was the article helpful?

Yes No