Integrate Salesforce with Telegram to Engage with Customers

As a business, it is very important to connect with customers in the way they like. Customer can prefer Email, Phone, or their favorite messaging application.

While there are countless messaging applications in the market, one of the popular messaging application is Telegram. And as a developer, what particularly I like about the app it there easy to use API with minimal configurations needed.

So today, we will be implementing a solution to allow the Sales and Marketing team to push messages to Customers and also how the Salesforce administrator can create Automation to send updates to Customer Inbox.

1. First, we need to set up a Telegram bot, which will be the front face of our business to the customer.
Registering a Bot is way easy then you might think via another bot named “BotFather”. Navigate to the bot using this link and create a bot using /newbot command. You will instantly get the Bot URL and API key needed.

2. Now lets setup the Salesforce, so we can connect with customers through the bot. When a customer navigates to our bot and selects /start command, we get a new message event with the Chat ID. We need to capture this ID in Salesforce so we can use it later to send messages just like we store Email/phone.
For this, we need to set up a webhook listener, to capture user events and create/update Contact with the Telegram User ID/ Chat ID (Same in one to one conversion).

This Webhook service will be now updating the contact if found with the User telegram ID or will create a new contact when a new message is received. 
For this to work, we need to register this webhook for our bot. This can be done by a GET request to the below URL.

