Enable Notifications

Purpose

To enable instant notifications of actions performed on a module.

Request Details

Request URL

https://www.zohoapis.com/crm/v2/actions/watch

Header

Authorization: Zoho-oauthtoken d92d4xxxxxxxxxxxxx15f52

Scope

scope=ZohoCRM.notifications.{operation_type}

Possible operation types

ALL - Full access to notification data
WRITE - Edit instant notification details
CREATE - Enable instant notifications

Sample Request

Copiedcurl "https://www.zohoapis.com/crm/v2/actions/watch"
-X POST
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
-d "@inputData.json"
3.0.08.0
Copied//Get instance of NotificationOperations Class
NotificationOperations notificationOperations = new NotificationOperations();

//Get instance of BodyWrapper Class that will contain the request body
BodyWrapper bodyWrapper = new BodyWrapper();

//List of Notification instances
List < com.zoho.crm.api.notification.Notification > notifications = new ArrayList < com.zoho.crm.api.notification.Notification > ();

//Get instance of Notification Class
com.zoho.crm.api.notification.Notification notification = new com.zoho.crm.api.notification.Notification();

//Set channel Id of the Notification
notification.setChannelId(100000006800211 l);

List < String > events = new ArrayList < String > ();

events.add("Deals.all");

//To subscribe based on particular operations on given modules.
notification.setEvents(events);

//To set the expiry time for instant notifications. 
notification.setChannelExpiry(OffsetDateTime.of(2020, 05, 20, 10, 00, 00, 01, ZoneOffset.of("+05:30")));

//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
notification.setToken("TOKEN_FOR_VERIFICATION_OF_1000000068002");

//URL to be notified (POST request)
notification.setNotifyUrl("https://www.zohoapis.com");

//Add Notification instance to the list
notifications.add(notification);

//Get instance of Notification Class
com.zoho.crm.api.notification.Notification notification2 = new com.zoho.crm.api.notification.Notification();

//Set channel Id of the Notification
notification2.setChannelId(100000006800211 l);

List < String > events2 = new ArrayList < String > ();

events2.add("Accounts.all");

//To subscribe based on particular operations on given modules.
notification2.setEvents(events2);

//To set the expiry time for instant notifications. 
notification2.setChannelExpiry(OffsetDateTime.of(2020, 05, 20, 10, 00, 00, 01, ZoneOffset.of("+05:30")));

//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
notification2.setToken("TOKEN_FOR_VERIFICATION_OF_1000000068002");

//URL to be notified (POST request)
notification2.setNotifyUrl("https://www.zohoapis.com");

//Add Notification instance to the list
notifications.add(notification2);

//Set the list to notifications in BodyWrapper instance
bodyWrapper.setWatch(notifications);

