Kaizen #67 - Email the contact roles of a deal using Functions

Kaizen #67 - Email the contact roles of a deal using Functions

Happy New Year everyone! We hope you had a wonderful holiday season and are ready to tackle all of the challenges and opportunities that the new year brings.

      In the previous post, we discussed the Contact Roles APIs in Zoho CRM. Today, we will show you how you can send emails to all the contact roles associated with a Deal, using a custom function.

Function to email all contact roles of a Deal

      The Contact Roles related list allows you to link multiple contacts to a single deal and specify their role in the deal. Often you may want to send emails to all the contacts associated with a deal in certain situations. For example, you may want to update all the contacts on the status of the deal, invite all the contacts to a webinar or event related to the deal, or send an important update about the deal. By using a custom function, you can easily send emails to all the contact roles associated with a deal. 

Create and execute the Function

Step 1: Go to Setup > Automation > ActionsFunctions.
Step 2: Click Configure Function.
Step 3: Click Write your own.
Step 4: Enter the following details :
            Function Name 
            Display Name
            Description
            Choose the function category as Leads.
Step 5: Copy and paste the following code in the editor :
 
  relatedcontroles = zoho.crm.getRelatedRecords("Contact_Roles","Deals",input.dealId.toLong());
  salutation = "<p>Hello!!<br /><br /></p>";
  signature = "<br /><br /><p>Best Regards,<br />Patricia Boyle</p>";
  sub = input.emailSubject.toString();
  str = input.emailContent.toString();
  str = concat(salutation,str);
  str = concat(str,signature);
  for each  role in relatedcontroles
  {
emailAddress = role.get("Email");
info emailAddress;
sendmail
[
from :zoho.adminuserid
to :emailAddress
subject :sub
message :str
]
  }


Step 6: Click on Edit Arguments and add the following and then click Save.


Step 7: Click on Save and Execute.
Enter the deal ID, email subject, and content, and click Save to send emails to all the contact roles associated with the corresponding deal. 

Function to Email specific contact roles of a Deal with email template

      There may be times when you want to send emails to only selected contact roles of a deal. For example, when you want to discuss or update the financial aspects of the deal, or if you are discussing the budget for the deal and want to discuss cost-saving benefits, you might want to send emails only to the finance team of the prospective organization. Or, when you are reviewing legal or compliance considerations, or negotiating the terms of the deal, you might want to send an email only to the legal team to discuss these considerations. You can use an email template defined in your account to send the emails instead of drafting the entire content again in the functions.. You can achieve this by using a custom function as well.

Create and execute the Function

Create the connector

Step 1: Go to Setup > Developer Space > Connections.
Step 2: Click Create Connection.
Step 3: Pick the  Zoho OAuth service.
Step 4: Specify the Connection details : Connection Name and Connection Link Name.
Step 5: Choose the following scopes :
ZohoCRM.templates.email.READ
ZohoCRM.modules.All
Step 6: Click Create and Connect and authenticate your connection.

After creating and authenticating your connection, complete the following steps:

Step 1: Go to Setup > Automation > Actions >  Functions.
Step 2: Click Configure Function.
Step 3: Click Write your own.
Step 4: Enter the following details :
            Function Name 
            Display Name
            Description
            Choose the function category as Leads.
Step 5: Copy and paste the following code in the editor :
 
  relatedcontroles = zoho.crm.getRelatedRecords("Contact_Roles","Deals",dealId);
  contactroles = invokeurl
            [
                  url :"https://www.zohoapis.com/crm/v4/Contacts/roles"
                  type :GET
                  connection: "connection_name"
            ];
  roles = contactroles.getJson("contact_roles");
  roles_id = List();
  for each name in roles
  {
role_name = name.getJson("name");
role_id = name.getJson("id");
if(wanted_roles.contains(role_name)){
roles_id.add(role_id);
}
  }
  info roles_id;
  emails = List();
  for each roleid in roles_id
  {
     for each record in relatedcontroles
     {
  if ( record.get("Contact_Role") == roleid ) 
      {
emails.add(record.get("Email"));
      }
    }
  }
  info emails;
  p = contactroles.getJSON("body");
  template = invokeurl
  [
type :GET
connection: "connection_name"
];
  econt = template.getJson("email_templates").toMap().get("content");
  sub = template.getJson("email_templates").toMap().get("subject");
  u = template.getJSON("body");
  for each  email in emails
   {
  sendmail
  [
  from :zoho.adminuserid
  to :email
  subject :sub
  message : econt
  content type :HTML
  ]
  }


Step 7: Replace the connection_name with the name of your connector.
Step 6: Click on Edit Arguments and add the following and then click Save.


Step 7: Click on Save and Execute
Enter the deal ID, the email template ID, and the contact roles you want to send the email to, and click Save to send emails.

We hope you found this post useful. We will be back next week with more interesting topics.
Write to us at support@zohocrm.com if you have any questions, or let us know in the comment section. 

Previous Kaizen Post : Contact Roles APIs