Kaizen 231 - Embedding Zoho Desk Tickets in Zoho CRM

Kaizen 231 - Embedding Zoho Desk Tickets in Zoho CRM



Hello, CRM Wizards!

This week, let us enhance cross-team visibility between Zoho CRM and Zoho Desk.

We will use the Zoho Request Client inside a Related List widget to display open Zoho Desk tickets directly within the Contact record in Zoho CRM. This integration allows Sales and Support teams to access active support issues without switching applications.

Business Problem

At Zylker, a manufacturing company that manages high-value distributors and enterprise buyers, sales operations run in Zoho CRM while customer support manages warranty claims and service issues in Zoho Desk.

This separation creates operational friction during critical customer interactions.

1. Lack of visibility into open support tickets 

Sales representatives cannot see ongoing support tickets when interacting with customers in CRM. This results in: 
  1. Sales conversations happening without awareness of active complaints.
  2. Poor customer experience when unresolved issues surface unexpectedly.
  3. Reduced productivity due to frequent system switching between CRM and Desk.
2. No Controlled Escalation Mechanism

There is no structured way to initiate ticket escalations from within Zoho CRM.

Solution

This week we will focus on solving the visibility gap

We will embed a related list widget within Contact detail page and provide real-time visibility of open tickets

Prerequisites

1. Create Zoho CRM and Zoho Desk under the same Zoho Organization. 

2. A two-way sync between Zoho CRM and Zoho Desk is required to keep Contacts and Accounts consistent across both applications.

With this support, any change made to a Contact or Account in either application is automatically reflected in the other.

Additionally, each record in Zoho Desk stores the corresponding Zoho CRM record ID. This allows you to reference the CRM record directly and perform further customizations or integrations using that unique ID.

Follow the steps to create the two-way sync:
  1. Log into Zoho Desk.
  2. Go to Settings > Integration > Zoho
  3. Choose Zoho CRM and click Integrate
  4. On the Authentication page:
    1. Enter your email address.
    2. Choose the CRM organization you want to integrate with.
  5. Click Authorize.
  6. Once authenticated, the sync configuration page opens.
  7. Select the sync type as Two-way Sync.
  8. Map the fields of Accounts and Contacts modules between Zoho Desk and Zoho CRM.
  9. Click Start Sync to initiate the integration. 

Refer to the Integrating Zoho Desk with Zoho CRM help page for more details. 

3. Create a Zoho Desk connection in Zoho CRM with Desk.tickets.READ and Desk.contacts.READ scopes. 

Refer to the Connections help doc for more information. Store the Connection Link Name to use while making API calls. 


4. Create a local project folder for widget using Zoho CLI as mentioned in Creating your First Widget help guide. 

Step-by-Step Implementation

In the widget project directory, code the following logic in the widget.html file.

Step - 1: Get the Current CRM Contact ID

On page load, you can capture the entity ID with the help of PageLoad event listener. 

Also create a reusable ZRC instance configured with the Zoho Desk base URL and OAuth connection name. 

// Initialize the embedded app
ZOHO.embeddedApp.on("PageLoad", async function(data) {
    console.log("PageLoad data:", data);
    // Step 1: Get the entity (module) and entity ID (Contact record ID)
    if (data && data.Entity && data.EntityId) {
        entityModule = data.Entity;
        entityId = data.EntityId;
        console.log("Entity:", entityModule);
        console.log("Entity ID (CRM Contact ID):", entityId);
        // Create reusable ZRC instance for Zoho Desk API
        deskZrc = zrc.createInstance({
            baseUrl: 'https://desk.zoho.com/api/v1',
            connection: 'desk_oauth_connection'
        });
        await loadTickets();
    } else {
        showError("No contact context found");
    }
});
ZOHO.embeddedApp.init();

Step - 2: Fetch Desk Contacts and Match the CRM Contact ID

Make a GET Contacts API call to the Zoho Desk API using the ZRC instance. Loop through the returned contacts and find the one whose zohoCRMContact.id matches the current CRM Contact ID.

// Step 2: Make GET contacts API call to Desk using ZRC
const contactsResponse = await deskZrc.get('/contacts', {
    params: {
        limit: 100
    }
});
console.log("Desk Contacts Response:", contactsResponse);
if (contactsResponse && contactsResponse.data) {
    // Parse the response data 
    const contactsData = typeof contactsResponse.data === 'string' 
        ? JSON.parse(contactsResponse.data) 
        : contactsResponse.data;
    // Find the object where zohoCRMContact.id matches Contact record ID
    if (contactsData && contactsData.data && Array.isArray(contactsData.data)) {
        const matchingContact = contactsData.data.find(function(contact) {
            return contact.zohoCRMContact && 
                   contact.zohoCRMContact.id && 
                   contact.zohoCRMContact.id === entityId;
        });
        if (matchingContact) {
            // Pick the id (Desk contact record ID)
            const deskContactId = matchingContact.id;
            console.log("Desk Contact ID:", deskContactId);
            // Proceed to fetch tickets
            await fetchTickets(deskContactId);
        } else {
            showEmptyState("No Desk contact found linked to this CRM contact");
        }
    }
}

