Get Notification Details

Purpose

To get the details of the notifications enabled by the user.

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 the record
READ - Get notification details

Parameters

  • pageInteger, optional

    To get the list of records from the respective pages. Default value is 1.
    Possible values: Integer values. Example: 1(or)4(or)6

  • per_pageInteger, optional

    To get the list of records available per page. Default value is 200.
    Possible values: Integer values. Example: 200(or)400

  • channel_idInteger, mandatory

    Specify the unique ID of the notification channel.
    Possible values: Channel ID. Example: 1000000068001

  • modulestring, optional

    Specify the API name of the module for which the notification is enabled.
    Possible values: Module API names. Example: Leads

Sample Request

Copiedcurl "https://www.zohoapis.com/crm/v2/actions/watch?page=1&per_page=200"
-X GET
-H "Authorization: Zoho-oauthtoken 1000.8cb99dxxxxxxxxxxxxx9be93.9b8xxxxxxxxxxxxxxxf"
3.0.08.0
Copied//Get instance of NotificationOperations Class
NotificationOperations notificationOperations = new NotificationOperations();

ParameterMap paramInstance = new ParameterMap();

paramInstance.add(GetNotificationDetailsParam.CHANNEL_ID, 100000006800212 l);

paramInstance.add(GetNotificationDetailsParam.MODULE, "Leads");

paramInstance.add(GetNotificationDetailsParam.PAGE, 1);

paramInstance.add(GetNotificationDetailsParam.PER_PAGE, 2);

//Call getNotificationDetails method
APIResponse < ResponseHandler > response = notificationOperations.getNotificationDetails(paramInstance);
Copiedimport javax.net.ssl.SSLContext;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
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.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
public class GetNotificationDetails 
{
	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");
			uriBuilder.addParameter("page", "1");
			uriBuilder.addParameter("per_page", "1");
			uriBuilder.addParameter("channel_id", "10068001");
			uriBuilder.addParameter("module", "Contacts");
			HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
			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();
$paramInstance = new ParameterMap();
$paramInstance->add(GetNotificationDetailsParam::channelId(), "106800211");
$paramInstance->add(GetNotificationDetailsParam::module(), "Accounts");
$paramInstance->add(GetNotificationDetailsParam::page(), 1);
$paramInstance->add(GetNotificationDetailsParam::perPage(), 2);
//Call getNotificationDetails method
$response = $notificationOperations->getNotificationDetails($paramInstance);
Copied<?php
class GetNotificationDetails{
    
    public function execute(){
        $curl_pointer = curl_init();
        
        $curl_options = array();
        $url = "https://www.zohoapis.com/crm/v2/actions/watch?";
        $parameters = array();
        $parameters["channel_id"]="100068001";

        foreach ($parameters as $key=>$value){
            $url =$url.$key."=".$value."&";
        }
        $curl_options[CURLOPT_URL] = $url;
        $curl_options[CURLOPT_RETURNTRANSFER] = true;
        $curl_options[CURLOPT_HEADER] = 1;
        $curl_options[CURLOPT_CUSTOMREQUEST] = "GET";
        $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 GetNotificationDetails())->execute();
3.0.08.x
Copied//Get instance of NotificationOperations Class
NotificationOperations notificationOperations = new NotificationOperations();
ParameterMap paramInstance = new ParameterMap();
paramInstance.Add(GetNotificationDetailsParam.CHANNEL_ID, 100000006800212);
paramInstance.Add(GetNotificationDetailsParam.MODULE, "Leads");
paramInstance.Add(GetNotificationDetailsParam.PAGE, 1);
paramInstance.Add(GetNotificationDetailsParam.PER_PAGE, 2);
//Call getNotificationDetails method
APIResponse<ResponseHandler> response = notificationOperations.GetNotificationDetails(paramInstance);
Copiedusing System;
using System.IO;
using System.Net;
using System.Xml;
using Newtonsoft.Json;
namespace Com.Zoho.Crm.API.Sample.RestAPI.Notifications
{
    public class NotificationDetails
    {
        public static void GetNotificationDetails()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.zohoapis.com/crm/v2/actions/watch?channel_id=100068001&module=Contacts");
            request.Method = "GET";
            request.Headers["Authorization"] = "Zoho-oauthtoken 1000.abfeXXXXXXXXXXX2asw.XXXXXXXXXXXXXXXXXXsdc2";
            string IfModifiedSince = JsonConvert.SerializeObject("2020-05-15T12:00:00+05:30");
            IfModifiedSince = IfModifiedSince.Replace("\\", "");
            IfModifiedSince = IfModifiedSince.Replace("\"", "");
            DateTime dateConversion = XmlConvert.ToDateTime(IfModifiedSince, XmlDateTimeSerializationMode.Utc);
            request.IfModifiedSince = dateConversion;
            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 ParameterMap Class
param_instance = ParameterMap()
param_instance.add(GetNotificationDetailsParam.module, 'Deals')
param_instance.add(GetNotificationDetailsParam.page, 1)
param_instance.add(GetNotificationDetailsParam.per_page, 20)
param_instance.add(GetNotificationDetailsParam.channel_id, 100000006800211)
# Call get_notification_details method
response = notification_operations.get_notification_details(param_instance)
Copieddef get_notification_details():
    import requests

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

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