//Call enableNotifications method that takes BodyWrapper instance as parameter 
APIResponse < ActionHandler > response = notificationOperations.enableNotifications(bodyWrapper);
Copiedimport javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;
public class EnableNotifications 
{
	@SuppressWarnings("deprecation")
	public static void main(String[] args) 
	{	
		try
		{
			HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
			SSLContext sslContext = SSLContext.getDefault();
			SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
			CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
			URIBuilder uriBuilder = new URIBuilder("https://www.zohoapis.com/crm/v2/actions/watch");
			HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
			HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
			JSONObject requestBody = new JSONObject();
			JSONArray recordArray = new JSONArray();
			JSONObject recordObject = new JSONObject();
			recordObject.put("channel_id", "10068001");
			JSONArray events = new JSONArray();
			events.put("Solutions.create");
			events.put("Price_Books.create");
			events.put("Contacts.create");
			events.put("Solutions.edit");
			recordObject.put("events", events);
			recordObject.put("channel_expiry", "2020-11-02T10:30:00+05:30");
			recordObject.put("token", "TOKEN_FOR_VERIFICATION_OF_10068001");
			recordObject.put("notify_url", "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2");
			recordArray.put(recordObject);
			recordObject = new JSONObject();
			recordObject.put("channel_id", "10068002");
			events = new JSONArray();
			events.put("Deals.all");
			recordObject.put("events", events);
			recordObject.put("channel_expiry", "2020-11-03T10:30:00+05:30");
			recordObject.put("token", "TOKEN_FOR_VERIFICATION_OF_10068002");
			recordObject.put("notify_url", "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val1");
			recordArray.put(recordObject);
			recordObject = new JSONObject();
			recordObject.put("channel_id", "10068003");
			events = new JSONArray();
			events.put("Cases.all");
			recordObject.put("events", events);
			recordObject.put("channel_expiry", "2020-11-04T10:30:00+05:30");
			recordObject.put("token", "TOKEN_FOR_VERIFICATION_OF_10068003");
			recordObject.put("notify_url", "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1");
			recordArray.put(recordObject);
			requestBody.put("watch", recordArray);
			requestBase.setEntity(new StringEntity(requestBody.toString(), HTTP.UTF_8));
			requestObj.addHeader("Authorization", "Zoho-oauthtoken 1000.xxxxxxx.xxxxxxx");
			HttpResponse response = httpclient.execute(requestObj);
			HttpEntity responseEntity = response.getEntity();
			System.out.println("HTTP Status Code : " + response.getStatusLine().getStatusCode());
			if(responseEntity != null)
			{
				Object responseObject = EntityUtils.toString(responseEntity);
				String responseString = responseObject.toString();
				System.out.println(responseString);
			}
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}
3.0.07.x
Copied//Get instance of NotificationOperations Class
$notificationOperations = new NotificationOperations();
//Get instance of BodyWrapper Class that will contain the request body
$bodyWrapper = new BodyWrapper();
//List of Notification instances
$notifications = array();
$notificationClass = 'com\zoho\crm\api\notification\Notification';
//Get instance of Notification Class
$notification = new $notificationClass();
//Set channel Id of the Notification
$notification->setChannelId("100006800211");
$events = array();
array_push($events, "Deals.all");
//To subscribe based on particular operations on given modules.
$notification->setEvents($events);
//To set the expiry time for instant notifications. 
$notification->setChannelExpiry(date_create("2019-05-07T15:32:24")->setTimezone(new \DateTimeZone(date_default_timezone_get())));
//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
$notification->setToken("TOKEN_FOR_VERIFICATION_OF_10008002");
//URL to be notified (POST request)
$notification->setNotifyUrl("https://www.zohoapis.com");
//Add Notification instance to the list
array_push($notifications, $notification);
//Get instance of Notification Class
$notification2 = new $notificationClass();
//Set channel Id of the Notification
$notification2->setChannelId("1000800211");
$events2 = array();
array_push($events2, "Accounts.all");
//To subscribe based on particular operations on given modules.
$notification2->setEvents($events2);
//To set the expiry time for instant notifications. 
$dateTime = date_create("2019-05-07T15:32:24")->setTimezone(new \DateTimeZone(date_default_timezone_get()));
$notification2->setChannelExpiry($dateTime);
//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
$notification2->setToken("TOKEN_FOR_VERIFICATION_OF_10068002");
//URL to be notified (POST request)
$notification2->setNotifyUrl("https://www.zohoapis.com");
//Add Notification instance to the list
array_push($notifications, $notification2);
//Set the list to notifications in BodyWrapper instance
$bodyWrapper->setWatch($notifications);
//Call enableNotifications method that takes BodyWrapper instance as parameter 
$response = $notificationOperations->enableNotifications($bodyWrapper);
Copied<?php

class EnableNotifications
{
    public function execute(){
        $curl_pointer = curl_init();
        
        $curl_options = array();
        $url ="https://www.zohoapis.com/crm/v2/actions/watch";
        
        $curl_options[CURLOPT_URL] =$url;
        $curl_options[CURLOPT_RETURNTRANSFER] = true;
        $curl_options[CURLOPT_HEADER] = 1;
        $curl_options[CURLOPT_CUSTOMREQUEST] = "POST";
        $requestBody = array();
        $recordArray = array();
        $recordObject = array();
        $events=array();
        $events[]="Solutions.create";
        $events[]="Price_Books.create";

        $recordObject["channel_id"]="1000068001";
        $recordObject["channel_expiry"]="2020-11-02T10:30:00+05:30";
        $recordObject["token"]="TOKEN_FOR_VERIFICATION_OF_1000068001";
        $recordObject["notify_url"]="https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbjnn&key1=val1&key2=val2";
        $recordObject["events"] = $events;
        
        
        $recordArray[] = $recordObject;
        $requestBody["watch"] =$recordArray;
        $curl_options[CURLOPT_POSTFIELDS]= json_encode($requestBody);
        $headersArray = array();
        
        $headersArray[] = "Authorization". ":" . "Zoho-oauthtoken " ."1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf";
        
        $curl_options[CURLOPT_HTTPHEADER]=$headersArray;
        
        curl_setopt_array($curl_pointer, $curl_options);
        
        $result = curl_exec($curl_pointer);
        $responseInfo = curl_getinfo($curl_pointer);
        curl_close($curl_pointer);
        list ($headers, $content) = explode("\r\n\r\n", $result, 2);
        if(strpos($headers," 100 Continue")!==false){
            list( $headers, $content) = explode( "\r\n\r\n", $content , 2);
        }
        $headerArray = (explode("\r\n", $headers, 50));
        $headerMap = array();
        foreach ($headerArray as $key) {
            if (strpos($key, ":") != false) {
                $firstHalf = substr($key, 0, strpos($key, ":"));
                $secondHalf = substr($key, strpos($key, ":") + 1);
                $headerMap[$firstHalf] = trim($secondHalf);
            }
        }
        $jsonResponse = json_decode($content, true);
        if ($jsonResponse == null && $responseInfo['http_code'] != 204) {
            list ($headers, $content) = explode("\r\n\r\n", $content, 2);
            $jsonResponse = json_decode($content, true);
        }
        var_dump($headerMap);
        var_dump($jsonResponse);
        var_dump($responseInfo['http_code']);
        
    }
    
}
(new EnableNotifications())->execute();
3.0.08.x
Copied//Get instance of NotificationOperations Class
NotificationOperations notificationOperations = new NotificationOperations();
//Get instance of BodyWrapper Class that will contain the request body
BodyWrapper bodyWrapper = new BodyWrapper();
//List of Notification instances
List<API.Notification.Notification> notifications = new List<API.Notification.Notification>();
//Get instance of Notification Class
API.Notification.Notification notification = new API.Notification.Notification();
//Set channel Id of the Notification
notification.ChannelId = 100000006800211;
List<string> events = new List<string>();
//events.Add("Deals.all");
//To subscribe based on particular operations on given modules.
notification.Events = events;
//To set the expiry time for instant notifications. 
notification.ChannelExpiry = new DateTimeOffset(new DateTime(2021, 05, 15, 12, 0, 0, DateTimeKind.Local));
//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
notification.Token = "TOKEN_FOR_VERIFICATION_OF_1000000068002";
//URL to be notified (POST request)
notification.NotifyUrl = "https://www.zohoapis.com";
//Add Notification instance to the list
notifications.Add(notification);
//Get instance of Notification Class
API.Notification.Notification notification2 = new API.Notification.Notification();
//Set channel Id of the Notification
notification2.ChannelId = 100000006800211;
List<string> events2 = new List<string>();
events2.Add("Accounts.all");
//To subscribe based on particular operations on given modules.
notification2.Events = events2;
//To set the expiry time for instant notifications. 
notification2.ChannelExpiry = new DateTimeOffset(new DateTime(2021, 05, 15, 12, 0, 0, DateTimeKind.Local));
//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
notification2.Token = "TOKEN_FOR_VERIFICATION_OF_1000000068002";
//URL to be notified (POST request)
notification2.NotifyUrl = "https://www.zohoapis.com";
//Add Notification instance to the list
notifications.Add(notification2);
//Set the list to notifications in BodyWrapper instance
bodyWrapper.Watch = notifications;
//Call enableNotifications method that takes BodyWrapper instance as parameter 
APIResponse<ActionHandler> response = notificationOperations.EnableNotifications(bodyWrapper);
Copiedusing System;
using System.IO;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;
namespace Com.Zoho.Crm.API.Sample.RestAPI.Notifications
{
    public class EnableNotifications
    {
        public static void EnableNotification()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.zohoapis.com/crm/v2/actions/watch");
            request.Method = "POST";
            request.Headers["Authorization"] = "Zoho-oauthtoken 1000.abfeXXXXXXXXXXX2asw.XXXXXXXXXXXXXXXXXXsdc2";
            JObject requestBody = new JObject();
            JArray recordArray = new JArray();
            JObject recordObject = new JObject();
            recordObject.Add("channel_id", "1000000068001");
            JArray events = new JArray();
            events.Add("Solutions.create");
            events.Add("Price_Books.create");
            events.Add("Contacts.create");
            events.Add("Solutions.edit");
            recordObject.Add("events", events);
            recordObject.Add("channel_expiry", "2020-11-02T10:30:00+05:30");
            recordObject.Add("token", "TOKEN_FOR_VERIFICATION_OF_1000000068001");
            recordObject.Add("notify_url", "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnXXXXX455jnn&key1=val1&key2=val2");
            recordArray.Add(recordObject);
            recordObject = new JObject();
            recordObject.Add("channel_id", "168002");
            events = new JArray();
            events.Add("Deals.all");
            recordObject.Add("events", events);
            recordObject.Add("channel_expiry", "2020-11-03T10:30:00+05:30");
            recordObject.Add("token", "TOKEN_FOR_VERIFICATION_OF_1000000068002");
            recordObject.Add("notify_url", "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsXXXX455jnn&key1=val1&key2=val2&key3=val1");
            recordArray.Add(recordObject);
            recordObject = new JObject();
            recordObject.Add("channel_id", "1000000068003");
            events = new JArray();
            events.Add("Cases.all");
            recordObject.Add("events", events);
            recordObject.Add("channel_expiry", "2020-11-04T10:30:00+05:30");
            recordObject.Add("token", "TOKEN_FOR_VERIFICATION_OF_1000000068003");
            recordObject.Add("notify_url", "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsXXXX455jnn&key1=val1");
            recordArray.Add(recordObject);
            requestBody.Add("watch", recordArray);
            string dataString = requestBody.ToString();
            var data = Encoding.UTF8.GetBytes(dataString);
            int dataLength = data.Length;
            request.ContentLength = dataLength;
            using (var writer = request.GetRequestStream())
            {
                writer.Write(data, 0, dataLength);
            }
            request.KeepAlive = true;
            HttpWebResponse response;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException e)
            {
                if (e.Response == null) { throw; }
                response = (HttpWebResponse)e.Response;
            }
            HttpWebResponse responseEntity = response;
            Console.WriteLine("HTTP Status Code : " + (int)response.StatusCode);
            string responsestring = new StreamReader(responseEntity.GetResponseStream()).ReadToEnd();
            responseEntity.Close();
            Console.WriteLine(responsestring);
        }
    }
}
3.0.03.x.x
Copied# Get instance of NotificationOperations Class
notification_operations = NotificationOperations()
# Get instance of BodyWrapper Class that will contain the request body
body_wrapper = BodyWrapper()
# List to hold Notification instances
notifications = []
# Get instance of Notification Class
notification_1 = Notification()
# Set channel Id of the Notification
notification_1.set_channel_id(100000006800211)
# To subscribe based on particular operations on given modules.
notification_1.set_events(['Deals.all'])
# To set the expiry time for instant notifications.
notification_1.set_channel_expiry(datetime.now())
# By using this value, user can validate the notifications.
notification_1.set_token("TOKEN_FOR_VERIFICATION_OF_100000006800211")
# URL to be notified (POST request)
notification_1.set_notify_url("https://www.zohoapis.com")
# Add Notification instance to the list
notifications.append(notification_1)
# Get instance of Notification Class
notification_2 = Notification()
# Set channel Id of the Notification
notification_2.set_channel_id(1000000068002)
# To subscribe based on particular operations on given modules.
notification_2.set_events(['Accounts.all'])
# To set the expiry time for instant notifications.
notification_2.set_channel_expiry(datetime(2020, 11, 11, 10, 10, 10))
# By using this value, user can validate the notifications.
notification_2.set_token("TOKEN_FOR_VERIFICATION_OF_1000000068002")
# URL to be notified (POST request)
notification_2.set_notify_url("https://www.zohoapis.com")
# Add Notification instance to the list
notifications.append(notification_2)
# Set the list to notifications in BodyWrapper instance
body_wrapper.set_watch(notifications)
# Call enable_notifications method that takes BodyWrapper instance as parameter
response = notification_operations.enable_notifications(body_wrapper)
Copieddef enable_notifications():
    import requests
    import json

    url = 'https://www.zohoapis.com/crm/v2/actions/watch'

    headers = {
        'Authorization': 'Zoho-oauthtoken 1000.04be928e4a96XXXXXXXXXXXXX68.0b9eXXXXXXXXXXXX60396e268'
    }

    request_body = dict()
    record_list = list()
    record_object_1 = dict()
    record_object_2 = dict()
    record_object_3 = dict()

    record_object_1['channel_id'] = '1000000068001'
    events = [
        'Solutions.create',
        'Price_Books.create',
        'Contacts.create',
        'Solutions.edit'
    ]
    record_object_1['events'] = events
    record_object_1['channel_expiry'] = '2020-11-02T10:30:00+05:30'
    record_object_1['token'] = 'TOKEN_FOR_VERIFICATION_OF_1000000068001'
    record_object_1['notify_url'] = 'https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2'

    record_list.append(record_object_1)

    record_object_2['channel_id'] = '1000000068002'
    events = ['Deals.all']
    record_object_2['events'] = events
    record_object_2['channel_expiry'] = '2020-11-03T12:30:00+05:30'
    record_object_2['token'] = 'TOKEN_FOR_VERIFICATION_OF_1000000068002'
    record_object_2['notify_url'] = 'https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val1'

    record_list.append(record_object_2)

    record_object_3['channel_id'] = '1000000068003'
    events = ['Cases.all']
    record_object_3['events'] = events
    record_object_3['channel_expiry'] = '2020-12-03T12:30:00+05:30'
    record_object_3['token'] = 'TOKEN_FOR_VERIFICATION_OF_1000000068003'
    record_object_3[
        'notify_url'] = 'https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val1'

    record_list.append(record_object_3)

    request_body['watch'] = record_list

    response = requests.post(url=url, headers=headers, data=json.dumps(request_body).encode('utf-8'))

    if response is not None:
        print("HTTP Status Code : " + str(response.status_code))

        print(response.json())

