I wish remote work were permanently mandated so we could join work calls from a movie theatre or even while skydiving! But wait, it's time to wake up! The alarm has snoozed twice, and your team has already logged on for the day.
Keeping tabs on attendance shouldn't feel like guiding a flock of rebellious sheep. Hence, let's automate check-in and check-out notifications using the Zoho Cliq Platform Schedulers and the Zoho People API, eliminating the guesswork in attendance management and reducing the risk of errors associated with manual monitoring.
How does this solution benefit a business?
- Real-time reminders reduce instances of ghost check-ins and ensure accurate recording of everyone's logged hours.
- Essential for attendance tracking, payroll accuracy, compliance with labour laws, and audits.
- The entire team stays informed, fostering a cohesive workflow that eliminates the need for micromanagement.
Pre-requisites:
Before beginning to script the code below, we must create a connection in Cliq with Zoho People. Once a connection is created and connected, you can use it in Deluge integration tasks and invoke URL scripts to access data from the required service.
Create a Zoho People default connection with any unique name with the scopes - ZohoPeople.Attendance.ALL , ZohoPeople.forms.ALL and ZohoPeople.leave.ALL
ⓘ Document for reference : Connections in Cliq
How to obtain or locate the channel unique name in Cliq?
Navigate to the top right corner of the channel and locate the three dots. Click it.
In the menu that appears, select "Channel info" and a pop-up will open, displaying detailed channel information.
Hover over the "Connectors" section and click it. Under "API Parameters," you will find the Channel ID and unique name.
We need to create two schedulers, specifically one for check-in and another for check-out.
- After a successful login in Cliq, hover to the top right corner and click your profile. Post clicking, navigate to Bots & Tools > Schedulers.
- On the right, click the "Create Scheduler" button.
- To learn more about schedulers and their purposes, refer to the Introduction to Schedulers.
- Create a scheduler using your preferred name. Specify the following details: the scheduler name and a description.
- For the recurring period, choose the type "Weekly." Select Monday through Friday and set the time of execution to 11 AM or any other time that aligns with your company's check-in time, or customise the recurring period based on your specific use case.
- Finally, click "Save & edit code" and paste the following code.
- currentDate = zoho.currentdate;
- currentDateString = currentDate.toString("dd-MMM-yyyy");
- fromIndex = 1;
- toIndex = 200;
- // Get all active users
- users = zoho.people.getRecords("employee",fromIndex,toIndex,{},"{CONNECTION_LINK_NAME}");
- usersList = List();
- usersList.addAll(users);
- iterations = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
- // Get All Employees ( 4000 MAX )
- if(users.size() == 200)
- {
- for each iteration in iterations
- {
- fromIndex = fromIndex + toIndex;
- toIndex = toIndex + 200;
- users = zoho.people.getRecords("employee",fromIndex,toIndex,{},"{CONNECTION_LINK_NAME}");
- if(users.size() > 0 && users.size() == 200)
- {
- usersList.addAll(users);
- }
- else if(users.size() > 0 && users.size() < 200)
- {
- usersList.addAll(users);
- break;
- }
- else
- {
- break;
- }
- }
- }
-
- // Get all the employees checkedin from the morning.
- getAttendenceEntries = invokeurl
- [
- url :"https://people.zoho.com/api/attendance/fetchLatestAttEntries?duration=240"
- type :GET
- connection:"{CONNECTION_LINK_NAME}"
- ];
- latestAttendanceRecords = getAttendenceEntries.get("response").get("result");
- checkedInUsers = List();
- for each userRecord in latestAttendanceRecords
- {
- checkedInEmployeeEmail = userRecord.get("emailId");
- checkedInUsers.add(checkedInEmployeeEmail);
- }
-
- // Get all the employees who applied for leave both approved and pending ( Remove PENDING to exclude only the leave approved employees )
- leaveApprovedEmployees = invokeurl
- [
- url :"https://people.zoho.com/api/v2/leavetracker/leaves/records?from=" + currentDateString + "&to=" + currentDateString + "&dateFormat=dd-MMM-yyyy&approvalStatus=[APPROVED,PENDING]"
- type :GET
- connection:"{CONNECTION_LINK_NAME}"
- ];
- info leaveApprovedEmployees;
- leaveApprovedEmployeesList = List();
- for each member in leaveApprovedEmployees.get("records")
- {
- leaveApprovedEmployeesList.add(member.get("EmployeeId"));
- }
- info leaveApprovedEmployeesList;
-
-
- // Add the users to yet to checkin list if they are not checked from the morning and not applied for leave
- usersYetToCheckIn = list();
- for each user in usersList
- {
- employeeEmail = user.get("EmailID");
- employeeId = user.get("EmployeeID");
- employeeStatus = user.get("Employeestatus");
- if(!checkedInUsers.contains(employeeEmail) && !leaveApprovedEmployeesList.contains(employeeId) && employeeStatus.equals("Active"))
- {
- usersYetToCheckIn.add(employeeEmail);
- }
- }
-
- // Mention the list of users in the channel.
- if(usersYetToCheckIn.size() == 0)
- {
- info "No users were found yet to checked-in at 11 PM today. Great to see everyone wrapping in on time! ✅";
- }
- else
- {
- usersYetToCheckInString = "";
- for each user in usersYetToCheckIn
- {
- usersYetToCheckInString = usersYetToCheckInString + "[" + user + "](mail:" + user + ") \n";
- }
- usersYetToCheckInString = usersYetToCheckInString.subString(0,usersYetToCheckInString.length() - 2);
- response = Map();
- card = Map();
- card.put("title","Employees who haven’t checked in yet ( " + usersYetToCheckIn.size() + " )");
- card.put("thumbnail","https://i.pinimg.com/originals/85/e9/f3/85e9f3f5ac31fc5aab586e208297f43d.gif");
- card.put("theme","modern-inline");
- response.put("card",card);
- response.put("text",usersYetToCheckInString);
- info zoho.cliq.postToChannel("{CHANNEL_UNIQUE_NAME}",response);
- }

