Kaizen #8 - Handling Recurrence and Participants in the Events Module via API

Kaizen #8 - Handling Recurrence and Participants in the Events Module via API

Hello everyone!

We are back this week with an exciting post—Handling recurrence and participants in the Events module through API.

First things first—What is the Events module?
"Events" is a part of the Activities module in Zoho CRM. 
An event is an activity that happens at a given place and time. You can find Events on the user's Zoho CRM's home page, Activities home page, Calendar, and in other related records.

What are the types of Events?
Events are of two types—Recurring and non-recurring events.
Recurring events: These events repeat/recur at a set frequency. You can set them to repeat by day, week, month, or by year. You can also set them to repeat a fixed number of times. 
Non-recurring events: These are one-time events.
Both these events can also be all-day events.

Now, let us see how to handle a recurring event and add/update participants via API.

1. Creating a Recurring Event through API
You must use the Insert Records API to insert a record in the Events module.

Request URL: {{api-domain}}/crm/v2/Events
Request method: POST

Sample input to create a recurring event that repeats every two weeks

{
    "data": [
        {
            "All_Day": false,
            "Event_Title": "Kaizen_9_Weekly",
            "Start_DateTime": "2020-02-02T10:00:00+05:30",
            "End_DateTime": "2020-02-02T11:00:00+05:30",
            "Participants": [
                {
                    "type": "contact",
                    "participant": "3652397000001281003"
                },
                {
                    "type": "lead",
                    "participant": "3652397000000415063"
                },
                {
                    "type": "user",
                    "participant": "3652397000000186017"
                }
            ],
            "Recurring_Activity": {
                "RRULE": "FREQ=WEEKLY;BYDAY=SU;INTERVAL=2;UNTIL=2020-03-15"
            },
            "Remind_At": "2020-02-01T09:45:00+05:30",
            "Who_Id": {
                "id": "3652397000000649013",
                "name": "Patricia Boyle"
            },
            "Venue": "Chennai",
            "$se_module": "Accounts",
            "What_Id": "3652397000000624046",
            "$send_notification": true
        }
    ]
}


Mandatory keys
The following table lists the mandatory fields you must specify while creating a recurring event. Not including any one of these fields results in the MANDATORY_NOT_FOUND error.

Key
Data Type
Description
Event_Title
String
Title of the event. Accepts a maximum of 255 characters, alphanumeric, and special characters. 
Start_DateTime
DateTime
The date and time (in ISO8601 format) at which the event begins. 
End_DateTime
DateTime
The date and time (in ISO8601 format) at which the event ends. 
Recurring_Activity
JSON Object
JSON Object that contains information about the recurrence pattern of the event in the key "RRULE".

Other Keys

Key
Data Type
Description
All_day
Boolean
Represents if the event takes place all day.
Participants
JSON Array
Contains the ID and type of each participant in individual JSON objects. Possible participant types are "lead", "contact", "user", and "email".
Remind_At
DateTime
The date and time in the current user's time zone (in ISO8601 format) at which a reminder is sent to the participants. 
Who_Id
JSON Object
The name and ID of the contact that the event is related to; that contact may or may not be a participant of the event.
What_Id
JSON Object
The name and ID of the Account, Deal, Product, Quote, Invoice, Campaign, Vendor, Case, Purchase Order, or Sales Order that the event is created for.
$se_module
String
The API name of the parent module given in the key "What_Id". This key is mandatory when you include the "What_Id".
Venue
String
The place where the event takes place. Accepts a maximum of 255 characters, alphanumeric, and special characters.
$send_notification
Boolean
Represents if you want to send invitations to the participants of the event. The value true sends out invitations, and false does not. 

We will now discuss the Participants and RRULE keys in detail.

1.1 Participants
The Participants key is a JSON array of participant JSON objects. You can add four types of participants to an event—lead, contact, user, and email. 
You must include each of these participant types as individual JSON objects inside this array as shown below.

"Participants": [
        {
            "type": "contact",
            "participant": "3652397000001281003"
        },
        {
            "type": "lead",
            "participant": "3652397000000415063"
        },
        {
            "type": "user",
            "participant": "3652397000000186017"
        },
        {
            "type": "email",
            "participant": "carissa-kidman@yahoo.com"
        }
]