enable_notifications()
1.0.010.x
Copied//Get instance of NotificationOperations Class
let notificationOperations = new NotificationOperations();
//Get instance of BodyWrapper Class that will contain the request body
let bodyWrapper = new BodyWrapper();
//Array of Notification instances
let notificationsArray = [];
//Get instance of Notification Class
let notification1 = new Notification();
//Set channel Id of the Notification
notification1.setChannelId(100000006800211n);
let events = ["Deals.all"];
//To subscribe based on particular operations on given modules.
notification1.setEvents(events);
//To set the expiry time for instant notifications.
notification1.setChannelExpiry(new Date(2020,10,10,10,20,0));
//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
notification1.setToken("TOKEN_FOR_VERIFICATION_OF_1000000068002");
//URL to be notified (POST request)
notification1.setNotifyUrl("https://www.zohoapis.com");
//Add Notification instance to the array
notificationsArray.push(notification1);
//Get instance of Notification Class
let notification2 = new Notification();
//Set channel Id of the Notification
notification2.setChannelId(100000006800211n);
let events2 = ["Accounts.all"];
//To subscribe based on particular operations on given modules.
notification2.setEvents(events2);
//To set the expiry time for instant notifications.
notification2.setChannelExpiry(new Date(2020,11,10,10,0,0));
//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
notification2.setToken("TOKEN_FOR_VERIFICATION_OF_100000006800211");
//URL to be notified (POST request)
notification2.setNotifyUrl("https://www.zohoapis.com");
//Add Notification instance to the array
notificationsArray.push(notification2);
//Set the array to notifications in BodyWrapper instance
bodyWrapper.setWatch(notificationsArray);
//Call enableNotifications method that takes BodyWrapper instance as parameter
let response = await notificationOperations.enableNotifications(bodyWrapper);
Copiedasync function enableNotifications() {
    const got = require("got");

    let url = 'https://www.zohoapis.com/crm/v2/actions/watch'

    let headers = {
        Authorization : "Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
    }

    let requestBody = {}
    let recordArray = []

    let recordObject1 = {}

    recordObject1['channel_id'] = '1000000068001'
    events = [
        'Solutions.create',
        'Price_Books.create',
        'Contacts.create',
        'Solutions.edit'
    ]
    recordObject1['events'] = events
    recordObject1['channel_expiry'] = '2020-11-02T10:30:00+05:30'
    recordObject1['token'] = 'TOKEN_FOR_VERIFICATION_OF_1000000068001'
    recordObject1['notify_url'] = 'https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2'

    let recordObject2 = {}

    recordObject2['channel_id'] = '1000000068002'
    events = ['Deals.all']
    recordObject2['events'] = events
    recordObject2['channel_expiry'] = '2020-11-03T12:30:00+05:30'
    recordObject2['token'] = 'TOKEN_FOR_VERIFICATION_OF_1000000068002'
    recordObject2['notify_url'] = 'https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val1'

    let recordObject3 = {}

    recordObject3['channel_id'] = '1000000068003'
    events = ['Cases.all']
    recordObject3['events'] = events
    recordObject3['channel_expiry'] = '2020-12-03T12:30:00+05:30'
    recordObject3['token'] = 'TOKEN_FOR_VERIFICATION_OF_1000000068003'
    recordObject3['notify_url'] = 'https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val1'

    recordArray.push(recordObject1)
    recordArray.push(recordObject2)
    recordArray.push(recordObject3)

    requestBody['watch'] = recordArray

    let requestDetails = {
        method : "POST",
        headers : headers,
        body : JSON.stringify(requestBody),
        encoding: "utf8",
        throwHttpErrors : false
    };
    
    let response = await got(url, requestDetails)
    
    if(response != null) {
        console.log(response.statusCode);
        console.log(response.body);
    } 
}
enableNotifications()
2.02.x.x
Copied# Get instance of NotificationOperations Class
no = Notification::NotificationOperations.new
# Get instance of BodyWrapper Class that will contain the request body
bw = Notification::BodyWrapper.new
# Get instance of Notification Class
notification = Notification::Notification.new
# Set channel Id of the Notification
notification.channel_id = 10_000_000_680_211
events = ['Deals.all']
# To subscribe based on particular operations on given modules.
notification.events = events
# To set the expiry time for instant notifications.
notification.channel_expiry = DateTime.new(2021, 2, 3, 4, 5, 6, '+5:30')
# By using this value, user can validate the notifications.
notification.token = 'TOKEN_FOR_VERIFICATION_OF_1000000068002'
# URL to be notified (POST request)
notification.notify_url = 'https://www.zohoapis.com'
# List to hold Notification instances
notifications = [notification]
# Set the list to notifications in BodyWrapper instance
bw.watch = notifications
# Call enable_notifications method that takes BodyWrapper instance as parameter
response = no.enable_notifications(bw)
Copiedclass EnableNotifications
    def execute
       
        url ="https://www.zohoapis.com/crm/v2/actions/watch"
        url = URI(url)
        req = Net::HTTP::Post.new(url.request_uri)
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        headers={}
        headers["Authorization"]="Zoho-oauthtoken 1000.50XXXXXXXXX&77e3a.44XXXXXXXXX8353"
        headers&.each { |key, value| req.add_field(key, value) }
       
        request_body = {};
        record_array = [];
        record_object = {};
        events=["Solutions.create","Price_Books.create"]

        record_object["channel_id"]="1000000068001";
        record_object["channel_expiry"]="2020-11-02T10:30:00+05:30";
        record_object["token"]="TOKEN_FOR_VERIFICATION_OF_1000000068001";
        record_object["notify_url"]="https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2";
        record_object["events"] = events;
    
        record_array = [record_object];
        request_body["watch"] =record_array; 
        request_json = request_body.to_json
        req.body = request_json.to_s
        response=http.request(req)
        status_code = response.code.to_i
        headers = response.each_header.to_h
        print status_code
        print headers
        unless response.body.nil?
            print  response.body
        end
    end