- Now, let's follow the same steps and create a scheduler for checkout reminders. Under the recurring period, choose the type as "Weekly." Select Monday through Friday and set the time of execution to 7 PM or any other time that aligns with your company's checkout time, or customise the recurring period based on your specific use case.
- Click "Save & edit code" and paste the following code.
- attendanceResponse = invokeurl
- [
- url :"https://people.zoho.com/api/attendance/fetchLatestAttEntries?duration=600"
- type :GET
- connection:"{CONNECTION_LINK_NAME}"
- ];
- info attendanceResponse;
- todayDate = zoho.currenttime.toString("YYYY-MM-dd");
- latestAttendanceRecords = attendanceResponse.get("response").get("result");
- usersWithoutCheckout = list();
- if(latestAttendanceRecords.size() > 0)
- {
- for each userRecord in latestAttendanceRecords
- {
- userEmail = userRecord.get("emailId");
- dailyEntries = userRecord.get("entries");
- for each dailyEntry in dailyEntries
- {
- if(dailyEntry.containsKey(todayDate))
- {
- todayEntryDetails = dailyEntry.get(todayDate);
- attendanceLogs = todayEntryDetails.get("attEntries");
- for each logEntry in attendanceLogs
- {
- if(!logEntry.containsKey("checkOutTime"))
- {
- usersWithoutCheckout.add("{@" + userEmail + "}");
- }
- }
- }
- }
- }
- }
- usersWithoutCheckoutString = usersWithoutCheckout.toString("\n");
- if(usersWithoutCheckoutString.trim().length() == 0){
- usersWithoutCheckoutString = "No users were found checked-in after 7 PM today. Great to see everyone wrapping up on time! ✅";
- }
- response = Map();
- card = Map();
- card.put("title","List of users who remain checked in ( " + usersWithoutCheckout.size() + " )");
- card.put("thumbnail","https://media.tenor.com/Hd8nLZZTPRYAAAAi/alarm-clock-alarm.gif");
- card.put("theme","modern-inline");
- response.put("card",card);
- response.put("text",usersWithoutCheckoutString);
- info zoho.cliq.postToChannel("{CHANNEL_UNIQUE_NAME}",response);