Step - 3: Fetch Open Tickets and Filter by Desk Contact ID

Make a GET Tickets API call to Zoho Desk with the following parameters:
  1. Specify status with Open value to retrieve only open tickets. 
  2. Specify include with value set to contacts fetch each ticket details with its associated contact details. 
Filter the API response with the matched Desk Contact ID and render the results. 

async function fetchTickets(deskContactId) {
    try {
        // Step 3: Make GET Tickets API call using ZRC 
        const ticketsResponse = await deskZrc.get('/tickets', {
            params: {
                include: 'contacts',
                status: 'Open',
                limit: 100
            }
        });
        console.log("Tickets Response:", ticketsResponse);
        if (ticketsResponse && ticketsResponse.data) {
            const ticketsData = typeof ticketsResponse.data === 'string' 
                ? JSON.parse(ticketsResponse.data) 
                : ticketsResponse.data;
            // Filter tickets where contact matches deskContactId
            if (ticketsData && ticketsData.data && ticketsData.data.length > 0) {
                const matchingTickets = ticketsData.data.filter(function(ticket) {
                    return ticket.contact && ticket.contact.id === deskContactId;
                });
                if (matchingTickets.length > 0) {
                    renderTickets(matchingTickets);
                } else {
                    showEmptyState("No open tickets found for this contact");
                }
            } else {
                showEmptyState("No open tickets found");
            }
        }
    } catch (error) {
        console.error("Error fetching tickets:", error);
        showError("Failed to fetch tickets: " + (error.message || error.toString()));
    }
}

Step - 4: Validate and Pack the Widget

Follow the steps given in the Widget help page to validate and package the widget. A complete working code sample is provided as attachment at the end of this post.

Creating a Related List Widget

1. Go to Zoho CRM > Setup > Developer Hub > Widgets and click Create New Widget.

2. Fill in the required details such as:
  1. Name: Zoho WorkDrive
  2. Type: Related List 
  3. Hosting: Zoho 
  4. File Upload: Upload the ZIP created in the dist folder within the widget project directory after packaging in the Step 4. 
  5. Index page: /widget.html

3. Go to Customization > Modules and Fields > Contacts > Standard > Detail View. Then, create and associate the related list widget. 

Refer to the Customize Related Lists help page for more information on creating a related list.

Try it Out! 

Let us look at the output from the Contacts detail page in Zoho CRM. 


Info
Key Points to Remember
  1. Two-way sync is mandatory to link Desk contacts with CRM contacts. 
  2. Connection setup in Zoho CRM for Desk is mandatory with Desk.tickets.READ and Desk.contacts.READ scopes. Ensure to replace the connection name in line 21.
  3. If the account has a large number of contacts or tickets, implement pagination using from and limit parameters to ensure all records are evaluated. 
  4. Ensure to replace the Desk URL to ticket in line 181 with your portal name and company name.
We hope this Kaizen helps your sales team to see active issues instantly. Next week, we will look at how to establish a ticket escalation mechanism from Zoho CRM

Have questions or suggestions? Drop them in the comments or write to us at  support@zohocrm.com

On to Better Building!

-----------------------------------------------------------------------------------------------------------

Related Reading 