    parameters = {
        'page': 1,
        'per_page': 20,
        'channel_id': '1000000068001',
        'module': 'Contacts'
    }

    response = requests.get(url=url, headers=headers, params=parameters)

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

        print(response.json())

get_notification_details()
1.0.010.x
Copied//Get instance of NotificationOperations Class
let notificationOperations = new NotificationOperations();
//Get instance of ParameterMap Class
let paramInstance = new ParameterMap();
await paramInstance.add(GetNotificationDetailsParam.CHANNEL_ID, 100000006800211n);
await paramInstance.add(GetNotificationDetailsParam.MODULE, "Accounts");
await paramInstance.add(GetNotificationDetailsParam.PAGE, 1);
await paramInstance.add(GetNotificationDetailsParam.PER_PAGE, 200);
//Call getNotificationDetails method
let response = await notificationOperations.getNotificationDetails(paramInstance);
Copiedasync function getNotificationDetails() {
    const got = require("got");

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

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

    let parameters = {
        'page': 1,
        'per_page': 20,
        'channel_id': '1000000068001',
        'module': 'Contacts'
    }

    let requestDetails = {
        method : "GET",
        headers : headers,
        searchParams : parameters,
        throwHttpErrors : false
    }
    
    let response = await got(url, requestDetails)
    
    if(response != null) {
        console.log(response.statusCode);
        console.log(response.body);
    }
}
getNotificationDetails()
2.02.x.x
Copied# Get instance of NotificationOperations Class
no = Notification::NotificationOperations.new
# Get instance of ParameterMap Class
pm = ParameterMap.new
pm.add(Notification::NotificationOperations::GetNotificationDetailsParam.channel_id, 10_000_000_680_211)
pm.add(Notification::NotificationOperations::GetNotificationDetailsParam.module_1, 'Deals')
# Call get_notification_details method
response = no.get_notification_details(pm)
Copiedclass GetNotificationDetails 