Wrapping up and checking out for the day, hopefully
Whether you're from HR, tired of chasing attendance logs, or an enthusiastic team lead trying to increase your team's visibility and adjust workload accordingly, Cliq Platform's schedulers are essential and ensure that accurate tracking is consistent and compliance is maintained. Additionally, this would be scalable to handle organizations of any size.
If attendance tracking is a binge-watchable series, what plot twist would these reminders add to your team's script? Let us know in the comments below!
Recent Topics
Creating a Chart from a Report
In Zoho Analytics, is it possible to create a chart from a Pivot View report? We are looking to use Zoho Analytics to replace Excel for Sales reports and would like to be able to show both the table and the chart together.
Client Portal ZOHO ONE
Dear Zoho one is fantastic option for companies but it seems to me that it is still an aggregation of aps let me explain I have zoho books with client portal so client access their invoice then I have zoho project with client portal so they can access their project but not their invoice without another URL another LOGIN Are you planning in creating a beautiful UI portal for client so we can control access to client in one location to multiple aps at least unify project and invoice aps that would
Email Insights included in Bigin emals are marked as SPAM everywhere
Today I noticed that email recipients who use Office 365 never receive emails sent from Bigin. Further examination showed that all Email Insights links in email headers are marked as spam/phishing by Office 365. Example screen included. The problem is
Data Import | Zoho Analytics Custom Query Window Size
Please increase the window size for the Custom Query Data Import. It's impossible to work with such a small query window.
Name changed in settings for mailbox but still not changed when typed in To field
In the email account secretary@ i have updaetd the new staff members details but the old members name still appears when I type secretary@ in the To field. I cant work out where Zoho is finding the old name from. I have deleted the browser cache. If I
Cannot add my name to my domain name
I want to have My name@mydomain.com and it says my name is linked to another account already. Please fix it since I do not have another account.
Invoice status on write-off is "Paid" - how do I change this to "Written off"
HI guys, I want to write off a couple of outstanding invoices, but when I do this, the status of the invoices shows as "Paid". Clearly this is not the case and I need to be able to see that they are written off in the customer's history. Is there a way
Establishing new Zoho email account on laptop
Good Morning: I am very long time Outlook business user and decided to try your email service last night and had established an account. I am trying to verify my account; how do I establish my Zoho email account on my laptop? I opened the account with
unable to send message reason 550 5.4.6 unusual sending activity
My email account can't send message. It shows unable to send message reason 550 5.4.6 unusual sending activity detected
how to add email to existing organization i w
I am already registered my organization and i have an email id. I need one more email id but i can't find anywhere .i want the cheapest email id . how to add ?
e-mail bloqueado
Estou com meu e-mail lucas@peplus.me bloqueado, preciso desbloquear para retorno de usos em minhas atividades.
zoho labels api not working
We're using n8n to automte email reply using zoho api. I'm facing issue with label api. I added the required scopes but its not working. i followed zoho api documentation but didn't work. also, where do i find/how do i create zoho oauth token mentioneeed
Desk DMARC forwarding failure for some senders
I am not receiving important emails into Desk, because of DMARC errors. Here's what's happening: 1. email is sent from customer e.g. john@doe.com, to my email address, e.g info@acme.com 2. email is delivered successfully to info@acme.com (a shared inbox
Streams/Shared email doesn't show up in windows trident app. It works fine on MAC. Is there any difference between 2 install ?
I can see streams/share email boxs on my MAC version of trident app but i can't see them in windows version of trident app. Is there any difference between 2 install? I try to find setting but not able to see any setting to add stream/share email boxes.
add zoho account
How to add a zoho mail to previous zoho account? I have two
Zoho Desk Mobile App Year-End Roundup - 2025
Dear Zoho Desk users, Greetings! As you gear up for the festive season, we are excited to share a quick journey into all that is released in 2025! Zia's generative AI capabilities Zia insights can be highly beneficial in helping agents manage daily support
Narrative 17: The role of Zia AI in customer support
Behind the scenes of a successful ticketing system: BTS Series Narrative 17: The role of Zia AI in customer support Overview Zia in Zoho Desk is a layered AI assistant that combines generative AI, prediction, and automation to support agents, automate
Domain Transaction
I have purchased a domain name called trainedworkforce.co.in I made the payment got the receipt but the domain is still not purchased after successful transaction .
Ability to Set a Unified Tab Order/View for All Users in Zoho Projects
Hello Zoho Projects Team, We hope you are doing well. We would like to submit a feature request regarding tab/menu organization in Zoho Projects. Current Behavior: The tab (module) order in Zoho Projects is user-specific. Each user (internal or external)
Zohomail - The "All Messages" vs "In Box"
Why do some new email message appear under the all messages view but not in my inbox? That's really annoying but to be fair I've experienced the same with gmail.
error while listing mails
I can't access email in any of my folders: Oops, an error occurred - retry produces the second error response: error while listing mails (cannot parse null string). I've signed in and out of Zoho, restarted my iMac.
Introducing the Zoho Projects Learning Space
Every product has its learning curve, and sometimes having a guided path makes the learning experience smoother. With that goal, we introduce a dedicated learning space for Zoho Projects, a platform where you can explore lessons, learn at your own pace,
Where to show Customization Field ?
Dear Sir, I have made some New Field in Item Field Customisation. Now I don't require that field in Estimate, Sales Orders etc. I just wants that field in Sales Invoice to Show/Hide... Is that possible ?
Zoho Desk 2025 round-up: Key highlights on feature releases
Hello everyone, As we gear up for 2026, here is a detailed round-up of all feature releases in Zoho Desk web throughout the year. For consolidated information on releases check out the What’s New page You can also watch these webinars. Zia in web Zia
Print Sales Orders, Purchase Orders or Invoices from API
Hello, Is it possible to use the print option that is available in Sales Orders Purchase Orders and Invoices with the API?. I don't see any information in the docs about this. Thanks
How to show a hided report??
in CRM Report , I clicked Hide incidently , how to show the floder again? Nowhere I can find the hided report floder...
Converting Customer Invoice to Purchase Bill
Hi, In my service-based business, I sometimes create the customer invoice first, and later I receive the purchase bill from the vendor for the same job. Is there any option in Zoho Books to: Convert a customer invoice into a purchase bill, or Link/associate
Email tracking inquiry
I am trying to track when my emails are opened and clicked like I previously did in HubSpot. HubSpot pretty much did the entire process automatically. After digging through, I finally found in settings --> emails --> BCC Dropbox there is an email I can
Mass Update of Lookup Fields not possible
Hello List I've created a custom field for Leads and Contacts 'Current Campaign'. This is very Handy as I can filter leads and then related them to a campaign. Everything ready, but then I realized that mass update doesn't work for lookup fields... a
Collapsible Sections & Section Navigation Needed
The flexibility of Zoho CRM has expanded greatly in the last few years, to the point that a leads module is now permissible to contain up to 350 fields. We don't use that many, but we are using 168 fields which are broken apart into 18 different sections.
Download Attached Files
Hi everyone, Brand new to Zoho Creator. I have a form with a subform. The subform has a field for "File Upload" I have this in a subform to allow multiple files to be uploaded to the parent form. Once the files are uploaded, how can i download or view them? Is this a setting I am just not seeing? If there isn't a way to download them, could i create another form field that dynamically creates the file's URL? That way a user can click the URL to get to the file? Any help with this would be greatly
Ticket layout based on field or contact
Hi! I want to support the following use-case: we are delivering custom IT solutions to different accounts we have, thus our ticket layouts, fields and languages (priority, status field values should be Hungarian) will be different. How should I setup
No funcionan correctamente el calculo de las horas laborales para informe de tickets
Hola, estoy intentando sacar estadísticas de tiempo de primera respuesta y resolución en horario laboral de mis tickets, pero el calculo de horas en horario laboral no funciona correctamente cree los horarios con los feriados : Ajusté los acuerdos de
Zoho Mail Android app update: Set out of office response exclusively for organization members and external users, response interval
Hello everyone! We have now introduced an option to configure out of office messages exclusively for organization members and external users within the Zoho Mail app. Additionally, now you can also customize response intervals for the Out of office messages.
Feature Request: Detailed View - Related Block Links!
Desperately need a view record link option on records displaying in the related blocks on a Detail View. For the love of god, please add this feature. Thank you!
Sub-Form Padding in CSV Export
Hi, When you use the Sub-Form, and for example you have a Date Field on the Main Page, then Option 1 and Option 2 fields on the Subform, when you export this to CSV the Date column will only have the Date in 1 row, the first row, it would be nice to pad
Dependent / Dynamic DropDown in ZohoSheets
Has anyone figured out a way to create a Dropdown, the values of which is dependent on Values entered in the other cell ?
How do I change the order of fields in the new Task screen?
I have gone into the Task module layout, and moving the fields around does not seem to move them in the Create Task screen. Screenshot below. I have a field (Description) that we want to use frequently, but it is inconveniently placed within the More
Zoho → ShipStation Integration – Sales Order–Driven Fulfilment Workflow
Hello All, I’m reaching out to explore the best way to integrate a shipping tool into our inventory which will speed our process up. We are looking to integrate ShipStation into our existing order-to-fulfilment workflow, as we’re keen to standardise on
IA ou je peux trouver comment utiliser IA
Je voudrais utiliser IA dans l'interface zoho pour m'aider quand j'ai des questions de rôle partage ou autre configuration d'automatisation, j'utiliser ChatGPT externe mais il ne connait pas toujours l'interface zoho et les réponses sont parfois longue
Next Page