Where, 
type - The type of participant. The possible values are lead, contact, user, email
participant -  The record ID of the lead, contact, or user.

1.2 RRULE
RRULE is the key in the Recurring_Activity JSON object that determines the recurrence pattern of the event. 
RRULE holds multiple key-value pairs for different types of recurring events (i.e Daily, Weekly, Monthly, Yearly). You must separate each key-value pair by a semicolon.

Mandatory key-value pairs for RRULE
Key
Possible Values
Description
FREQ
DAILY, WEEKLY, MONTHLY, YEARLY
Frequency; represents how often the event repeats. 
INTERVAL
1–99
The gap between each event. For example, for a weekly recurring event, if the INTERVAL value is 2, the gap between the first and the next event will be two weeks. 
COUNT
1–99
The number of events you want to create. For example, if the COUNT value is 3, three events will be created. 

Note
You must specify FREQ and (INTERVAL or COUNT) in RRULE.

Other key-value pairs in RRULE
Key
Possible Values
Description
BYMONTHDAY
1–31
The day of the month the event repeats on. Applicable only for  monthly and yearly events.
BYDAY
SU, MO, TU, WE, TH, FR, SA
The day of the week the event repeats on. Applicable for daily, weekly, monthly, and yearly events.
BYSETPOS
1, 2, 3, 4, -1 
The week of the month the event repeats in.
Applicable only for monthly and yearly events.
1 - Event repeats every first week of the month
2 - Event repeats every second week of the month
3 - Event repeats every third week of the month
4 - Event repeats every fourth week of the month
-1 - Event repeats every last week of the month.
UNTIL
Date in yyyy-MM-dd format
The date until which the event must repeat.

Therefore, according to the sample input given at the beginning of the post, the event starts on Feb 2, 2020 at 10:00 AM and ends the same day at 11:00 AM.

According to  "RRULE":"FREQ=WEEKLY;BYDAY=SU;INTERVAL=2;UNTIL=2020-03-15", the event occurs every Sunday, with an interval of 14 days (2 weeks), and recurs until Mar 15, 2020.
Therefore, the sequence is as shown below.
  1. The event begins on Feb 2, 2020.
  2. The first recurring event happens on Feb 16, 2020.
  3. The second recurring event happens on Mar 1, 2020.
  4. The last recurring event happens on Mar 15, 2020.
Therefore, the response will have four JSON objects—one for the first event as specified in the Start_DateTime key, and one for each recurring event.

Note
You can only create one set of recurring events using the RRULE in a single API call.

A few other examples of RRULE:
  • "RRULE": "FREQ=MONTHLY;COUNT=3;BYDAY=WE;BYSETPOS=2".
    This RRULE creates three events that recur every Wednesday in the second week of the month.
  • "RRULE": "FREQ=MONTHLY;INTERVAL=2;COUNT=3;BYMONTHDAY=14".
    This RRULE creates three events that recur on the 14th day of the month, and repeat once in two months.

2. Updating an Event
You must use the Update Specific Record API to update an event.
In this section, we will discuss
  1. Adding a participant to an event
  2. Updating all future events
2.1 . Adding a participant to an event
Details you need to add a participant to an event
  1. The event's record ID. You can obtain this from the response you received while creating the event.
  2. The ID of the participants that are added already. The GET Specific Event response will have a unique ID for each participant in the "Participants" JSON array.
The sample input is as follows.

{
    "data": [
        {
            "All_Day": false,
            "Event_Title": "Kaizen_10_Weekly",
            "Start_DateTime": "2020-02-02T11:00:00+05:30",
            "End_DateTime": "2020-02-02T12:00:00+05:30",
            "Participants": [
                {
                    "type": "contact",
                    "participant": "3652397000001281003",
                    "id": "3652397000001326102"
                },
                {
                    "type": "lead",
                    "participant": "3652397000000415063",
                    "id": "3652397000001326100"
                },
                {
                    "type": "user",
                    "participant": "3652397000000186017",
                    "id": "3652397000001326098"
                },
                {
                    "type": "email",
                    "participant": "john-butt@gmail.com"
                }
            ],
            "Remind_At": "2020-02-01T10:45:00+05:30",
            "$send_notification": true
        }
    ]
}
As you can see, a new participant of type email and email ID john-butt@gmail.com is added. Since the ID of the existing participant with the email ID carissa-batman@yahoo.com is not specified, it gets deleted.

