Create a task in Zoho CRM directly from Zoho Cliq

Create a task in Zoho CRM directly from Zoho Cliq

Components used : Slash command, message action.

Slash Command:

To create a task in Zoho CRM directly from a chat window in Zoho Cliq, follow the steps below:

Step 1: Create a command

The first step is to create a command in Zoho Cliq that allows users to create a task directly from a chat window. To do this, go to your profile, then navigate to  Bots & Tools > Integrations > Command > Create Command .

In the command creation window, you will need to enter a name for your command, a description, and choose the access level (Personal, Team, or Org). Once you have done this, save the command.

Next, paste the provided code in the script editor in the integration window:

  1. fetchFields = invokeurl
  2. [
  3.  url :"https://www.zohoapis.com/crm/v2/settings/fields?module=Tasks"
  4.  type :GET
  5.  connection:"CONNECTION LINK NAME"
  6. ];
  7. //info fetchFields;
  8. allFields = fetchFields.get("fields");
  9. priorityList = list();
  10. statusList = list();
  11. for each  field in allFields
  12. {
  13.  if(field.get("api_name") == "Priority")
  14.  {
  15.   pickListValues = field.get("pick_list_values");
  16.   for each  pickList in pickListValues
  17.   {
  18.    displayName = pickList.get("display_value");
  19.    priorityList.add({"label":displayName,"value":displayName.replaceAll(" ","_")});
  20.   }
  21.  }
  22.  else if(field.get("api_name") == "Status")
  23.  {
  24.   pickListValues = field.get("pick_list_values");
  25.   for each  pickList in pickListValues
  26.   {
  27.    displayName = pickList.get("display_value");
  28.    statusList.add({"label":displayName,"value":displayName.replaceAll(" ","_")});
  29.   }
  30.  }
  31. }
  32. inputs = list();
  33. inputs.add({"type":"text","name":"task","label":"Task Name","hint":"Enter a subject","placeholder":"","min_length":8,"max_length":100,"mandatory":true});
  34. inputs.add({"type":"date","name":"date","label":"Due Date","placeholder":"Choose a due date","mandatory":false});
  35. modulesList = list();
  36. modulesList.add({"label":"Lead","value":"lead"});
  37. modulesList.add({"label":"Contact","value":"contacts"});
  38. inputs.add({"type":"select","name":"module","label":"Type of module","placeholder":"Choose a module","trigger_on_change":true,"options":modulesList});
  39. inputs.add({"type":"textarea","name":"description","label":"Description","hint":"Enter description","placeholder":"","min_length":0,"max_length":1000,"mandatory":false});​
  40. inputs.add({"type":"select","name":"priority","label":"Priority","placeholder":"Choose a priority","mandatory":false,"options":priorityList});
  41. inputs.add({"type":"select","name":"status","label":"Status","placeholder":"Choose a status","mandatory":false,"options":statusList});
  42. return {"type":"form","title":"Create a task","hint":"Name the task and assign a user","name":"createTask","button_label":"Create","actions":{"submit":{"type":"invoke.function","name":"createTask"}},"inputs":inputs};

Note : Make sure to replace the connection link name

Creating a connection:
  • Click on the connections button on the top right of the code editor.
  • Click on the Create Connection button
  • In default services, select the Zoho OAuth service and enable the following scopes:
    • ZohoCRM.modules.ALL
    • ZohoCRM.settings.ALL
  • Now authorize the connection

Step 2: Create a Form Function

 The second step is to create a form function that will handle the creation of the task in Zoho CRM. To do this, navigate to  Bots & Tools > Integrations > Functions > Create , and name your function " createTask ". Add a description and select the function type as form.

