Posting on LinkedIn Directly from Zoho Cliq

Posting on LinkedIn Directly from Zoho Cliq

Are you tired of switching back and forth between Zoho Cliq and LinkedIn to make a simple post? Well, there's good news! With the following instructions, you can post directly on LinkedIn from within Zoho Cliq. Let's get started!

Step 1: Generate an OAuth Token

To post on LinkedIn from Zoho Cliq, you'll need to generate an OAuth token. Here's how to do it:
  • Go to the LinkedIn Developer page and create a new app by clicking on "Create app"

  • Enter your app name, LinkedIn page, and app logo, then agree to the terms and conditions and click on "Create app".

  • Navigate to the "Products" tab and request access for "Share on LinkedIn" and "Sign In with LinkedIn".

  • Go to the OAuth Tools page and create a new access token.
  • Congratulations! You've successfully generated an OAuth token.

Step 2: Configure the OAuth Token in Zoho Cliq

Now that you have your OAuth token, it's time to configure it in Zoho Cliq. Here's how:
  • Go to https://cliq.zoho.com and navigate to "Profile" > "Bots & tools" > "Integrations" > "Command" > "Create".
  • Enter a command name, hint, access level, and click on "Save".
  • Copy and paste the following code:
  1. inputs = List();
  2. inputs.add({"type":"textarea", "name":"description","label":"Description","placeholder":"What do you want to talk about?","min_length":"0","max_length":"1000","mandatory":true});
  3. inputs.add({"name":"file","label":"Add a Photo","placeholder":"Please upload a photo to upload.","mandatory":false,"type":"file"});
  4. return {"type":"form","title":"Create a post","name":"linkedinPost","hint":"","button_label":"Submit","inputs":inputs,"action":{"type":"invoke.function","name":"linkedinPost"}};
  • Next, go to "Profile" > "Bots & tools" > "Integrations" > "Function" > "Create".
  • Name your function "linkedinPost", enter a hint, choose the function type as form, and click on "Save".
  • Copy the code below and paste it inside the form submit handler.
  1. formValues = form.get("values");
  2. textContent = formValues.get("description");
  3. file = formValues.get("file");
  4. // fetch access token
  5. token = "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  6. headersMap = Map();
  7. headersMap.put("Authorization",token);
  8. headersMap.put("LinkedIn-Version","202208");
  9. fetchUserID = invokeurl
  10. [
  11.  url :"https://api.linkedin.com/v2/me"
  12.  type :GET
  13.  headers:headersMap
  14. ];
  15. info fetchUserID;
  16. userID = fetchUserID.get("id");
  17. if(file.length() == 0)
  18. {
  19.  params = {"author":"urn:li:person:" + userID,"lifecycleState":"PUBLISHED","specificContent":{"com.linkedin.ugc.ShareContent":{"shareCommentary":{"text":textContent},"shareMediaCategory":"NONE"}},"visibility":{"com.linkedin.ugc.MemberNetworkVisibility":"PUBLIC"}};
  20.  createPost = invokeurl
  21.  [
  22.   url :"https://api.linkedin.com/v2/ugcPosts"
  23.   type :POST
  24.   parameters:params + ""
  25.   headers:headersMap
  26.   detailed:true
  27.  ];
  28.  info createPost;
  29. }
  30. else
  31. {
  32.  initializeParams = {"initializeUploadRequest":{"owner":"urn:li:person:" + userID}};
  33.  initializeUpload = invokeurl
  34.  [
  35.   url :"https://api.linkedin.com/rest/images?action=initializeUpload"
  36.   type :POST
  37.   parameters:initializeParams + ""
  38.   headers:headersMap
  39.  ];
  40.  info initializeUpload;
  41.  imageUrl = initializeUpload.get("value").get("uploadUrl");
  42.  imageID = initializeUpload.get("value").get("image").toList(":").get(3);
  43.  uploadFile = invokeurl
  44.  [
  45.   url :imageUrl
  46.   type :PUT
  47.   parameters:file
  48.   headers:headersMap
  49.   detailed:true
  50.   content-type:"application/octet-stream"
  51.  ];
  52.  info uploadFile;
  53.  if(uploadFile.get("responseCode") == 201)
  54.  {
  55.   params = {"author":"urn:li:person:" + userID,"lifecycleState":"PUBLISHED","specificContent":{"com.linkedin.ugc.ShareContent":{"shareCommentary":{"text":"Good Afternoon everyone"},"shareMediaCategory":"IMAGE","media":{{"status":"READY","description":{"text":"Center stage!"},"media":"urn:li:digitalmediaAsset:" + imageID,"title":{"text":"First LinkedIn Post"}}}}},"visibility":{"com.linkedin.ugc.MemberNetworkVisibility":"PUBLIC"}};
  56.   createPost = invokeurl
  57.   [
  58.   url :"https://api.linkedin.com/v2/ugcPosts"
  59.   type :POST
  60.   parameters:params + ""
  61.   headers:headersMap
  62.   detailed:true
  63.   ];
  64.   info createPost;
  65.  }
  66.  else
  67.  {
  68.   return {"text":createPost.get("responseText").get("message"),"card":{"theme":"10"}};
  69.  }
  70. }
  71. if(createPost.get("responseCode") == 201)
  72. {
  73.  return {"text":"Post created successfully","type":"banner","status":"success"};
  74. }
  75. else
  76. {
  77.  return {"text":createPost.get("responseText").get("message"),"card":{"theme":"10"}};
  78. }
  79. return Map();
  • That's it! You can now use the command you created in Step 2 to post directly on LinkedIn from Zoho Cliq.
We hope this guide was helpful. Now, you can post on LinkedIn without leaving Zoho Cliq. Happy posting!