Funciones sin servidor - Clave API

    Funciones sin servidor - Usar la clave API

    Claves API de funciones

    Se puede invocar una función sin servidor desde dentro de CRM usando un webhook o desde una aplicación de terceros. Sin embargo, la mayoría de los webhooks no son compatibles con OAuth2, salvo un par de ellos. Si este es el caso, usted u otros pueden ejecutar la función usando el método de autenticación de la clave API para invocar la función desde cualquier lugar.

    La diferencia entre ambos yace en el modo de autenticación. Se debe autenticar la clave API en la dirección URL de la solicitud, y no como un encabezado.

    Consulte también:

    Ejemplo de función:

    Situación:

    Los programas de servicio de asistencia y soporte son esenciales en un negocio que involucre la interacción con clientes. La integración de su programa de servicio de asistencia con CRM le ahorrará mucho tiempo y esfuerzo, y le permitirá administrar toda la información comercial desde un solo lugar.

    Zendesk es uno de esos programas. Zoho Desk, desarrollado por Zoho, es otro de estos programas, pero la diferencia es que la integración de Zoho Desk se lleva a cabo de forma automática en Zoho CRM, mientras que Zendesk solo se puede integrar a CRM a través de widgets. Además, cuando necesite transferir la información del ticket desde un servicio de asistencia a otro, deberá realizar varios procedimientos. Por esa razón, es muy conveniente y útil realizar la integración de Zendesk y Zoho Desk a través de funciones sin servidor en Zoho CRM.

    La situación que vamos a presentar es similar. Cada vez que se crea un "ticket" en Zendesk, se deberá crear un ticket en Zoho Desk con la misma información.

    Aplicaciones necesarias:

    • Zendesk
    • Zoho Desk

    Parte 1: Crear una conexión

    Para que la función utilice aplicaciones de terceros y facilite la transferencia de datos, debe primero establecer una conexión entre Zoho CRM y el programa de terceros. En este caso, el programa sería Zendesk. Leer más.

    Cree una conexión a Zoho Desk:

    Parte 2: Crear la función

    Cree una función en Zoho CRM (incluido el código de la conexión).

    Parte 2.1: Escribir la función

    El código de la función es:

    +

    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(); //Ingresar detalles
      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");
      }
      //Get Contact ID from Contact name
      //Get all Contacts
      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)
      {
        //Create a new Contact
        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");
      }
      //Send Notification to Suppot Team
      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: Proporcionar la función como una clave API:

    1. Haga clic en el ícono de Ajustes de la función correspondiente que quiere convertir en una API.
    2. Haga clic en API REST.
    3. Habilite el control deslizante de la clave API.
    4. Haga clic en Guardar.

    Parte 3: Crear un webhook en Zendesk:

    1. Vaya a Administrar > Extensión > Destino HTTP.
    2. Proporcione la siguiente información:
      • Dirección URL de la función
      • Método: GET o POST
      • Seleccione el tipo de contenido como JSON. Para obtener más información, haga clic aquí.

    Nota:

    • La dirección URL de la función es la dirección URL de la clave API que se obtiene en el paso 2.

    Parte 4: Crear un activador en Zendesk:

    1. Condición: cuando se crea un ticket.
    2. Destino de notificación: nombre del destino HTTP

    Argumentos del cuerpo del archivo JSON:

    {"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 un argumento que contenga todo el cuerpo de la solicitud.

    Cuando un webhook envía datos a una función, no hay manera de saber el número de argumentos presentes en ella. A fin de solucionar este problema, puede hacer que la función contenga todo el cuerpo de la solicitud dentro de un solo argumento.

    Invoque la API de Desk dentro de la función y guárdela.

    El resultado:

    Crear un ticket en Zendesk:

    Creación de un ticket en Zoho Desk

    Share this post : FacebookTwitter

    Todavía no puede encontrar lo que está buscando?

    Escríbenos: support@zohocrm.com