end

EnableNotifications.new.execute
1.0.0ES6
Copied//Get instance of NotificationOperations Class
let notificationOperations = new ZCRM.Notification.Operations();
//Get instance of BodyWrapper Class that will contain the request body
let bodyWrapper = new ZCRM.Notification.Model.BodyWrapper();
//Array of Notification instances
let notificationsArray = [];
//Get instance of Notification Class
let notification1 = new ZCRM.Notification.Model.Notification();
//Set channel Id of the Notification
notification1.setChannelId(16800211n);
let events = ["Deals.all"];
//To subscribe based on particular operations on given modules.
notification1.setEvents(events);
//To set the expiry time for instant notifications.
notification1.setChannelExpiry(new Date(2020,10,10,10,20,0));
//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
notification1.setToken("TOKEN_FOR_VERIFICATION_OF_168002");
//URL to be notified (POST request)
notification1.setNotifyUrl("https://www.zohoapis.com");
//Add Notification instance to the array
notificationsArray.push(notification1);
//Get instance of Notification Class
let notification2 = new ZCRM.Notification.Model.Notification();
//Set channel Id of the Notification
notification2.setChannelId(106800211n);
let events2 = ["Accounts.all"];
//To subscribe based on particular operations on given modules.
notification2.setEvents(events2);
//To set the expiry time for instant notifications.
notification2.setChannelExpiry(new Date(2020,11,10,10,0,0));
//To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body.
//By using this value, user can validate the notifications.
notification2.setToken("TOKEN_FOR_VERIFICATION_OF_16800211");
//URL to be notified (POST request)
notification2.setNotifyUrl("https://www.zohoapis.com");
//Add Notification instance to the array
notificationsArray.push(notification2);
//Set the array to notifications in BodyWrapper instance
bodyWrapper.setWatch(notificationsArray);
//Call enableNotifications method that takes BodyWrapper instance as parameter
let response = await notificationOperations.enableNotifications(bodyWrapper);
Copiedvar listener = 0;
class EnableNotifications {