2. Connections - An Overview
3. CRM Customizations - Related Lists
4. Desk APIs -  GET Tickets API and GET Contacts API
5. Desk Customizations - Integrate Zoho Desk with Zoho CRM
-----------------------------------------------------------------------------------------------------------
    • Sticky Posts

    • Kaizen #198: Using Client Script for Custom Validation in Blueprint

      Nearing 200th Kaizen Post – 1 More to the Big Two-Oh-Oh! Do you have any questions, suggestions, or topics you would like us to cover in future posts? Your insights and suggestions help us shape future content and make this series better for everyone.
    • Kaizen #226: Using ZRC in Client Script

      Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
    • Kaizen #222 - Client Script Support for Notes Related List

      Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
    • Kaizen #217 - Actions APIs : Tasks

      Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
    • Kaizen #216 - Actions APIs : Email Notifications

      Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are

    Nederlandse Hulpbronnen


      • Recent Topics

      • Feature Request - Make Available "Alias Name" Field In Item List View

        Hi Zoho Inventory Team, I have noticed that the "Alias Name" field does not appear on the list of selectable columns in the Customise Columns feature in the Items module. This would be very useful to see for businesses who are using the Alias Name field
      • product name field issue-n8n

        Hey guys, I have a question. I want to create a new product using the workflow. The problem is with the product name field; I don't know how to fill it in. The workflow starts with retrieving information from the leads table, retrieving links to scrape
      • How to filter Packages in zoho inventory api

        Hi Team, I want to perform some tasks in a schedular on the packages which are in "Shipped" state. I tried to use filter_by in my api call but in return I get response as {"code":-1,"message":"Given filter is not configured"} My Api request is as follows
      • CRM

        Is anyone else experiencing this issue? Our company is not moving out of using Gmail's web app. It just has more features and is a better email program than Zoho Mail. Gmail has an extension (Zoho CRM for Gmail) that we're using but we've found some serious
      • Syncing with Google calendar, Tasks and Events

        Is it possible to sync Zoho CRM calendar, task and events with Google Calendar's tasks and events. With the increasing adoption by many major tool suppliers to sync seamlessly with Google's offerings (for instance I use the excellent Any.do task planning
      • How can i view "Child" Accounts?

        It can be very useful in our field of business to know the parent-child account relationship. However, there seems to be a shortcoming in the parent account view: no child account list. How can we view the child accounts per each account?
      • Easily perform calculations using dates with the new DATEDIF function

        Hey Zoho Writer users! We've enhanced Zoho Writer's formula capabilities with the new DATEDIF function. This allows you to calculate the difference between dates in days, months, and years. Function syntax: =DATEDIF(start_date, end_date, unit) Inputs:
      • Adding Comments Using Workflows - How to Change User Attributed

        We have worklflows in Desk where a comment is added to a ticket based on certain criteria. It seems that the comment added is always attributed to the user who last edited the workflow. This does not make sense for us because: - It's misleading to other
      • Add Attachment Support to Zoho Flow Mailhook / Email Trigger Module

        Dear Zoho Support Team, We hope you are well. We would like to kindly request a feature enhancement for the Mailhook module in Zoho Flow. Currently, the email trigger in Zoho Flow provides access to the message body, subject, from address, and to address,
      • Conect chat of salesiq with zoho cliq

        Is there any way to answer from zoho cliq the chat of salesiq initiated by customers?
      • Les dernières avancées en saisie de données et collaboration

        Après une année dédiée à la recherche et au développement, notre équipe est prête à dévoiler des améliorations majeures pour Zoho Sheet. Ces nouveautés seront lancées par étapes afin d’en assurer une prise en main optimale. Nous commençons avec des fonctionnalités
      • Rich Text For Notes in Zoho CRM

        Hello everyone, As you know, notes are essential for recording information and ensuring smooth communication across your records. With our latest update, you can now use Rich Text formatting to organize and structure your notes more efficiently. By using
      • Implement Meeting Polls in Zoho Bookings

        Dear Zoho Bookings Support Team, We'd like to propose a feature enhancement related to appointment scheduling within Zoho Bookings. Current Functionality: Zoho Bookings excels at streamlining individual appointment scheduling. Users can set availability
      • Service Account Admin for API Calls and System Actions

        Hello, I would like to request the addition of a Service Account Admin option in Zoho product. This feature would allow API calls and system actions to be performed on behalf of the system, rather than an active user. Current Issue: At present, API calls
      • Please can the open tasks be shown in each customer account at the top.

        Hi there This has happened before, where the open tasks are no longer visible at the top of the page for each customer in the CRM. They have gone missing previously and were reinstated when I asked so I think it's just after an update that this feature
      • How to Customize Task Creation to Send a Custom Alert Using JavaScript in Zoho CRM?

        Hello Zoho CRM Community, I’m looking to customize Zoho CRM to send a custom alert whenever a task is created. I understand that Zoho CRM supports client scripts using JavaScript, and I would like to leverage this feature to implement the alert functionality.
      • Send Whatsapp with API including custom placeholders

        Is is possible to initiate a session on whatsapp IM channel with a template that includes params (placeholders) that are passed on the API call? This is very usefull to send a Utility message for a transactional notification including an order number
      • ZO25: The refreshed, more unified, and intelligent OS for business

        Hello all, Greetings from Zoho One! 2025 has been a remarkable year, packed with new features that will take your Zoho One experience to the next level! From sleek, customizable dashboards to an all-new action panel for instant task management, we’ve
      • Introducing Multi-Asset Support in Work Orders, Estimates, and Service Appointments

        We’re excited to announce a highly requested enhancement in Zoho FSM — you can now associate multiple assets with Work Orders, Estimates, and Service Appointments. This update brings more clarity, flexibility, and control to your field service operations,
      • [Product Update] Locations module migration in Zoho Books integration with Zoho Analytics

        Dear Customers, As Zoho Books are starting to support an advance version of the Branches/Warehouses module called the Locations module, users who choose to migrate to the Locations module in Zoho Books will also be migrated in Zoho Analytics-Zoho Books
      • Introducing Schedules for smarter availability management

        Greetings from the Zoho Bookings team! We’re excited to introduce Schedules, a powerful enhancement to manage availability across your workspace. Schedules are reusable working-hour templates that help you define and maintain consistent availability across
      • Why Zoho Contracts Prefers Structured Approvals Over Ad-hoc Approvals

        Approvals are one of the most important stages in a contract’s lifecycle. They determine whether a contract moves forward, gets revised, or needs further discussion. The approval process also defines accountability within the organization. Zoho Contracts
      • Whatsapp Connection Status still "Pending" after migration

        Hello, I migrated my WhatsApp API to Zoho from another provider a day ago. So far the connection status is still “Pending”. There is a problem? How long does it usually take?
      • Kaizen #226: Using ZRC in Client Script

        Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
      • How to Filter timewise question to check uploaded one month or two months before in these community question ?

        i want to find the question that is asked some month or before any particular year, so how can i filter it ?
      • Proposal for Creating a Unique "Address" Entity in Zoho FSM

        The "Address" entity is one of the most critical components for a service-oriented company. While homeowners may change and servicing companies may vary, the address itself remains constant. This constancy is essential for subsequent services, as it provides
      • Workflow Down/Bug

        We have a workflow that sends an email to one of our internal departments 10 minutes after a record is created in a custom module. The workflow actually works correctly. However, we have now noticed that on January 8, between 3:55 p.m. and 4:33 p.m.,
      • Service Locations: Designed for Shared Sites and Changing Customers

        Managing service addresses sounds simple—until it isn’t. Large facilities, shared sites, and frequently changing customers can quickly turn address management into an operational bottleneck. This is where Service Locations deliver clarity and control.
      • Can I re-send the Customer Satisfaction Survey after a ticket closure?

        Hello, Some customers does not answer the survey right after closure, is it possible to re-send after a few days or weeks? Best Regards!
      • Is the app being developed?

        Hi, is this app being developed/improved? Or is it just another app started and let go like others (market automation, campaign, etc)?
      • Filter contacts based on selected category in Zoho Desk ticket

        Hello community, I’m setting up the Tickets module in Zoho Desk and I need help implementing the following: When a category is selected in a ticket, I want the Contact field to be filtered so that it only displays contacts that are related to that category.
      • Profile Page View Customization

        I need to change the fields, sections from the profile view of an emplyoyee.
      • Zoho Desk Android app update: Filter, Sort and Saved filters Enhancements

        Hello everyone! We are excited to introduce the below features on the Android version Zoho Desk mobile app: 1. Filter & Sort support has been introduced for the Contacts and Accounts modules. 2. Sort options is now available in Custom Modules as well.
      • Accessing shared mailboxes through Trident (Windows)

        Hi, I have a created a couple of shared mailboxes. The mailboxes are showing up on the browser based Zoho workplace, but I cannot seem to figure out how to access my shared inboxes through Trident (Windows). Am I missing something or is this feature not
      • filtering lookup field options based on information in another module.

        In our CRM system. We have the standard Accounts and Deals modules. We would like to introduce the ability to classify Accounts by Sector. Our desired functionality is to have a global list of all sectors that an Account can select, with the ability to
      • Introducing Assemblies and Kits in Zoho Inventory

        Hello customers, We’re excited to share a major revamp to Zoho Inventory that brings both clarity and flexibility to your inventory management experience! Presenting Assemblies and Kits We’re thrilled to introduce Assemblies and Kits, which replaces the
      • Does the ability exist to make tax on the customer profile mandatory?

        I am reaching out to inquire about the possibility of making the "Customer Tax" field mandatory when creating a new customer in Zoho. We want to ensure that all customers have their tax information recorded to maintain compliance with our internal processes.
      • email association with CRM

        Why is it 2024 (almost 2025) and Zoho has not figured out how to integrate email with CRM? It is so inconsistent at associating emails within CRM. I am an attorney. I have clients and work with other attorneys. Attorney John Doe is associated with multiple
      • Credit Note for Shipped and Fatoora pushed invoices

        We have shipped a Sales Order and created an Invoice. The Invoice is also pushed to Fatoora Now we need to create a credit note for the invoice When we try it, it says we need to create a Sales Return in the Zoho Books, we have already created a Sales
      • FSM - Timesheet entires for Internal Work

        Hi FSM Team, Several of my clients have asked how they can manage internal timesheets within Zoho FSM. Since their technicians already spend most of their day working in FSM, it would be ideal if they could log all working hours directly in the FSM app.
      • Next Page