Funções sem servidor - Usar a chave de API
Índice
Chaves de API das funções
Uma função sem servidor dentro do seu CRM pode ser chamada a partir de qualquer aplicativo de terceiros ou de dentro do CRM usando um webhook. No entanto, a maioria dos webhooks não suporta OAuth2. Nesse caso, você pode executar a função usando o método de autenticação Chave de API, que pode ser usado por você ou por outras pessoas para chamar a função de qualquer lugar.
A diferença entre a Chave de API e o OAuth2 está no modo de autenticação. A Chave de API precisa ser autenticada no URL de solicitação e não como um cabeçalho.
Consulte também:
- Funções no Zoho CRM.
- Tarefas de integração para Funções usando a versão 2.0 das APIs.
- Deluge Script – Guia de Referência.
- Conexões – conecte o Zoho CRM a qualquer aplicativo de terceiros chamando suas APIs em uma função.
- Zoho Desk – Software de suporte técnico da Zoho.
Função de amostra:
Cenário:
Os softwares de suporte técnico e relacionados a suporte são fundamentais em uma empresa que interage com clientes. Integrar os softwares de suporte técnico com o CRM possibilita economizar bastante tempo e esforço ao gerenciar todas as suas informações comerciais em um único local.
O Zendesk é um desses softwares. O Zoho Desk, desenvolvido pela Zoho, também, mas a diferença é que a integração do Zoho Desk é feita automaticamente no Zoho CRM, ao passo que só é possível integrar o Zendesk através de widgets. Além disso, quando você precisa transferir as informações do tíquete de um suporte técnico para outro, grandes distâncias precisarão ser percorridas. Por isso, uma integração entre Zendesk e Zoho Desk, por meio de funções sem servidor no Zoho CRM, é bastante conveniente e útil.
O cenário que vamos assumir agora é similar. Sempre que um "Tíquete" é criado no "Zendesk", um tíquete também deve ser criado no Zoho Desk, contendo as mesmas informações.
Aplicativos necessários:
- Zendesk
- Zoho Desk
Parte 1: fazer uma conexão
Para que a Função faça uso de aplicativos de terceiros e facilite a transferência de dados, primeiro é preciso estabelecer uma conexão entre o Zoho CRM e o referido software de terceiros. Nesse caso, o Zendesk. Leia mais.
Crie uma conexão com o Zoho Desk

Parte 2: criar a função
Crie uma função no Zoho CRM (inclusive do código da Conexão).
Parte 2.1: escreva a função