Then, paste the provided code in the form submit handler, which will handle the form submission and create a task in Zoho CRM.

  1. info form;
  2. paramsMap = map();
  3. labelList = list();
  4. formValues = form.get("values");
  5. module = formValues.get("module").get("label");
  6. subject = formValues.get("task");
  7. labelList.add({"Subject":subject});
  8. paramsMap.put("Subject", subject);
  9. description = formValues.get("description");
  10. if(description.length() > 0)
  11. {
  12.  labelList.add({"Description":description});
  13.  paramsMap.put("Description", description); 
  14. }
  15. dueDate = formValues.get("date");
  16. if(dueDate.length() > 0)
  17. {
  18.  dueDate = dueDate.toString("yyyy-MM-dd");
  19.  paramsMap.put("Due_Date", dueDate);
  20. }
  21. else 
  22. {
  23.  dueDate = "-";
  24. }
  25. labelList.add({"Due Date":dueDate});
  26. priority = formValues.get("priority");
  27. if(priority.keys().size() > 0)
  28. {
  29.  priority = priority.get("label");
  30.  paramsMap.put("Priority", priority);
  31. }
  32. else 
  33. {
  34.  priority = "High";
  35. }
  36. labelList.add({"Priority":priority});
  37. status = formValues.get("status");
  38. if(status.keys().size() > 0)
  39. {
  40.  status = status.get("label");
  41.  paramsMap.put("Status", status);
  42. }
  43. else 
  44. {
  45.  status = "Not Started";
  46. }
  47. labelList.add({"Status":status});
  48. if(module == "Lead")
  49. {
  50.  leadID = formValues.get("lead").get("value");
  51.  paramsMap.put("What_Id", leadID);
  52.  paramsMap.put("$se_module", "Leads");
  53.  labelList.add({"Lead":formValues.get("lead").get("label")});
  54. }
  55. else if(module == "Contact") 
  56. {
  57.  contactDetails = formValues.get("contact").keys();
  58.  if(contactDetails.size() > 0)
  59.  {
  60.   contactID = formValues.get("contact").get("value");
  61.   paramsMap.put("Who_Id", contactID);
  62.   labelList.add({"Contact":formValues.get("contact").get("label")});
  63.  }
  64.  assciatedModule = formValues.get("contactModule").get("value");
  65.  if(assciatedModule == "account")
  66.  {
  67.   choosenModule = "Accounts";
  68.  }
  69.  else 
  70.     {
  71.   choosenModule = "Deals";
  72.     }
  73.  accountOrDealID = formValues.get(assciatedModule).get("value");
  74.  paramsMap.put("What_Id", accountOrDealID);
  75.  paramsMap.put("$se_module", choosenModule);
  76.  labelList.add({choosenModule:formValues.get(assciatedModule).get("label")});
  77. }
  78. params = map();
  79. params.put("data", [paramsMap]);
  80. createTask = invokeurl
  81. [
  82.  url: "https://www.zohoapis.com/crm/v2/tasks"
  83.  type: POST
  84.  parameters: params+""
  85.  detailed : true
  86.  connection: "CONNECTION LINK NAME"
  87. ];
  88. info createTask;
  89. if(createTask.get("responseCode") == 201)
  90. {
  91.  response = {"text":"### Task has been created successfully 👍","card":{"theme":"10"},"slides":[{"type":"label","data":labelList}],"buttons":[{"label":"View","action":{"type":"open.url","data":{"web":"https://crm.zoho.com/crm/tab/Tasks/"+createTask.get("responseText").get("data").toMap().get("details").get("id")}}}]};
  92. }
  93. else 
  94. {
  95.  response = {"text":"Something went wrong with the integration. Please try again after some time!!!","type":"banner","status":"failure"};
  96. }
  97. return response;

Step 3: Update with Form Change Handler