Now send a message to your bot, (in our case and a new contact should be created in Salesforce.

Now that, we have Telegram ID of the customers in the Telegram_User_ID__c field on Contact. We can send them messages. But now we need to provide a way to the Sales and Marketing team to send messages and Salesforce administrators to create an automation process to send messages.

Sales and Marketing team solution

For them, we will build a custom Lightning component and place it on the Contact Record page, though this Sales and Marketing team can send messages directly without any efforts.

Salesforce administrator (Automated solution)

Every organization have various automation process to keep the customer updated about the events happening related to the customer, for example, an e-commerce business might have automation to send a notification to customer when their Order is shipped or Banking business might have a notification for Debit/credit transactions. 
For the automation, we will be using the Lightning Process builder with an Invocable method to process and send messages over Telegram.
So let’s first get the Invocable class ready. You can get the code from the GIT repo mentioned at the end of the article.

Now we can proceed to create a Process builder according to the business requirement.
In our case, we will send a message notification to the customer when their Email Address is updated.

Now let’s update the email and test!

Using the Process builder, we can now create various custom notifications on events without any hassle.

Other points:
  1. You need to add Telegram API to Remote Site settings in Salesforce. From Setup, enter Remote Site Settings in the Quick Find box, then select Remote Site Settings and add
  2. You need to create a custom label with API Name Telegram_Bot_API_key with your telegram bot API key.
  3. Create a field Telegram_User_ID__c (Number — 18,0) on Contact.

You can find the code in the git repo below. Please note the code is for demonstration purposes. Error handling is not implemented properly.

For more description of the Bot API, see this page:

Enable SSO between 2 salesforce communities

Hello Everyone ,
I hope you all have read my recent post. Recently I have implemented SSO between 2 salesforce communities. Let’s start how I did this using salesforce’s out of the box functionality.

Use Case: one organisation was using the salesforce and salesforce community(let's name it cloudkicks) , later they acquired another organisation another company and that company was also using the salesforce and salesforce community(name it iCourier).  Now the stakeholder of the parent organisation wanted that users of their community can login directly in the acquired company’s community portal.

So in this case cloudkicks will act as Identity provider (Source organisation) and iCourier will act as service provider (Target community where we want to login).

Following steps we need to take :
1.     Enable Identity provider in source org.
2.     Enable Single Sign on in the target org.
3.     Create a connected app in the source org.

Let’s see them step by step how that will be working.
1.     Enable Identity provider in source org:
a.     If identity provider is not already enabled in org then first enable it.
Once we click on the enable identity provider button we will be asked to select a certificate, you can select existing one or also can create new.
b.     Download metadata and certificate: Once we have enabled identity provider in our source org we need to download metadata file, which will be used for enabling single sign on in the target org.

2.     Enable Single Sign on in the target org
a.     SAML Enabled:
b.     Create SAML Sign-On Settings: We can click on a new button and fill all the details manually,or we can use metadata file by clicking on the ‘New from Metadata file’  button. We will use a metadata file which we used from step 1.

All details will be filled automatically. We would need to make the following changes for red highlighted fields.

Request Signature Method: RSA-SHA1
Service Provider Initiated Request Binding: HTTP POST
Identity Provider Login URL: Keep it blank for now , we will come back to it later.

3.     Create connected app in the source org: We will create a connected app in the source org (cloud kicks) .
In the connected app , enable SAML, we need some information here that will be provided by target org when they enable single sign on setting.
Lets see where we can get entity url and ACS URL from the target org.Both details are available on the detail page of single sign on setting which we created in step 2.

Entity Id :

ASC URL: Is the endpoint of login url where we need to provide login access.

Once we save connected app , click on manage button and assign profiles who will be using this connected app (cloudkicks community user profile)

Now we need to copy ‘IdP-Initiated Login URL’ and put it on the single sign on settings, remember we put 1 blank value there.
Copy from the connected app

Paste on the single sign on setting page in target org.

Now we are done with the setup. We can call this url on any button click from target community (Cloudkicks) and it will allow us to login into source org community (iCourier).

Note: We can set federation Id on user detail page, make sure federation id should be same in both orgs for a user, this will be used to authenticate the user.

Connect Blogger to Salesforce - CMS

Hello All,

Before starting on the connecting blogger with salesforce I would like to highlight about what actually salesforce cms and some of its use cases.

Salesforce CMS is very simple and powerful tool.With the help of salesforce CMS user can create,manage and deliver content. It also help translation and mutlilanguage. Salesforce CMS is hybird cms, which enables us to centeralize content on a location. And embed other cms system (wordpress,drupal,blogger) data into salesforce. These systems data will be managed on the respective system itself and will reflect into salesforce.

How to connect Blogger with Salesforce:  We will use CMS connect with JSON here to connect Blogger with the salesforce.

Whitelist URL: CMS connect use CORS (Cross origin resource sharing) to access external data. we need to whitlelist public api url in the CORS and CSP both.

base url for google apis:

Open CMS Content for the community in which we want to show blogger data.

Click on the CMS connect and then click on the new button to create new connection.

Enter following information in the connection details section:

Name : This will be used to identify the connection, like name of any record in salesforce
CMS Source: Other (we can select any other available to make connection with them)
Connection type: Public (we are using public api with a public key)
Server URL:  (Make sure you have added it in the CORS and CSP)

Click on the add JSON button below in the popup. And give it a readable name.

Enter following information in the content item section. This will be used to read individual content item in the community.

Name: Blog Item
Path: blogger/v3/blogs/5011517723534616475/posts/{component}?key=AIzaSyA0ykuQ9XoVr1Q1rLYuWV8g4VUGVNJoC9E
Id Path: Field Name or Path to use as unique identifier of the content item.
Titile Path: Filed Name or path to display as title for this content item.

In the path url '5011517723534616475' is the blog id from where I will fetch my content.
{component} is used to pass component url dynamically, to make relative url in the community
key is provided by the google.  Click here to get your key from google.

Enter following information in the content list section. This will be used to fetch list of all content items.

Name: Blog Feed (It can be any relatable name)
Path: blogger/v3/blogs/5011517723534616475/posts?key=AIzaSyA0ykuQ9XoVr1Q1rLYuWV8g4VUGVNJoC9E&fetchBodies=true&maxResults=50&fetchImages=true
Node Path: items

Click on the save button. Now we need to put our dynamic content on the community.

Go to builder and drag and drop CMS connect (JSON) component on the community page where we want to display content.
Configure the following properties to display dynamic content list.

Below this we need to configure some JSON keys to display data. We can check public key by hitting the below url in the browser. This url is combination of server url ( and the path we put in the content list section.

Configuration for content list item layout.

Click on the save button and you can see dynamic data in component you dropped. You can publish or preview community and see all dynamic data from blogger to salesforce.

See the live demo here.

If you have any suggestion feel free to reach me out on twitter or linkedin.

Arpit vijayvergiya
Certified Salesforce Consulant

Lightweight LWC Data Table

Hi All,
Whenever we need to show many records to user with client side filtering, sorting and pagination, most of us use the jQuery Data Tables (Which is very popular).
But in Salesforce lightning, if we are working with LWC then using jQuery gives a lot of issues for us. We need a Vanilla based Data Table which gives all these features.

  1. Client Side search on records
  2. Client Side pagination
  3. Client Side sorting
  4. Client Side page size changes

To overcome this problem in LWC, we have made one Light weighted LWC Data Table, which works similar to jQuery Data Tables.

Please look the demo:

Aslam Bari

Some highlights by Salesforce

​Hello All,

There are some recent updates by Salesforce, which i got to know in last a few days and announced in Dreamforce 19. Just sharing it with you.

1. Dynamic Forms let you migrate fields & sections from your page layout as individual components into Lightning App Builder. Then configure them just like rest of the components on page, and give users relevant info when they need. Check it out here.

2. The Salesforce Einstein Hub is your one-stop-shop for education on how to use and get started with Einstein. Go to place to learn all about the Einstein Platform. Check it out here.

3. Secure Your Sandbox Data With Salesforce Data Mask - a new tool to help you customize, build, and test on Salesforce while protecting private data. Find out more here.

4. Einstein Voice Assistant and Einstein Voice Skills (beta Spring ’20) allows every Salesforce admin to create custom versions of the Voice Assistant for every user, whether they're a sales rep or manager, service agent, marketer etc

5.  Trailhead comes to mobile devices. Salesforce has introduced the Trailhead GO app to skill up for the future on the go. Currently, this app is exclusively for iOS and iPadOS. Click on this link to download it from Apple App Store,

6.  Salesforce With Customer 360 Data Manager, admins can register their instances of Marketing, Commerce, Service Cloud & then map customer records from each one of them into one, unified view of customer.

7. Salesforce has partnered with AWS to empower learners to skill up for the future. AWS learning content is now available on Trailhead. Check it out here.

8. Permission Set Groups is a new feature that allows Admins to combine multiple permission sets into a single permission set group for user assignment. With the grouping mechanism, admins can truly apply role-based access control for managing user entitlements in Salesforce orgs.

Thank you
Ranu Bari​

Winter’20 Release Highlights

I have reviewed Winter'20 release notes by salesforce. In case you have not read the whole PDF of Salesforce Winter’20 release notes, summarized some of the need-to-know or cool Winter‘20 features.

1.      Add Lightning Web Components as Custom Tabs : Now you can add LWC as a custom tab in lightning experience app and salesforce app.
2.      Increase Productivity with Local Development for Lightning Web Components (Beta) : LWC offers local development, now no need to deploy during development and continuously changes, you can see preview on local without publishing.
3.      Hitting Apex Limits in Server-Side Actions Is More Predictable : Apex limits in Lightning components are now applied per action. Previously, the Apex limits applied across all the actions batched together  in a request.
4.      Navigate Users Directly to an App : Now you can create components that link directly to your app and to a specific page in your app.
5.      Hide the Default Label for Visualforce Pages in Lightning App Builder : Lightning app builder provides a Show Label option so that you can choose your own to hide the default label.
6.      Enforce Field-Level Security in Apex (Beta) : stripInaccessible() security feature provides field level data protection. For example, If the user doesn’t have permission to read the any  field of a Contacts object, this example code removes the subquery field before reading the records. The DML operation completes without throwing an exception.
7.      Callouts Are Excluded from Long-Running Request Limit :  HTTP callout processing time is no longer included when calculating the 5-second limit. Timer paused for the callout and resume it when callout completes.
8.      Formula Class in the System Namespace : The new System.Formula class contains the recalculateFormulas method that updates (recalculates) all formula fields on the input sObjects.
9.      Community and Portal User Visibility Are Disabled by Default in New Orgs : The Community User Visibility and Portal User Visibility settings are now disabled by default for orgs created in Winter ’20 and later that enable communities or portals. External users in portals and communities can see themselves and are visible to users above them in the role hierarchy. When Community User Visibility is enabled, communities users are visible to all other users in the communities that they are a member of. When Portal User Visibility is enabled, portal users are visible to all other portal users in the same account.
10.   Set Up Email Address Confirmations for Lightning Communities :  When Lightning Communities external users changed their email address, the email address is updated immediately. For better security, you can now make sure that the user owns the new email address before the update takes effect. Salesforce recommends that you enable email confirmations from the Identity Verification Setup page. For new orgs, email confirmations occur automatically.
11.   Use Sharing Rules to Grant Record Access to Guest Users : Control which records you allow guest users without login credentials to access. A guest user sharing rule is a type of criteria-based sharing rule that can grant Read Only access to guest users. It’s the only way that you can share records with unauthenticated users when the Secure guest user record access setting is enabled.

12.   Secure Guest Users’ Record Access with a New Setting : Secure the access that unauthenticated guest users have to your org’s data with the Secure guest user record access setting. When enabled, guest users’ org-wide defaults are set to Private for all objects, and you can’t change this access level. You also can’t add guest users to groups or queues or manually share records with them. You can grant record access only with new guest user sharing rules.
13.   Make Files on Records Visible to Customers in Communities : Now you can decide which files customers can see on records that you share with customers in your communities. By default, files on records aren’t visible to customers in communities. The new Customer Access switch on a file’s sharing detail page lets you decide when customers can see the file.
14.   Remove a File from a Record Without Deleting It Everywhere : Want to remove a file from a record but not delete it from your Salesforce org? Now you can! Previously, a file owner could delete a file from Files home or a record using row-level actions. But this method also removed the file from all records and posts where it was attached. Now you can easily remove the file from a record without also removing it from other records, posts, or Files home.

15.   Require Verification When Community Users’ Change Their Email Address : Improve security by requiring external users to confirm their community email address changes. When a community user changes an email address, you can have an email sent to the new address for confirmation. After the user clicks the confirmation link in the message, the address change takes effect. Salesforce recommends that you enable email confirmations to improve security. Sending email confirmations occurs automatically for new communities and new and existing internal users.

For detail information, you can visit here,

Salesforce Data Modelling & Application Implementation

Hi All,

As a regular practice we organize "Let's Code Together" session at iBirds Software Services Pvt. Ltd. time to time. This Saturday (21 Sep, 2019), we had seminar on Data Modelling and Application Implementation seminar on Salesforce. We chose the example of implementing a sample "Recruitment Application" in salesforce. We had the following case study before starting this seminar.

Recruitment App Case Study

‘Smart Job’ company needs their recruitment application on salesforce.

Admin / HR can perform following tasks

1.       Can create jobs
2.       View all jobs by different filters
3.       Can see all candidates
4.       Can see all applications
5.       Assign application to Interviewer for taking interview of the candidates

Interviewer can do following tasks

1.       Can see all jobs
2.       Cannot edit/create/delete jobs
3.       Can see applications only assigned to him
4.       Cannot see all candidates
5.       Can edit applications assigned to him few fields.

Candidate can do following tasks

1.       Can see all jobs
2.       Can apply for a particular job
3.       Can see all his/her applications
4.       Can delete / edit self-applications anytime
5.       Can apply only after login
6.       Can upload CV
7.       Candidates cannot see each other data

Guest user can do following tasks

1.       Can see all jobs
2.       Cannot apply on jobs

It was great get together session. Here is the recording for the seminar.