Note
  • participant is the record ID of the participant (lead, contact, or user).
  • ID is the unique ID of the participant for that event.
  • While adding a participant, you must specify the IDs of other participants for the event. Otherwise, only the new participant is added, while the rest are deleted.

2.1 . Updating all future events
While updating an event, you can choose to update all future events with the new change.
Use the boolean key update_all_future_events. The value true updates all future events, and the value false updates only that particular event.
Here is a sample input.

{
    "data": [
        {
            "All_Day": false,
            "Event_Title": "Kaizen_10_Weekly",
            "Start_DateTime": "2020-02-02T11:00:00+05:30",
            "End_DateTime": "2020-02-02T12:00:00+05:30",
            "Participants": [
                {
                    "type": "contact",
                    "participant": "3652397000001281003",
                    "id": "3652397000001326102"
                },
                {
                    "type": "lead",
                    "participant": "3652397000000415063",
                    "id": "3652397000001326100"
                },
                {
                    "type": "user",
                    "participant": "3652397000000186017",
                    "id": "3652397000001326098"
                },
                {
                    "type": "email",
                    "participant": "carissa-kidman@yahoo.com"
                }
            ],
            "Remind_At": "2020-02-01T10:45:00+05:30",
            "update_all_future_events": true,
            "$send_notification": true
        }
    ]
}

Points to Note
While creating recurring events,
  • You must specify either COUNT or INTERVAL in the RRULE. Otherwise, the system creates 365-day events.
  • For WEEKLY recurring events, you must include BYDAY in RRULE. Otherwise, the system creates 365-day events that recurs weekly.

While updating a recurring event,
  • You must specify the record ID of the event you want to update. 
  • You must set the value of the key update_all_future_events to true to update all future events. Otherwise, the system updates only that event and the other recurring events that you created previously will remain unaltered.
  • While adding a participant, you must specify the IDs of other participants. Otherwise, only the new participant is added, while the rest are deleted.
  • You cannot update RRULE through the API.
  • You cannot update check-in related information through the API.