The third step is to create a form change handler that will update the task details as the user fills out the form. To do this, navigate to the form change handler and paste the provided code in the script editor.

  1. targetName = target.get("name");
  2. info targetName;
  3. formValues = form.get("values");
  4. info formValues;
  5. actions = list();
  6. if(targetName == "module")
  7. {
  8.  modulesList = {"task","description","date","module","priority","status"};
  9.  allKeys = formValues.keys();
  10.  for each  key in allKeys
  11.  {
  12.   if(!modulesList.contains(key))
  13.   {
  14.    actions.add({"type":"remove","name":key});
  15.   }
  16.  }
  17.  fieldValue = formValues.get("module").keys();
  18.  if(fieldValue.size() > 0)
  19.  {
  20.   label = formValues.get("module").get("label");
  21.   if(label == "Lead")
  22.   {
  23.    leadsList = list();
  24.    getAllLeads = invokeurl
  25.    [
  26.     url :"https://www.zohoapis.com/crm/v2/leads"
  27.     type :GET
  28.     connection:"CONNECTION LINK NAME"
  29.    ];
  30.    leads = getAllLeads.get("data");
  31.    leadlist = List();
  32.    i = 0;
  33.    for each  lead in leads
  34.    {
  35.     if(i == 10)
  36.     {
  37.      break;
  38.     }
  39.     leadName = lead.get("Full_Name");
  40.     leadId = lead.get("id");
  41.     leadsList.add({"label":leadName,"value":leadId});
  42.     i = i + 1;
  43.    }
  44.    actions.add({"type":"add_after","name":"module","input":{"type":"dynamic_select","name":"lead","label":"Lead","hint":"Choose a lead","placeholder":"","mandatory":true,"options":leadsList}});
  45.   }
  46.   else if(label == "Contact")
  47.   {
  48.    contactsList = list();
  49.    getContacts = invokeurl
  50.    [
  51.     url :"https://www.zohoapis.com/crm/v2/Contacts"
  52.     type :GET
  53.     connection:"CONNECTION LINK NAME"
  54.    ];
  55.    info getContacts;
  56.    contacts = getContacts.get("data");
  57.    i = 0;
  58.    for each  contact in contacts
  59.    {
  60.     if(i == 10)
  61.     {
  62.      break;
  63.     }
  64.     contactName = contact.get("Full_Name");
  65.     contactID = contact.get("id");
  66.     contactsList.add({"label":contactName,"value":contactID});
  67.     i = i + 1;
  68.    }
  69.    actions.add({"type":"add_after","name":"module","input":{"type":"select","name":"contact","label":"Contact","hint":"Choose a contact","placeholder":"","mandatory":false,"options":contactsList,"trigger_on_change":true}});
  70.    contactModuleList = list();
  71.    contactModuleList.add({"label":"Account","value":"account"});
  72.    contactModuleList.add({"label":"Deal","value":"deal"});
  73.    actions.add({"type":"add_after","name":"contact","input":{"type":"select","name":"contactModule","label":"Associated Module","hint":"Choose a module","placeholder":"","mandatory":true,"options":contactModuleList,"trigger_on_change":true}});
  74.   }
  75.  }
  76. }
  77. else if(targetName == "contact")
  78. {
  79.  contactsList = {"task","description","date","module","contact","contactModule","priority","status"};
  80.  allKeys = formValues.keys();
  81.  for each  key in allKeys
  82.  {
  83.   if(!contactsList.contains(key))
  84.   {
  85.    actions.add({"type":"remove","name":key});
  86.   }
  87.  }
  88.  actions.add({"type":"clear","name":"contactModule"});
  89.  actions.add({"type":"clear","name":"deal"});
  90.  actions.add({"type":"clear","name":"account"});
  91. }
  92. else if(targetName == "contactModule")
  93. {
  94.  contactsList = {"task","description","date","module","contact","contactModule","priority","status"};
  95.  allKeys = formValues.keys();
  96.  for each  key in allKeys
  97.  {
  98.   if(!contactsList.contains(key))
  99.   {
  100.    actions.add({"type":"remove","name":key});
  101.   }
  102.  }
  103.  label = formValues.get("contactModule").keys();
  104.  if(label.size() > 0)
  105.  {
  106.   labelValue = formValues.get("contactModule").get("label");
  107.   if(labelValue == "Deal")
  108.   {
  109.    moduleName = "deals";
  110.   }
  111.   else if(labelValue == "Account")
  112.   {
  113.    moduleName = "accounts";
  114.   }
  115.   contactsKeys = formValues.get("contact").keys();
  116.   if(contactsKeys.size() > 0)
  117.   {
  118.    contactId = formValues.get("contact").get("value");
  119.    url = "https://www.zohoapis.com/crm/v2/Contacts/" + contactId + "/" + moduleName;
  120.   }
  121.   else
  122.   {
  123.    url = "https://www.zohoapis.com/crm/v2/" + moduleName;
  124.   }
  125.   getAllDetails = invokeurl
  126.   [
  127.    url :url
  128.    type :GET
  129.    connection:"CONNECTION LINK NAME"
  130.   ];
  131.   info getAllDetails;
  132.   details = getAllDetails.get("data");
  133.   if(!details.size() > 0)
  134.   {
  135.    url = "https://www.zohoapis.com/crm/v2/" + moduleName;
  136.    getAllDetails = invokeurl
  137.    [
  138.     url :url
  139.     type :GET
  140.     connection:"CONNECTION LINK NAME"
  141.    ];
  142.    info getAllDetails;
  143.    details = getAllDetails.get("data");
  144.   }
  145.   detailsList = list();
  146.   i = 0;
  147.   for each  detail in details
  148.   {
  149.    if(i == 10)
  150.    {
  151.     break;
  152.    }
  153.    if(labelValue == "Deal")
  154.    {
  155.     dealName = detail.get("Deal_Name");
  156.     dealID = detail.get("id");
  157.     detailsList.add({"label":dealName,"value":dealID});
  158.    }
  159.    else if(labelValue == "Account")
  160.    {
  161.     AccountName = detail.get("Account_Name");
  162.     AccountID = detail.get("id");
  163.     detailsList.add({"label":AccountName,"value":AccountID});
  164.    }
  165.    i = i + 1;
  166.   }
  167.   actions.add({"type":"add_after","name":"contactModule","input":{"type":"dynamic_select","name":labelValue.toLowerCase(),"label":labelValue.proper(),"hint":"","placeholder":"Select a " + labelValue,"mandatory":true,"options":detailsList}});
  168.  }
  169. }
  170. return {"type":"form_modification","actions":actions};