	async enableNotification()	{
		var url = "https://www.zohoapis.com/crm/v2/actions/watch"
        var parameters = new Map()
        var headers = new Map()
        var token = {
            clientId:"1000.NPY9M1V0XXXXXXXXXXXXXXXXXXXF7H",
            redirectUrl:"http://127.0.0.1:5500/redirect.html",
            scope:"ZohoCRM.notifications.ALL,ZohoCRM.users.ALL,ZohoCRM.bulk.read,ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,Aaaserver.profile.Read,ZohoCRM.org.ALL,profile.userphoto.READ,ZohoFiles.files.ALL,ZohoCRM.bulk.ALL,ZohoCRM.settings.variable_groups.ALL"
        }
        var accesstoken = await new EnableNotifications().getToken(token)
        headers.set("Authorization", "Zoho-oauthtoken " + accesstoken)
        var requestMethod = "POST"
        var reqBody ={
            "watch": [
               {
                    "channel_id": "1068001",
                    "events": [
                        "Solutions.create",
                        "Price_Books.create",
                        "Contacts.create",
                        "Solutions.edit"
                    ],
                    "channel_expiry": "2021-02-02T10:30:00+05:30",
                    "token": "TOKEN_FOR_VERIFICATION_OF_1068001",
                    "notify_url": "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dXXXXXXXXX5jnn&key1=val1&key2=val2"
               }
            ]
        }
        var params = "";
        parameters.forEach(function(value, key) {
            if (parameters.has(key)) {
                if (params) {
                    params = params + key + '=' + value + '&';
                }
                else {
                    params = key + '=' + value + '&';
                }
            }
        });
        var apiHeaders = {};
        if(headers) {
            headers.forEach(function(value, key) {
                apiHeaders[key] = value;
            });
        }
        if (params.length > 0){
            url = url + '?' + params.substring(0, params.length - 1);
        }
        var requestObj = {
            uri : url,
            method : requestMethod,
            headers : apiHeaders,
            body : JSON.stringify(reqBody),
            encoding: "utf8",
            allowGetBody : true,
			throwHttpErrors : false
        };
        var result = await new EnableNotifications().makeAPICall(requestObj);
        console.log(result.status)
        console.log(result.response)
	}