O código de função é:
string createTicket(string requestBody){
if(isNull(requestBody))
{
return "No Content";
}
if(!requestBody.contains("arguments"))
{
return "Invalid Format";
}
requestBody = requestBody.get("arguments");
requestBody = requestBody.get("requestBody");
requestBody = requestBody.get("details");
deskURL = "https://desk.zoho.com/api/v1/";
header = {"orgId":"664950682"};
departmentId = "264631000000006907"; //Get ticket and user details from requestBody
userDetails = requestBody.get("user");
ticketDetails = requestBody.get("ticket"); //Create map
param = Map(); //Insert Details
param.put("departmentId",departmentId);
if(!userDetails.contains("email"))
{
return "Email is Mandatory";
}
email = userDetails.get("email");
param.put("email",email);
contactName = "Guest";
if(userDetails.contains("full_name"))
{
contactName = userDetails.get("full_name");
}
else if(userDetails.contains("first_name") && userDetails.contains("last_name"))
{
contactName = userDetails.get("first_name") + " " + userDetails.contains("last_name");
}
else if(userDetails.contains("first_name"))
{
contactName = userDetails.get("first_name");
}
else if(userDetails.contains("last_name"))
{
contactName = userDetails.get("last_name");
}
//Obter ID do contato do Nome do contato
//Obter todos os Contatos
contactList = invokeurl
[
url :deskURL + "contacts"
type :GET
headers:header
connection:"zoho_desk9"
];
isExistingCustomer = false;
contactId = "";
contactList = contactList.get("data");
for each contactInfo in contactList
{
contactEmail = contactInfo.get("email");
if(!isNull(contactEmail))
{
if(email.equals(contactEmail))
{
isExistingCustomer = true;
contactId = contactInfo.get("contactId");
break;
}
}
}
info isExistingCustomer;
if(!isExistingCustomer)
{
//Criar um novo Contato
contactParam = Map();
contactParam.put("firstName",userDetails.get("first_name"));
contactParam.put("lastName",userDetails.get("last_name"));
contactParam.put("mobile",userDetails.get("mobile"));
contactParam.put("email",userDetails.get("email"));
contactParam.put("accountId","264631000000081178");
contactList = invokeurl
[
url :deskURL + "contacts"
type :POST
parameters:contactParam.toString()
headers:header
connection:"zoho_desk9"
];
contactId = contactList.get("id");
}
param.put("contactId",contactId);
if(!ticketDetails.contains("title"))
{
return "title is mandatory";
}
param.put("subject",ticketDetails.get("title"));
if(!ticketDetails.contains("status"))
{
return "status is mandatory";
}
param.put("status",ticketDetails.get("status"));
if(ticketDetails.contains("priority"))
{
param.put("priority",ticketDetails.get("priority"));
}
if(userDetails.contains("organization"))
{
organization = userDetails.get("organization");
if(organization.contains("name"))
{
param.put("accountName",organization.get("name"));
}
}
if(userDetails.contains("mobile"))
{
param.put("phone",userDetails.get("mobile"));
}
if(userDetails.contains("description"))
{
param.put("description",userDetails.get("description"));
}
info param;
response = invokeurl
[
url :deskURL + "tickets"
type :POST
parameters:param.toString()
headers:header
connection:"zoho_desk9"
];
if(response.contains("errorMessage"))
{
return "Sorry Something went wrong. error ::: " + response.get("errorMessage");
}
//Enviar uma notificação à equipe de suporte
sendmail
[
from :zoho.adminuserid
to :"deborah.g@zohocorp.com"
subject :"no-reply"
message :"'Dear Team,<expression></expression><div><br></div><div>A New Ticket is created inside Zoho DESK through Zendesk.</div><div><br></div><div>Ticket Details - </div><div><br></div><div>User Name - ' + contactName + '</div><div><br></div><div><br></div><div>Request Body = " + requestBody + "</div><div><br></div>'"
]
return response;
}
Part2.2: Para disponibilizar a função como uma Chave de API:
- Clique no ícone Configurações da função correspondente que precisa ser criada como uma API.
- Clique em API REST.
- Habilite o controle deslizante da Chave de API.
- Clique em Salvar.
Parte 3: criar um Webhook no Zendesk:
- Vá para Administrador > Extensão > Destino HTTP.
- Forneça as seguintes informações:
- URL da função
- Método – GET ou POST
- Selecione o tipo de conteúdo como JSON. Para saber mais, clique aqui.

Nota:
- O URL da Função é o URL da Chave de API que você obteve na Etapa 2.
Parte 4: criar um acionador no Zendesk:
- Condição – quando um tíquete for criado.
- Notificar destino – nome do Destino HTTP


Corpo JSON de argumentos:
{"arguments":
{
"requestBody":{
"details":{
"ticket":
{
"title":"{{ticket.title}}",
"description":"{{ticket.description}}",
"source":"{{ticket.via}}",
"priority":"{{ticket.priority}}",
"due_date":"{{ticket.due_date}}",
"URI":"{{ticket.url}}",
"status":"{{ticket.status}}"
},
"assigne":
{
"email":"{{ticket.assignee.email}}",
"name":"{{ticket.assignee.name}}",
"first_name":"{{ticket.assignee.first_name}}",
"last_name":"{{ticket.assignee.last_name}}"
},
"user":
{
"full_name":"{{current_user.name}}",
"first_name":"{{current_user.first_name}}",
"language":"{{current_user.language}}",
"details":"{{current_user.details}}",
"mobile":"{{current_user.phone}}",
"email":"{{current_user.email}}",
"organization":
{
"details":"{{current_user.organization.details}}",
"name":"{{current_user.organization.name}}"
}}
}}
}}
Parte 5: configurar um argumento que contenha todo o corpo da solicitação.
Quando um webhook envia dados a uma função, não há nenhuma forma de saber o número de argumentos contidos nele. Para lidar com esse problema, você pode fazer com que a função contenha todo o corpo da solicitação em um único argumento.
Chame a API do suporte técnico de dentro da Função e salve a função.
Resultado:
Criação de um tíquete no Zendesk:


O tíquete é criado no Zoho Desk