Step 4: Dynamic Handler

Now navigate to the Dynamic Handler and paste this code:

  1. info target;
  2. typeList = list();
  3. searchValue = target.get("query");
  4. formValues = form.get("values");
  5. if(target.get("name") == "lead")
  6. {
  7.  getLeads = invokeurl
  8.  [
  9.   url :"https://www.zohoapis.com/crm/v2/leads"
  10.   type :GET
  11.   connection:"CONNECTION LINK NAME"
  12.  ];
  13.  //info getLeads;
  14.  leads = getLeads.get("data");
  15.  for each  lead in leads
  16.  {
  17.   if(lead.containsIgnoreCase(searchValue))
  18.   {
  19.    if(typeList == 100)
  20.    {
  21.     break;
  22.    }
  23.    leadName = lead.get("Full_Name");
  24.    leadId = lead.get("id");
  25.    lead = {"label":leadName,"value":leadId};
  26.    typeList.add(lead);
  27.   }
  28.  }
  29. }
  30. else if(target.get("name") == "account")
  31. {
  32.  contactsKeys = formValues.get("contact").keys();
  33.  if(contactsKeys.size() > 0)
  34.  {
  35.   contactId = formValues.get("contact").get("value");
  36.   url = "https://www.zohoapis.com/crm/v2/Contacts/" + contactId + "/accounts";
  37.  }
  38.  else
  39.  {
  40.   url = "https://www.zohoapis.com/crm/v2/accounts";
  41.  }
  42.  getAccounts = invokeurl
  43.  [
  44.   url :url
  45.   type :GET
  46.   connection:"CONNECTION LINK NAME"
  47.  ];
  48.  //info getLeads;
  49.  accounts = getAccounts.get("data");
  50.  if(!accounts.size() > 0)
  51.  {
  52.   url = "https://www.zohoapis.com/crm/v2/accounts";
  53.   getAccounts = invokeurl
  54.   [
  55.    url :url
  56.    type :GET
  57.    connection:"CONNECTION LINK NAME"
  58.   ];
  59.  }
  60.  for each  account in accounts
  61.  {
  62.   if(account.containsIgnoreCase(searchValue))
  63.   {
  64.    if(typeList == 100)
  65.    {
  66.     break;
  67.    }
  68.    AccountName = account.get("Account_Name");
  69.    AccountID = account.get("id");
  70.    typeList.add({"label":AccountName,"value":AccountID});
  71.   }
  72.  }
  73. }
  74. else if(target.get("name") == "deal")
  75. {
  76.  contactsKeys = formValues.get("contact").keys();
  77.  if(contactsKeys.size() > 0)
  78.  {
  79.   contactId = formValues.get("contact").get("value");
  80.   url = "https://www.zohoapis.com/crm/v2/Contacts/" + contactId + "/deals";
  81.  }
  82.  else
  83.  {
  84.   url = "https://www.zohoapis.com/crm/v2/deals";
  85.  }
  86.  getDeals = invokeurl
  87.  [
  88.   url :url
  89.   type :GET
  90.   connection:"CONNECTION LINK NAME"
  91.  ];
  92.  deals = getDeals.get("data");
  93.  if(!deals.size() > 0)
  94.  {
  95.   url = "https://www.zohoapis.com/crm/v2/deals";
  96.   getDeals = invokeurl
  97.   [
  98.    url :url
  99.    type :GET
  100.    connection:"CONNECTION LINK NAME"
  101.   ];
  102.   deals = getDeals.get("data");
  103.  }
  104.  for each  deal in deals
  105.  {
  106.   if(deal.containsIgnoreCase(searchValue))
  107.   {
  108.    if(typeList == 100)
  109.    {
  110.     break;
  111.    }
  112.    dealName = deal.get("Deal_Name");
  113.    dealID = deal.get("id");
  114.    typeList.add({"label":dealName,"value":dealID});
  115.   }
  116.  }
  117. }
  118. return {"options":typeList};