    async getToken(token) {

        if(listener == 0) {

            window.addEventListener("storage", function(reponse) {
                if(reponse.key === "access_token" && (reponse.oldValue != reponse.newValue || reponse.oldValue == null)){
                    location.reload();
                }
                if(reponse.key === "access_token"){

                    sessionStorage.removeItem("__auth_process");
                }
            }, false);
            listener = 1;
            if(sessionStorage.getItem("__auth_process")) {
                sessionStorage.removeItem("__auth_process");
            }
        }
        ["granted_for_session", "access_token","expires_in","expires_in_sec","location","api_domain","state","__token_init","__auth_process"].forEach(function (k) {
            var isKeyExists = localStorage.hasOwnProperty(k);
            if(isKeyExists) {
                sessionStorage.setItem(k, localStorage[k]);
            }
            localStorage.removeItem(k);
        });
        var valueInStore = sessionStorage.getItem("access_token");
        var tokenInit = sessionStorage.getItem("__token_init");
        if(tokenInit != null && valueInStore != null && Date.now() >= parseInt(tokenInit) + 59 * 60 * 1000){ // check after 59th minute
            valueInStore = null;
            sessionStorage.removeItem("access_token");
        }

        var auth_process = sessionStorage.getItem("__auth_process");
        if ((valueInStore == null && auth_process == null) || (valueInStore == 'undefined' && (auth_process == null || auth_process == "true"))) {
            var accountsUrl = "https://accounts.zoho.com/oauth/v2/auth"
            var clientId;
            var scope;
            var redirectUrl;
            if(token != null) {
                clientId = token.clientId;
                scope = token.scope;
                redirectUrl = token.redirectUrl;
            }

            var fullGrant = sessionStorage.getItem("full_grant");
            var grantedForSession = sessionStorage.getItem("granted_for_session");
            if(sessionStorage.getItem("__token_init") != null && ((fullGrant != null && "true" == full_grant) || (grantedForSession != null && "true" == grantedForSession))) {
                accountsUrl += '/refresh';
            }
            if (clientId && scope) {
                sessionStorage.setItem("__token_init", Date.now());
                sessionStorage.removeItem("access_token");
                sessionStorage.setItem("__auth_process", "true");
                window.open(accountsUrl + "?" + "scope" + "=" + scope + "&"+ "client_id" +"=" + clientId + "&response_type=token&state=zohocrmclient&redirect_uri=" + redirectUrl);
                ["granted_for_session", "access_token","expires_in","expires_in_sec","location","api_domain","state","__token_init","__auth_process"].forEach(function (k) {
                    var isKeyExists = localStorage.hasOwnProperty(k);
                    if(isKeyExists){
                        sessionStorage.setItem(k, localStorage[k]);
                    }
                    localStorage.removeItem(k);
                });
                valueInStore = sessionStorage.getItem("access_token");
            }
        }
        if(token != null && valueInStore != 'undefined'){
            token.accessToken = valueInStore;
        }
        return token.accessToken;
    }

