Funções sem servidor - Chave de API

    Funções sem servidor - Usar a chave de API

    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çã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:

    1. Clique no ícone Configurações da função correspondente que precisa ser criada como uma API.
    2. Clique em API REST.
    3. Habilite o controle deslizante da Chave de API.
    4. Clique em Salvar.

    Parte 3: criar um Webhook no Zendesk:

    1. Vá para Administrador > Extensão > Destino HTTP.
    2. 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:

    1. Condição – quando um tíquete for criado.
    2. 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

    Share this post : FacebookTwitter

    Ainda não consegue encontrar o que você está procurando?

    Escreva para nós: support@zohocrm.com