Message Action

Besides the Command method, you can also use Message Actions to create a task in Zoho CRM directly from a chat. To do this, navigate to  Bots & Tools > Integrations > Message Action > Create , and create a new message action.

In the message action creation window, you will need to enter a name, description, and choose the access level. Then, paste the provided code in the script editor.

  1. description = message.get("text");
  2. if(description.length() >= 1000)
  3. {
  4.  description = description.subString(0,1000);
  5. }
  6. fetchFields = invokeurl
  7. [
  8.  url :"https://www.zohoapis.com/crm/v2/settings/fields?module=Tasks"
  9.  type :GET
  10.  connection:"CONNECTION LINK NAME"
  11. ];
  12. //info fetchFields;
  13. allFields = fetchFields.get("fields");
  14. priorityList = list();
  15. statusList = list();
  16. for each  field in allFields
  17. {
  18.  if(field.get("api_name") == "Priority")
  19.  {
  20.   pickListValues = field.get("pick_list_values");
  21.   for each  pickList in pickListValues
  22.   {
  23.    displayName = pickList.get("display_value");
  24.    priorityList.add({"label":displayName,"value":displayName.replaceAll(" ","_")});
  25.   }
  26.  }
  27.  else if(field.get("api_name") == "Status")
  28.  {
  29.   pickListValues = field.get("pick_list_values");
  30.   for each  pickList in pickListValues
  31.   {
  32.    displayName = pickList.get("display_value");
  33.    statusList.add({"label":displayName,"value":displayName.replaceAll(" ","_")});
  34.   }
  35.  }
  36. }
  37. inputs = list();
  38. inputs.add({"type":"text","name":"task","label":"Task Name","hint":"Enter a subject","placeholder":"","min_length":8,"max_length":100,"mandatory":true});
  39. inputs.add({"type":"textarea","name":"description","label":"Description","hint":"Enter description","placeholder":"","min_length":5,"max_length":1000,"mandatory":false,"value":description});
  40. inputs.add({"type":"date","name":"date","label":"Due Date","placeholder":"Choose a due date","mandatory":false});
  41. modulesList = list();
  42. modulesList.add({"label":"Lead","value":"lead"});
  43. modulesList.add({"label":"Contact","value":"contacts"});
  44. inputs.add({"type":"select","name":"module","label":"Type of module","placeholder":"Choose a module","trigger_on_change":true,"options":modulesList});
  45. inputs.add({"type":"select","name":"priority","label":"Priority","placeholder":"Choose a priority","mandatory":false,"options":priorityList});
  46. inputs.add({"type":"select","name":"status","label":"Status","placeholder":"Choose a status","mandatory":false,"options":statusList});
  47. return {"type":"form","title":"Create a task","hint":"Name the task and assign a user","name":"createTask","button_label":"Create","actions":{"submit":{"type":"invoke.function","name":"createTask"}},"inputs":inputs};