    async makeAPICall(requestDetails) {
        return new Promise(function (resolve, reject) {
            var body, xhr, i;
            body = requestDetails.body || null;
            xhr = new XMLHttpRequest();
            xhr.withCredentials = true;
            xhr.open(requestDetails.method, requestDetails.uri, true);
            for (i in requestDetails.headers) {
                xhr.setRequestHeader(i, requestDetails.headers[i]);
            }
            xhr.send(body);
            xhr.onreadystatechange = function() {
                if(xhr.readyState == 4) {
                    resolve(xhr);
                }
            }
        })
    }
}

Input JSON Keys

  • tokenString, optional

    To ensure that the notification is sent from Zoho CRM, by sending back the given value in notification URL body. By using this value, user can validate the notifications. Maximum length of characters is 50.
    Possible values: Example: TOKEN_FOR_VERIFICATION_OF_1000000068001

  • notify_urlString, mandatory

    URL to be notified (POST request). Whenever any action gets triggered, the notification will be sent through this notify url.
    Possible values: String values. Example: https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2

  • channel_idlong, mandatory

    The given value is sent back in notification URL body to make sure that the notification is for a particular channel.
    Possible values: Channel ID. Example: 1000000068001

  • return_affected_field_valuesboolean, optional

    It returns the affected fields with their values and corresponding record IDs if return_affected_field_values in the input is true. If false, the return_affected_field_values key will not be shown in the response.

  • channel_expiryString (ISO Date time), optional

    To set the expiry time for instant notifications. Maximum of only one day from the time they were enabled. If it is not specified or set for more than a day, the default expiry time is for one hour.
    Possible values: ISO Date time. Example: 2018-02-02T10:30:00+05:30

  • eventsJSONArray["{module_api_name}.{operation}", "{module_api_name}.{operation}"], mandatory

    To subscribe based on particular operations on selected modules.
    Possible values: JSON Array of the provided format. Example: ["Leads.create","Sales_Orders.edit","Contacts.delete"]. Possible operation types - create, delete, edit, all

  • notify_on_related_actionboolean, optional

    To enable notification when there is any action on any associated records. The default value is FALSE.

To get notification on a URL

  • On trigger of any notification-enabled event in a module, Zoho CRM sends a notification to the user through the notify URL.

Sample Input

Copied{
    "watch": [
        {
            "channel_id": "1000000068001",
            "events": [
                "Solutions.create",
                "Price_Books.create",
                "Contacts.create",
                "Solutions.edit"
            ],
            "channel_expiry": "2018-02-02T10:30:00+05:30",
            "token": "TOKEN_FOR_VERIFICATION_OF_1000000068001",
            "return_affected_field_values": true,
            "notify_url": "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2"
        },
        {
            "channel_id": "1000000068002",
            "events": [
                "Deals.edit"
            ],
            "channel_expiry": "2018-02-02T10:30:00+05:30",
            "token": "TOKEN_FOR_VERIFICATION_OF_1000000068002",
            "return_affected_field_values": true,
            "notify_url": "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val1"
        },
        {
            "channel_id": "1000000068003",
            "events": [
                "Cases.all"
            ],
            "channel_expiry": "2018-02-02T10:30:00+05:30",
            "token": "TOKEN_FOR_VERIFICATION_OF_1000000068003",
            "return_affected_field_values": true,
            "notify_url": "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1"
        }
    ]
}

