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

    • Feature announcement: AI-powered document generator in Zoho Sign

      Hi there! We recently announced manual document creation by offering an editor within Zoho Sign. Today, we are excited to announce AI-powered document generation to help you draft agreements, purchase orders, and other important business documents in
    • Permanently deleted files

      Is there a way to get back permanently deleted files from your account if they were accidentally deleted and no longer recoverable from the recycling bin? I know I am probably screwed but I just figured I would ask.
    • Shared Mailbox in iOS app

      Hi, On the desktop I am using a Shared mailbox for our company's general mailbox that somebody else should be able to view. In the iOS app however I can't find it? Old sources on the internet says this isn't possible but that can't be right? Somebody
    • Tip #41- Simplify Compliance and Efficiency with Zoho Assist’s Data Cleanup Feature- 'Insider Insights'

      Managing device data efficiently is just as important as securing remote access. With Zoho Assist’s Data Cleanup feature, admins can easily remove outdated or unnecessary device records, keeping the console organized and secure. This action is carried
    • Revenue Management: #6 Revenue Recognition in Professional Services Industry

      If you run a consulting firm, agency, or any service-based business, you have a situation where you have signed the contract, maybe even sent the invoice, and have received some initial payments. So, can you consider this as revenue? What if the project
    • Zoho fsm scheduled maintenance dispatch

      Hi, I'm reaching out regarding an issue I'm encountering with the Scheduled Maintenance feature in Zoho FSM. I’m trying to configure it so that it automatically dispatches all maintenance jobs scheduled within the next 150 days, starting from today. However,
    • zoho.inventory.getRecords returns no records

      I running a custom function (Deluge) in Zoho Flow with a connection to Zoho Inventory. To debug the problem, I created the test function below. It returns "Number of contacts fetched: 0". This confirms that there's no issue with the org ID or connection
    • Zoho Campaigns Event timestamps do not propagate to Zoho CRM

      We have integrated Zoho CRM and Zoho Campaigns. But when looking at Contact records, the Campaign event data is missing the actual timestamps: especially when a particular email was sent. They're not in the Campaigns related list, and the cannot be found
    • Feature announcement - Simplifying document creation with Zoho Sign

      Hi there, We are pleased to announce the release of our document creation feature, enabling you to create, edit, and finalize documents like agreements, purchase orders, and contracts without relying on external tools or applications. <br> This
    • Integrating File Attachments in Zoho Flow Email Notifications

      Hi, I would like to be able to send an email once an entry is made in a form, and in this email, I would like to attach a file that has been added to the form using the ImageUpload (or FileUpload) widget. So, I started by creating a flow that will trigger
    • Zoho project purchases

      Hi Folks, I think having a purchase module in projects will help in putting together a project p and L. Project wise purchases and expenses.  Do let me know your thoughts.
    • Create Tasklist with Tasklist Template using API v3

      In the old API, we could mention the parameter 'task_template_id' when creating a tasklist via API to apply a tasklist template: https://www.zoho.com/projects/help/rest-api/tasklists-api.html#create-tasklist In API v3 there does not seem to be a way to
    • How can I restore all the deleted Time entries of a Task in Zoho Projects

      How can I restore all the deleted Time entries of a Task in Zoho Projects? Query: In Zoho Projects, I cloned a task and deleted the time entries from the cloned task. However, this also deleted the time entries from the original task. How can I restore
    • Is there a way to make an account inactive in ZoHo Desk

      We have a few Clients "Accounts" that we no longer do business with. It would be beneficial for them to not show up in lists. However, we want to go back and view tickets, time, etc.
    • How to set the value of the Phone field importing contacts in Zoho Desk

      Hi everyone, i'm new in Zoho Desk, we're setting up the environment and i'm importing contacts from another CRM using a file CSV and i'm getting a problem with phone numbers (italian): the leading zero is cut away, also if the value is inside double quotes.
    • Set Custom Icon for Custom Modules in new Zoho CRM UI

    • Deprecation Notice: OpenAI Assistants API will be shut down on August 26, 2026

      I recieved this email from openAI what does it means for us that are using the integration and what should we do? Earlier this year, we shared our plan to deprecate the Assistants API once the Responses API reached feature parity. With the launch of Conversations,
    • How to center a field inside a section?

      I’ve been trying to center a field inside a section in Zoho Canvas. When I align it visually, it looks centered in the editor, but after clicking Save, the field appears misaligned on the actual canvas. I also tried setting the field to full width, but
    • Kaizen #192 - Implementing Custom Token Persistence in Python SDK

      Welcome back to another week of Kaizen! Last week, we discussed how to implement Login with Zoho using OAuth 2.0 and saw how to bring it to life in a real-world application with the Zoho CRM Python SDK. We also discussed how Zylker Academy built a custom
    • Showing the map along with mileage expense

      When you use the GPS to track mileage, it shows you the map of the actual path travelled. It would be very useful and practical to save that map with the mileage expense, so that when the report is created, it provides a map of each mileage expense associated
    • Enable Validation Rule for Multi-Select Picklist Field

      Zoho, Please allow validation rules for multi-select fields.
    • File Upload field not showing in workflow

      Hi, I have added a field on Zoho CRM. I want to use it in a workflow where that particular field is updated based on another field, however it is not showing up in the field list to select it in the workflow. Why is this please?
    • CRM Custom function updating a module record shows the Super Admin user as the record modifier

      Dear Zoho CRM Team, Is there any way to update this so that when a custom function has updated a record the Super Admin user doesn't become the modifier? This happens on the record as a modifier and shows up in the audit logs. It would be more useful
    • Best practice importing items and matching assemblies

      Hi, I was wondering what would be the best practice to import items and composite items (assemblies) From my backup, what should I import first? The items or the composite items? I am on Zoho one, using inventory and books. Kind regards, Sabine
    • Best way to fetch employee names from Zoho People into Zoho Creator Inventory Stock Form field Employee Name Lookup

      Hi Team, I have a requirement in my Zoho Creator application (Inventory Stock Adjustment) where I need to fetch employee names from Zoho People and use them as a lookup in a form. Currently, I am considering using an integration field to fetch this data
    • get file api is returning Junk data

      I am working on extension development where at one point I need to retrieve attachments on records I found out I can use only invokeconnection and not invokeurl in extension development The invoke connection returns the image in raw binary format. When
    • Need help with message box

      End user updates many records at once. Each have unique serial number. They want a confirmation box that says starting number, ending number and qty. Is there any way to do this? I been searching and asking support but seems like no great solution.
    • [Webinar] The Transformative Power of Gen BI

      Traditional decision-making tools are no longer enough. The integration of generative AI into business intelligence (BI) is proving to be a true game changer—enabling businesses to make faster, smarter, and better informed decisions. Early adopters of
    • Backorder process review - Automating Removal of Sales Order from "On Hold" When PO is Received

      Hello Zoho Inventory Team, Currently, sales orders in On Hold status are released only when the bill for the purchase order is created. In our workflow, it would be much more efficient if the sales order could automatically move out of On Hold as soon
    • How to access the saved Query using API?

      I have created a query in setting. Is it possible to access it from a API? What's the endpoint? I tried /v8/queries/important_deals but didnt' work.
    • création d'une base de données

      base de donnee d'un lycée
    • User Session variables to recall after form submit & redirect to menu

      Hey, Forgive me if this is a simple answer I have overlooked. I have built a big onboarding process for my SAAS platform which is built and managed by an external Dev team. I am hoping to embed my new creator app on the SAAS platform. I have a menu page
    • Zoho Writer Merge Template with data from Zoho Analytics Views

      Hello, Is there any way to pull information from Zoho Analytics and put it into a Merge Template? I am trying to create a bulk export of one report that filters on a field to create a single document for each of the filter fields.
    • Having to enter bill before stock shows as available.

      Hi, Am I right in thinking you must create a bill from the purchase order receipt before the goods are available for shipping?
    • Agent Availability Report

      From data to decisions: A deep dive into ticketing system reports Businesses need to track when their support agents check in and check out from work. This report, titled Agent Availability, is one of the static reports that helps managers track the number
    • Writing by Hand in "Write" Notes

      Hi there! I just downloaded this app a few moments ago, and I was wondering if there was a way to write things by hand in "Write" mode instead of just typing in the keyboard. It would make things a bit more efficient for me in this moment. Thanks!
    • AI-driven construction analytics using Zoho Projects Plus

      Construction projects thrive on timelines; if a project is completed on or before the expected time, it makes headlines, but if it gets delayed, the company’s credibility will be at risk. Such projects require precise planning and constant monitoring,
    • Canadian payroll

      Hello ZOHO, is any updates on when payroll for Canada will be available?
    • Unified customer view: Bringing product intelligence into your CRM data

      For businesses today, applications and digital interfaces are the main touch points in the customer journey. While Zoho CRM data already tells who your customers are and what they buy, Zoho Apptics tells you how they interact and engage with your product.
    • Zoho Creator SaaS app with multiple client AND multiple users

      I am close to finalizing a Zoho Creator app that will be used by different companies to manage sale info, and each company can have multiple users using the app. Things were going perfectly until I tried a search on a report. I use a database field in each table to separate the data for each company, which works great. BUT when I do a search, I get to see ALL the data. This means that Company A could easily see the data from Companies B and C via the built-in search. Is there a way to set up the
    • Next Page