Note : Make sure to replace the connection link name
This code will create a message action that you can use to create a task in Zoho CRM. Once used on a message, the createTask function created earlier will handle the task creation process (and the message will automatically be entered as the task description).

In summary, by following these steps, users can create a task in Zoho CRM directly from a chat in Zoho Cliq using either Command or Message Action. This can save time and streamline the workflow for teams that use both Zoho Cliq and Zoho CRM.


    • Sticky Posts

    • Automating Employee Birthday Notifications in Zoho Cliq

      Have you ever missed a birthday and felt like the office Grinch? Fear not, the Cliq Developer Platform has got your back! With Zoho Cliq's Schedulers, you can be the office party-cipant who never forgets a single cake, balloon, or awkward rendition of
    • Accelerate Github code reviews with Zoho Cliq Platform's link handlers

      Code reviews are critical, and they can get buried in conversations or lost when using multiple tools. With the Cliq Platform's link handlers, let's transform shared Github pull request links into interactive, real-time code reviews on channels. Share
    • App Spotlight : PagerDuty for Zoho Cliq

      App Spotlight brings you hand-picked apps to enhance the power of your Zoho apps and tools. Visit the Zoho Marketplace to explore all of our apps, integrations, and extensions. In today's fast-paced world, seizing every moment is essential for operational
    • Automate your status with Cliq Schedulers

      Imagine enjoying your favorite homemade meal during a peaceful lunch break, when suddenly there's a PING! A notification pops up and ruins your moment of zen. Even worse, you might be in a vital product development sprint, only to be derailed by a "quick
    • Bulk user onboarding for Cliq Channels in a jiffy

      As developers, we frequently switch between coding, debugging, and optimizing tasks. The last thing we want is to be burdened by manual user management. Adding users one by one to a channel is tedious and prone to errors, taking up more time than we could
    • Recent Topics

    • Zoho Books | Product updates | July 2025

      Hello users, We’ve rolled out new features and enhancements in Zoho Books. From plan-based trials to the option to mark PDF templates as inactive, explore the updates designed to enhance your bookkeeping experience. Introducing Plan Based Trials in Zoho
    • Mail Search should allow grouping by conversation like Gmail.

      Having switched from gmail I have found the search function hard to use. Mostly because mail is not grouped by conversation in search. If I search for a word when looking for a conversation had with someone then sometimes 10 emails will come up from the
    • Improve Zoho Learn updated article notifications

      I noticed today while updating an article, that the notification users get says "[User Name] has published article [Article Name]..." My feedback to the product team is that it would be really helpful for an end user, if the system notification differentiated
    • Safari Support

      Safari, the world's second largest browser, zoho desk does not officially or fully support. That needs to change.
    • Can I get images from an "Image Upload" field in a webhook?

      I want to send images from 2 "image upload" fields via a webhook. Is this possible?
    • Ticket closure notification - all contacts cc'd on email thread

      Hello, If a client sends an email to our service desk and cc's in other people that work at the same company - so that they are in the loop of the service request. When the we close the ticket, only the ticket owner (person who emailed us - which created
    • Inactive account cleanup policy for Zoho Sign

      Zoho Sign reserves the right to delete accounts that are license free and inactive for more than 120 days. The account deletion will be initiated only after the user receives prior email notice about possible data deletion and how to backup the data.
    • Missde API documentation for Sales Receipt

      Hi! I noticed that the Sales Receipt endpoint is not currently listed in your API documentation (https://www.zoho.com/books/api/v3/introduction/). Could you please provide any available temporary documentation for this endpoint, along with a detailed
    • Multi-currency in Zoho CRM Forecast and Reports

      As a company we have branches in 4 different countries with as many different currencies. Our Sales Teams would like to work with their local currency as much as possible. The Forecast module using only 1 currency is practically usable only by the sales
    • How to select from pricebook when creating a salesorder or quote

      I am creating a sales order and when selecting the Products I do not see any where to select from pricebooks. How do i associate this to my orders?
    • 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
    • I cannot find my older documents from 2024 and 2023

      I cannot find my older documents from 2024 and 2023.
    • System default SLA descriptions can't be modified

      The system default SLAs have identical descriptions for all SLA levels, but their settings differ. However, I am facing an issue where I cannot modify these descriptions and save the changes. The content of the description box can be edited but the changes
    • Customising Help Center

      Hi I don't think it is possible to add custom pages to help center? We'd like to use this as a customer portal with support tickets, FAQ/Guides, Billing and contracts. Is there any plans to add a feature like this or an alternative way to do it other
    • Replies sometimes creating separate ticket

      Sometimes when a customer responds to an email coming from Zoho Desk, instead of adding a reply to the original ticket, a separate ticket is created. This happens even though the response subject line contained the ticket number, and the person responding
    • Ticket Approvals - External Users

      The ticket approval option - we need to be able to select external users (Contacts) for approvals. Sometimes we are working with an end user and their boss needs to approve a purchase. For example, working with a cashier on a broken cash register and
    • Force Users to Ask Answer Bot a question... First

      End users will always skip talking to a bot. It would be nice if Zoho adopted the standard and forced users to first ask a question to answer bot (or zia in some fashion) and then pass to the agent if it wasn't answered. Options to force the user to speak
    • View Answer Bot conversations?

      We are trialing Zia and are experimenting with Answer Bot on our knowledge base. So far so good! Management asks me if it is possible to view Answer Bot conversations, the purpose being to look over its shoulder and confirm that it is working as des
    • Mass Email an Account

      It would be nice to mass email an account stating there is an outage at their business or something specific to an account is needed to be mass communicated. Even if it makes a ticket for every Email Out to every contact in the Account. Think: the customer
    • Multiple Topics assigned to a single Campaign

      Hello, is it possible to assign multiple Topics to a single Campaign? We frequently write a content to our subscribers that spans multiple Topics and we would like to send it to all Contacts that are subscribed to at least one of the Topics. But it looks
    • Zoho Projects Fonts and Accessibility missing

      I cannot find any more the tab where I can change the font in Zoho Project. I also checked the knowledgebase and there they have accessibility tab which I am completely missing. Is there some setup I am missing or is it a problem with our account?
    • Zoho Books Custom Widgets Deprecation Error

      I created a simple sample widget with zet and published it using sigma Both in the Sandbox and Production the Widgets are showing this error
    • Problems with PDF files in notebook

      I'm evaluating Zoho Notebook as an alternative to Evernote and imported my Evernote account to Zoho Notebook. First issue is that notes in Evernote that comprise a PDF are turned into a 'group' with a single note page (that has the text from the Evernote
    • API (v3) Tasks sorting issue

      We are using the v3 API for Projects. When we gat all tasks, per page of 100 tasks, we get the task info alright. But when we try to sort based on DESC(last_modified_time) we don't get the correct sort order. It is roughly sorted by the last_modified_time,
    • Assemblies make my stock go negative

      I am sure this is just the way that we are using this feature, but we use assemblies, a lot. The issue for us is the way that the relive inventory and the fact that it makes our composite item stock go negative. I have added flows to auto assemble and
    • User Activity Reports

      I'd like to get data related to user activity.  For example, Login and logout times, emails sent/received, new records created , etc. Is that currently available. I just can't seem to find anything . Thanks, Dave
    • Help: Populate “Contact Owner” details into Customer custom fields (for email templates) in Zoho Books

      We want to send invoices on behalf of our sales agents, and include the agent’s name, email, and phone in the email body using placeholders. Plan is to copy the Customer Owner details into three Customer custom fields, so they can be used as placeholders
    • Undocumented Books API error message - 1000 - The requested action could not be completed. Please try again. | Unexpected error

      This code sometimes throws this error 1000 - The requested action could not be completed. Please try again. | Unexpected error What does it mean? result = zoho.books.updateRecord("salesorders",organization.get("organization_id"),salesorder_id,sales_
    • Partial payments for retainer invoices

      When a customer does not pay the entire retainer invoice there is no way to apply a partial payment. PLEASE add this function.
    • Making Tags Mandatory

      When creating an expense, is it possible to make the Tags field mandatory?  I see the option in settings to make other fields mandatory, like Merchant, Description, Customer, etc, but nothing about Tags. Thanks! Kevin
    • Mass Update not trigger workflows

      Hi, I have performed a mass update of all records in a custom module using a custom view. I have a dummy checkbox on my module that I turn on or off - hoping to trigger all the new workflows that have been created for that module. However, no workflows
    • Multi-Select lookup field has reached its maximum??

      Hi there, I want to create a multi-select lookup field in a module but I can't select the model I want the relationship to be with from the list. From the help page on this I see that you can only create a max of 2 relationships per module? Is that true?
    • Generating CRM reports based on date moved in staged history

      Hi everyone, I'm trying to generate CRM reports of jobs (I think these are called usually deals) based on when they were moved to a particular stage, ie all jobs that were moved to Proposal/Quote in the previous financial year. I can see from other similar
    • Modules for missed calls, emails, texts etc

      Hi there. Is there a way to create a module that would automatically show a list of all inbound calls that were missed by our users, as well as any inbound SMS's, emails & WhatsApp messages. That way, a user who is available, can work through that list
    • Subforms and automation

      If a user updates a field how do we create an automation etc. We have a field for returned parts and i want to get an email when that field is ticked. How please as Zoho tells me no automation on subforms. The Reason- Why having waited for ever for FSM
    • Conditional layouts - support for multi-select picklists

      Hi, The documentation for conditional layouts says the following: "Layout Rules cannot be used on the following field types: Auto Number Lookup Multi Select Lookup User Lookup Formula File Upload Multi Line" I have a custom module with a multi-pick list
    • Ability to Set a General Email Signature for the Organization in Zoho Recruit

      Dear Zoho Recruit Team, I hope you're doing well. We would like to request a feature that would allow us to set a general email signature at the organizational level within Zoho Recruit. Currently it is only possible for individual users to create their
    • Custom Buttons & Links Now Supported in Portals

      We’ve just made portals in Zoho Recruit more powerful and customizable than ever! You can now bring the power of Custom Buttons and Links to your Candidate, Client, Vendor, and Custom Portals — enabling portal users to take direct action without recruiter
    • Is there a way to show contact emails in the Account?

      I know I can see the emails I have sent and received on a Contact detail view, but I want to be able to see all the emails that have been sent and received between all an Accounts Contacts on the Account Detail view. That way when I see the Account detail
    • Live webinar: Transform data into impactful visuals with Zoho Show

      Data is frequently a core part of a presentation, whether it’s a sales pitch, project update, research report, or performance review. But when it’s just numbers on a page, the message you’re trying to convey can get buried. The real magic happens when
    • Next Page