Possible Errors

  • MANDATORY_NOT_FOUND HTTP 400

    One of the mandatory fields (events, channel_id, notify_url) is not found. Refer to the "details" key in the response to know which mandatory field is missing.
    Resolution:Ensure that all the mandatory fields are given in the input.

  • INVALID_DATA HTTP 400

    The length of the token is greater than 50 characters.
    Resolution: Ensure that the token passed is less than 50 characters in length.

  • INVALID_DATA HTTP 400

    The user do not have permission to subscribe to the module.
    Resolution: Contact your system administrator

Sample Response

Copied{
    "watch": [
        {
            "code": "SUCCESS",
            "details": {
                "events": [
                    {
                        "channel_expiry": "2018-02-02T10:30:00+05:30",
                        "resource_uri": "https://www.zohoapis.com/crm/v2/Solutions",
                        "resource_id": "1000000000091",
                        "resource_name": "Solutions",
                        "channel_id": "1000000068001"
                    },
                    {
                        "channel_expiry": "2018-02-02T10:30:00+05:30",
                        "resource_uri": "https://www.zohoapis.com/crm/v2/Contacts",
                        "resource_id": "1000000000045",
                        "resource_name": "Contacts",
                        "channel_id": "1000000068001"
                    },
                    {
                        "channel_expiry": "2018-02-02T10:30:00+05:30",
                        "resource_uri": "https://www.zohoapis.com/crm/v2/Price_Books",
                        "resource_id": "1000000000097",
                        "resource_name": "Price_Books",
                        "channel_id": "1000000068001"
                    }
                ]
            },
            "message": "Successfully subscribed for actions-watch of the given module",
            "status": "success"
        },
        {
            "code": "SUCCESS",
            "details": {
                "events": [
                    {
                        "channel_expiry": "2018-02-02T10:30:00+05:30",
                        "resource_uri": "https://www.zohoapis.com/crm/v2/Deals",
                        "resource_id": "1000000000047",
                        "resource_name": "Deals",
                        "channel_id": "1000000068002"
                    }
                ]
            },
            "message": "Successfully subscribed for actions-watch of the given module",
            "status": "success"
        },
        {
            "code": "SUCCESS",
            "details": {
                "events": [
                    {
                        "channel_expiry": "2018-02-02T10:30:00+05:30",
                        "resource_uri": "https://www.zohoapis.com/crm/v2/Cases",
                        "resource_id": "1000000000089",
                        "resource_name": "Cases",
                        "channel_id": "1000000068003"
                    }
                ]
            },
            "message": "Successfully subscribed for actions-watch of the given module",
            "status": "success"
        }
    ]
}

Response JSON Keys

  • serverinteger

    Represents the server time when the notification was sent to the notify URL.

  • affected_valuesJSON array

    It returns the affected fields with their values and corresponding record IDs if return_affected_field_values in the input is true and the value is false, return_affected_field_values JSON array will not be shown in the response.

  • query_paramsJSON object

    Represents the parameters if any were specified in the notification request.

  • resource_uriJSON object

    Represents the URI of the module you have specified to receive notifications when certain actions are performed in the module.

  • idsJSON array

    Represents the unique IDs of the affected records.

  • affected_fieldsJSON array

    Returns the modified fields (affected fields) in a specific record. Note the subforms, participants, and product_details fields will be ignored in the response.

  • operationstring

    Represents the operation performed on the module.

  • modulestring

    Represents the module you have subscribed from which you want to be notified of any changes.

  • channel_idlong

    Represents the subscribed channel ID.

  • tokenstring

    Represents the value received in the callback to ensure that the notification is from Zoho CRM.

Sample response received at the notification URL

Copied{
  "server_time": 1719309544639,
  "affected_values": [
    {
      "record_id": "5725767000003093005",
      "values": {
        "Probability": 75,
        "Stage": "Proposal/Price Quote"
      }
    }
  ],
  "query_params": {
    "key1": "val1",
    "key2": "val2",
    "?authorization": "Zoho-oauthtoken 1000.23dnsbbbh455jnn"
  },
  "module": "Deals",
  "resource_uri": "https://www.zohoapis.com/crm/v2/Deals",
  "ids": [
    "5725767000003093005"
  ],
  "affected_fields": [
    {
      "5725767000003093005": [
        "Stage",
        "Probability"
      ]
    }
  ],
  "operation": "update",
  "channel_id": "1000000068002",
  "token": "TOKEN_FOR_VERIFICATION_OF_1000000068001"
}