We hope you found this post useful. Please reach out to us if you have questions, or let us know in the comment section.
Cheers!
















    • Recent Topics

    • In App Auto Refresh/Update Features

      Hi,    I am trying to use Zoho Creator for Restaurant management. While using the android apps, I reliased the apps would not auto refresh if there is new entries i.e new kitchen order ticket (KOT) from other users.   The apps does received notification but would not auto refresh, users required to refresh the apps manually in order to see the new KOT in the apps.    I am wondering why this features is not implemented? Or is this feature being considered to be implemented in the future? With the
    • Every time an event is updated, all participants receive an update email. How can I deactivate this?

      Every time an event is updated in Zoho CRM (e.g. change description, link to Lead) every participant of this meeting gets an update email. Another customer noticed this problem years ago in the Japanese community: https://help.zoho.com/portal/ja/community/topic/any-time-an-event-is-updated-on-zohocrm-calendar-it-sends-multiple-invites-to-the-participants-how-do-i-stop-that-from-happening
    • How can I filter a field integration?

      Hi,  I have a field integration from CRM "Products" in a form, and I have three product Categories in CRM. I only need to see Products of a category. Thanks for you answers.
    • How to implement new online payment gateway?

      Hello, Can you tell me how to proceed to implement my local payment gateway? DIBS has an open avaiable API that should be easy to implement into ZOHO BOOKS. http://tech.dibspayment.com/dibs_payment_window
    • Zoho CRM - Portal Users Edit Their Own Account Information

      Hi Community, I'm working on a client portal and it seems like the only I can make the Account record editable to the Contact, is if I add another lookup on the Account to the Contact record. Am I missing something as the account already has a list of
    • I’ve noticed that Zoho Sheet currently doesn’t have a feature similar to the QUERY formula in Google Sheets or Power Query in Microsoft Excel.

      These tools are extremely helpful for: Filtering and extracting data using simple SQL-like queries Combining or transforming data from multiple sheets or tables Creating dynamic reports without using complex formulas Having a Query-like function in Zoho
    • Connecting Zoho Mail with Apollo.io

      Hi, I am trying to connect my Zoho Mail account with my Apollo.io account to start sending cold email for prospecting purposes. I have activated the IMAP setting but I am still unable to connect to the Apollo account. I am using my email credentials but
    • Where does this report come from in the Zoho One ecosystems?

      Is this directly from MA, Analytics or ??? ???
    • Contact's title in "Contact Role Mapping"

      When I'm creating a deal, I'd like to see the contacts title in the listing. Right now, I only see this: How can I get the contact's title in there?
    • Zoho CRM - Client Portal - Hide Notes Related List

      Hi Community, I'm building a customer portal and I can't find a way to hide the notes related list. I don't want the client to see the notes I have about them. Is there a way to do this as it is no bin/trash icon when I hover over.
    • "Pivot Table" Conditional Formatting

      Team, I there a way to use conditional formatting a "Pivot Table"  report? Thanks, Arron Blue Pumpkin Hosting | Solutions Made Simple
    • How many clients can be added to Zoho Practice?

      How many clients can be added to Zoho Practice without having their zoho app?
    • Stage History

      when viewing a ticket , and you look at stage history tab (kanban view) and look at the stage duration column in days, it shows the current stage of the ticket as " current stage ". Should it not rather show the amount of days it has been in that current
    • Send Automated WhatsApp Messages and Leverage the Improved WhatsApp Templates

      Greetings, I hope all of you are doing well. We're excited to announce a major upgrade to Bigin's WhatsApp integration that brings more flexibility, interactivity, and automation to your customer messaging. WhatsApp message automation You can now use
    • Automating Ticket Responses Using Zoho Desk's AI Features

      We’re looking to set up an automation within Zoho Desk that can analyze incoming emails or tickets and automatically respond with relevant knowledge base articles based on the content of the request. Could you please guide us on how to configure this
    • Optimising CRM-Projects workflows to manage requests, using Forms as an intermediary

      Is it possible to create a workflow between three apps with traceability between them all? We send information from Zoho CRM Deals over to Zoho Projects for project management and execution. We have used a lookup of sorts to create tasks in the past,
    • Service locations are tied to contacts?

      Trying the system out. And what I discovered is that it seems that the whole logic of the app is, I'd say, backwards. There is a Customer - a company. The company has contact persons and service locations can be associated with different contact persons.
    • Enhancements to Zoho Maps integration tasks

      Hello everyone, We're excited to announce enhancements to the Zoho Maps integration tasks in Deluge, which will boost its performance. This post will walk you through the upcoming changes, explain why we're making them, and detail the steps you need to
    • Bug in Total Hour Calculation in Regularization for past dates

      There is a bug in Zoho People Regularization For example today is the date is 10 if I choose a previous Date like 9 and add the Check in and Check out time The total hours aren't calculated properly, in the example the check in time is 10:40 AM check
    • Narrative 12: Sandbox - Testing without the risk

      Behind the scenes of a successful ticketing system: BTS Series Narrative 12: Sandbox - Testing without the risk What is a sandbox environment? A sandbox environment is a virtual playground that allows you to test freely and experiment with various elements
    • Dynamically catching new file creations

      I have a team folder with many subfolders, and in those folders we add new documents all the time. I'd like to have a workflow or script to notify me (and then take other actions) when a file is added anywhere in that structure that ends in "summary.txt".
    • Announcing new features in Trident for Mac (1.27.0)

      Hello everyone! Trident for macOS (v1.27.0) is here with new features and enhancements to improve scheduling and managing your calendar events. Let's take a quick look at them. Stay aligned across time zones. Both the scheduled and original time zones
    • Branding of native system emails

      Make system emails adjustable in terms of branding. We want our system to be completely white label, because it is not a CRM anymore, it's way more than that. We are following the strategy of "CRM for everyone" to use the CRM in all departments, not only
    • Slow uploads of large files

      I'm wanting to use Workdrive for transferring large images and video (we're talking things from 100MB-5GB). I'm running solo on a 500MBit/sec fiber connection. I'm getting upload speeds to Workdrive of no more than about 1-3Mbytes/sec when going through
    • Migrate Your Notes from OneNote to Zoho Notebook Today

      Greetings Notebook Users, We’re excited to introduce a powerful new feature that lets you migrate your notes from Microsoft OneNote to Zoho Notebook—making your transition faster and more seamless than ever. ✨ What’s New One-click migration: Easily import
    • need to upload from airtable to google drive

      I have a zapier zap that automates between airtable and google drive. When a customer uploads a new file into airtable via a client portal interface, zapier uploads that file into a folder linked to that customer's project record. I need to replicate
    • Can't delete functions that are associated with deleted workflow rules

      We have a handful of functions that were once associated with a workflow rule, but the rule has been deleted. The function still thinks it is associated so I can't assign it to a new rule. It is starting to get really messy because we have a list of functions
    • Default Sorting on Related Lists

      Is it possible to set the default sorting options on the related lists. For example on the Contact Details view I have related lists for activities, emails, products cases, notes etc... currently: Activities 'created date' newest first Emails - 'created
    • Credit Management: #1 Credit You Owe vs Credits Owed to the Business

      Think about the last time you ordered food online. You might have paid in advance through your card, but you received a $20 refund because your order got delayed or cancelled. In most apps, refunds don't go into the bank account directly; instead, they're
    • Tip #46- Turn Every Session into an Insight with Zoho Assist survey report- 'Insider Insights'

      Delivering exceptional remote support isn’t just about resolving issues, it’s about understanding how both customers and technicians experience each session. That’s where Survey Report in Zoho Assist come in. You can configure and customize survey questions
    • Enhancing Zia's service with better contextual responses and article generation

      Hello everyone, We are enhancing Zia's Generative AI service to make your support experience smarter. Here's how: Increased accuracy with Qwen One of the key challenges in AI is delivering responses that are both contextually accurate and empathetic while
    • Allow the usage of Multi-Select fields as the primary field on "Layout Rules"

      We want to force our users to enter some explanation strings when a multi-select field has been utilized. I can't understand the reason for the usage restriction of Multi-Select fields as a primary field. This is a simple "Display hidden mandatory field
    • CRM/Bookings integration edits Contact names

      Hi there, I've installed the extension that connects Zoho CRM and Zoho Bookings. When we get a new appointment from Bookings from an existing Contact, that Contact's record shows this: First Name was updated from asd to blank value Last Name was updated
    • Domain Change

      “Please update my Email-in domain from @biginmail.biginmail.in to @biginmail.zoho.com. Messages to the .in domain are bouncing.”
    • Webhooks Limit Exceeded

      Today, I received an error message saying, 'Total number of Webhook call exceeded', but when I look at Manage > Billing, it doesn't look like any of my invokeURL calls are being logged. Following the advice from this thread: https://help.zoho.com/portal/en/community/topic/webhooks-daily-limits-in-zoho-creator
    • Auto select option in CRM after Zoho Form merge

      Hi, I have a dropdown field in Zoho CRM that is filled with a Zoho Form. The data is filled but not automatically shown. After selecting the right value in the dropdown the information a second field is shown. So the question is; how can I make the dropdown
    • Bring your CRM data straight into your presentations in Zoho Show

      Let's say you are working on a presentation about your team's sales pipeline for an upcoming strategy meeting. All the information you need about clients and leads is in Zoho CRM, but you end up copying details from the CRM into your slides, adjusting
    • Improved RingCentral Integration

      We’d like to request an enhancement to the current RingCentral integration with Zoho. RingCentral now automatically generates call transcripts and AI-based call summaries (AI Notes) for each call, which are extremely helpful for support and sales teams.
    • Introducing New APIs in Zoho Contracts

      We are excited to announce the release of new APIs in Zoho Contracts to help you automate and manage every stage of your contract lifecycle more efficiently. Here’s a quick overview of what’s new: 1. Complete Contract Draft You can use this API to complete
    • Vimeo

      For me Vimeo is the most important video social channel for media and filmmakers. Would others agree and like it added to Zoho Social.
    • Next Page