    def execute
        parameters ={}
        parameters["channel_id"]="1000000068001"
        query_string = parameters.to_a.map { |x| "#{x[0]}=#{x[1]}" }.join('&')
        url = "https://www.zohoapis.com/crm/v2/actions/watch"
        url += '?' + query_string if !query_string.nil? && (query_string.strip != '')
        url = URI(url)
        req = Net::HTTP::Get.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) }
        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
GetNotificationDetails.new.execute
1.0.0ES6
Copied//Get instance of NotificationOperations Class
let notificationOperations = new ZCRM.Notification.Operations();
//Get instance of ParameterMap Class
let paramInstance = new ParameterMap();
await paramInstance.add(ZCRM.Notification.Model.GetNotificationDetailsParam.CHANNEL_ID, 16800211n);
await paramInstance.add(ZCRM.Notification.Model.GetNotificationDetailsParam.MODULE, "Accounts");
await paramInstance.add(ZCRM.Notification.Model.GetNotificationDetailsParam.PAGE, 1);
await paramInstance.add(ZCRM.Notification.Model.GetNotificationDetailsParam.PER_PAGE, 200);
//Call getNotificationDetails method
let response = await notificationOperations.getNotificationDetails(paramInstance);
Copiedclass GetNotificationDetails {

	async getNotificationDetails()	{
		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 GetNotificationDetails().getToken(token)
        headers.set("Authorization", "Zoho-oauthtoken " + accesstoken)
        parameters.set("page", "1")
        parameters.set("per_page", "1")
        parameters.set("channel_id", "168001")
        parameters.set("module", "Contacts")
        var requestMethod = "GET"
        var reqBody = null
        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 GetNotificationDetails().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);
                }
            }
        })
    }
}
Note
  • Use the page and per_page parameter to fetch records according to their position in the CRM. Let's assume that the user has to fetch 400 records. The maximum number of records that one can get for an API call is 200. So, for records above the 200th position, they cannot be fetched. By using the page (1, 2, 3 and 4) and per_page (100) parameter, the user can fetch all 400 records using 4 API calls.

Sample Response

Copied{
    "watch": [
       {
            "channel_expiry": "2018-02-02T11:30:00+05:30",
            "resource_uri": "https://www.zohoapis.com/crm/v2/Contacts",
            "resource_id": "1000000000045",
            "notify_url": "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val3",
            "resource_name": "Contacts",
            "channel_id": "1000000068001",
            "events": [
                "Contacts.create"
            ],
            "token": "TOKEN_FOR_VERIFICATION_OF_1000000068001"
        },
       {
            "channel_expiry": "2018-02-02T11:30:00+05:30",
            "resource_uri": "https://www.zohoapis.com/crm/v2/Leads",
            "resource_id": "1000000000041",
            "notify_url": "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val3",
            "resource_name": "Leads",
            "channel_id": "1000000068001",
            "events": [
                "Leads.edit",
                "Leads.create",
                "Leads.delete"
            ],
            "token": "TOKEN_FOR_VERIFICATION_OF_1000000068001"
        },
       {
            "channel_expiry": "2018-02-02T11:30:00+05:30",
            "resource_uri": "https://www.zohoapis.com/crm/v2/Deals",
            "resource_id": "1000000000047",
            "notify_url": "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val3",
            "resource_name": "Deals",
            "channel_id": "1000000068001",
            "events": [
                "Deals.edit",
                "Deals.create",
                "Deals.delete"
            ],
            "token": "TOKEN_FOR_VERIFICATION_OF_1000000068001"
        },
       {
            "channel_expiry": "2018-02-02T11:30:00+05:30",
            "resource_uri": "https://www.zohoapis.com/crm/v2/Tasks",
            "resource_id": "1000000000063",
            "notify_url": "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2",
            "resource_name": "Tasks",
            "channel_id": "1000000068001",
            "events": [
                "Tasks.edit",
                "Tasks.create",
                "Tasks.delete"
            ],
            "token": "TOKEN_FOR_VERIFICATION_OF_1000000068001"
        },
       {
            "channel_expiry": "2018-02-02T10:30:00+05:30",
            "resource_uri": "https://www.zohoapis.com/crm/v2/Leads",
            "resource_id": "1000000000041",
            "notify_url": "https://www.zoho.com/callback?authorization=Zoho-oauthtoken 1000.23dnsbbbh455jnn&key1=val1&key2=val2&key3=val3",
            "resource_name": "Leads",
            "channel_id": "1000000058003",
            "events": [
                "Leads.edit",
                "Leads.create",
                "Leads.delete"
            ],
            "token": "TOKEN_FOR_VERIFICATION_OF_1000000058003"
        }
    ],
    "info": {
        "per_page": 200,
        "count": 5,
        "page": 1,
        "more_records": false
    }
}