构建 Twilio 扩展
Twilio 是一个云通信平台,允许开发者以编程方式集成他们的应用程序,以使用其 Web 服务 API 发出和接收语音呼叫和文本消息。以下核心主题将帮助开发者了解和构建 Twilio 扩展。
带有 Twilio 的 Zoho CRM
Twilio 扩展是作为 Zoho CRM 的第三方扩展创建的,用于在对内置模块和自定义模块执行各种操作时向 CRM 帐户所有者及其用户发送短信。
本指南将帮助开发者执行以下操作:
- 获取 Twilio 凭证以进行身份验证
- 构建样本 Twilio 扩展
获取 Twilio 凭证以进行身份验证
在 Zoho Developer 控制台的帮助下启用 Twilio 与 Zoho CRM 的集成。要开始构建此集成,开发者必须知道 Twilio 遵循的身份验证和授权协议的类型。基本上使用两种类型的认证机制。他们是:
- 简单的基于令牌的身份验证,使用自定义变量。
- 基于 OAuth 或 OAuth2.0 协议的身份验证,需要创建连接器。
为使用 Twilio 构建样本扩展,我们遵循使用自定义变量的简单的基于令牌的身份验证。所有针对 Twilio 的 REST API 的请求要求您使用两个重要身份验证参数(帐户 SID 和身份验证令牌)进行身份验证。这两个必需参数可用作设置扩展时的自定义变量。
要将 Twilio 集成到 Zoho CRM 中,需要 Twilio 帐户。
登录 https://www.twilio.com/ 并在注册后获取凭证。获取帐户 SID 和身份验证令牌。
构建样本 Twilio 扩展
Zoho CRM 的以下 Twilio 扩展根据通过 Zoho CRM 的不同模块执行的各种操作向预期收件人发送短信。
创建线索时发送短信
主要功能是在“线索”模块中创建或导入新线索时向 CRM 帐户及其用户发送短信。
创建新的扩展
- 登录 Zoho Developer 控制台,然后点击为 Zoho CRM 构建扩展
- 点击创建扩展
- 在创建扩展页面中填写以下信息:
- 扩展名称:Twilio
- 独有名称空间:Twilio(选择独有名称空间,以后无法更改)
- 简短描述:将 Twilio 与 Zoho CRM 集成
- 点击创建。
新扩展将显示在 Zoho Developer 控制台的扩展页面中。
创建并调用自定义变量
- 登录 Zoho Developer 控制台,然后点击 Zoho CRM 的扩展。
- 选择您要将自定义变量添加至的扩展。
- 在左窗格中点击扩展设置,然后点击创建。
- 提供以下详细信息:
- 字段名称:Authtoken
- API 名称:Authtoken
- 值 : 从 Twilio 帐户获取的值
- 点击保存。
以类似方式创建与帐户 SID、Twilio 手机号码和用户消息相关的所有其他自定义变量。
现在已设置并已保存所有机构变量。
设置工作流
- 在 Zoho Developer 控制台中,点击左窗格中的自动化,然后选择工作流
- 选择规则页签,然后点击创建规则按钮。
- 在新建规则页面中,按如下所示填写详细信息:
基本信息
- 模块:线索
- 规则名称:SendSMSonLeadCreation
- 描述:创建线索时发送消息。
- 点击下一步
规则触发器
- 执行依据:选择记录操作
- 选择创建,然后点击下一步
规则条件
- 无
- 点击下一步
操作
在即时操作中
- 转至调用自定义函数,然后点击 +
在函数编辑器区域中:
- 工作流自定义函数:在所提供文本框中输入 SendSMSonLeadCreation,然后选择线索
在编辑器区域中写入 Deluge 脚本中给定的以下自定义函数,然后点击保存并关联。
m = map();
m.put("type","CurrentUser");
resp = zoho.crm.invokeConnector(("crm.getusers"), m);
response = resp.get("response");
indMobile = response.executeXPath("/root/users/mobile/text()");
info indMobile;
leadId = input.lead.get("Leads.ID");
datamap = map();
datamap.put("module","Leads");
datamap.put("id", leadId);
resp = zoho.crm.invokeConnector(("crm.get"), datamap);
resp1 =(resp.get("response")).toMap();
res = resp1.get("data");
reqq =(res.subString(1,(res.length()-1))).toMap();
fullName = reqq.get("Last_Name");
mobile = reqq.get("Mobile");
tmobile = zoho.crm.getOrgVariable("twilioext.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilioext.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilioext.Authtoken");
msg = zoho.crm.getOrgVariable("twilioext.Users Message");
messageToBeSent = fullName + mobile + msg;
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
headermap = map();
headermap.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("To", indMobile);
mappp.put("From", tmobile);
mappp.put("Body", messageToBeSent);
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, headermap);
info respp;- 点击保存。
定义函数和信号
函数是可作为 REST API 调用的独立 Deluge 函数。
- 在 Zoho Developer 控制台中,点击左窗格中的自动化,然后选择函数。
- 点击新建函数,然后提供函数名称:
- 函数名称:IncomingSMS
在编辑器区域中写入以下 deluge 函数,然后点击保存:
resp = input.requestMap;
twilioResp =(resp.get("parameters")).toMap();
fromNumber = twilioResp.get("From");
messageContent = twilioResp.get("Body");LeadRespList= zoho.crm.searchRecords("Leads","(Mobile|=|"+ fromNumber +")");for each LeadRespinLeadRespList{LeadId=LeadResp.get("LEADID");if((LeadId==null)||(LeadId=="")){LeadId="";}}ContactRespList= zoho.crm.searchRecords("Contacts","(Mobile|=|"+ fromNumber +")");for each ContactRespinContactRespList{FinalId=ContactResp.get("CONTACTID");if((FinalId==null)||(FinalId=="")){FinalId="";}}
updateMap ={("twilioext.Incoming_Message_Content"): messageContent,"twilioext.SMS_Texts_Name":("Incoming SMS"),"twilioext.Lead":LeadId,"twilioext.Contact":FinalId,"twilioext.Direction":"Inbound"};
m = map();
l =List();
l.add(updateMap);
m.put("module","twilio.SMS_Texts");
m.put("data", l);
resp = zoho.crm.invokeConnector("crm.create", m);
signalleadResp = zoho.crm.getRecordById("Leads",LeadId.toLong());Leademail= signalleadResp.get("Email");if((Leademail!="")||(Leademail!=null)){
signalMap = map();
signalMap.put("signal_namespace",("twilioext.incomingsmssignal"));
signalMap.put("email",Leademail);
signalMap.put("subject",("Incoming SMS"));
signalMap.put("message", messageContent);
actionsList =List();
actionMap = map();
actionMap.put("type","link");
actionMap.put("display_name","View Email");
actionMap.put("url","www.google.com");
actionsList.add(actionMap);
signalMap.put("actions", actionsList);
result = zoho.crm.invokeConnector("raisesignal", signalMap);
info result;}
signalcontactResp = zoho.crm.getRecordById("Contacts",FinalId.toLong());Contactemail= signalcontactResp.get("Email");if((Contactemail!="")||(Contactemail!=null)){
signalMapx = map();
signalMapx.put("signal_namespace",("twilioext.incomingsmssignal"));
signalMapx.put("email",Contactemail);
signalMapx.put("subject",("Incoming SMS"));
signalMapx.put("message", messageContent);
actionsListx =List();
actionMapx = map();
actionMapx.put("type","link");
actionMapx.put("display_name","View Email");
actionMapx.put("url","www.google.com");
actionsListx.add(actionMapx);
signalMapx.put("actions", actionsListx);
resultx = zoho.crm.invokeConnector("raisesignal", signalMapx);
info resultx;}信号是您在 CRM 帐户中收到的通知,此通知提供客户与您通过各种通信渠道进行交互的信息。
- 在 Zoho Developer 控制台中,点击左窗格中的自动化,然后选择信号
- 点击定义信号按钮。
- 按如下所示输入详细信息:
- 信号名称:IncomingSMSSignal
- 名称空间:Incomingsmssignal
- 点击保存。
测试扩展
- 在 Zoho Developer 控制台的右上角点击测试扩展。
- 点击线索模块。
- 选择特定线索记录,然后复制顶部地址栏中提供的线索 ID。
执行自定义函数
- 在 Zoho Developer 控制台中,点击左窗格中的自动化。
- 选择工作流,然后选择自定义函数页签。
- 选择 SendSMSonLeadCreation,然后点击编辑。
- 点击执行按钮,输入先前步骤中创建的线索 ID,然后点击提交。

这将生成以下 API 响应。

测试成功时,CRM 帐户所有者和用户将在相应线索被创建或导入时收到有关相应详细信息的短信。
(ii) 创建联系人时发送短信
另一个相似功能用于在创建新联系人、将线索转换为联系人或在“联系人”模块中导入来自外部资源的联系人时向 CRM 帐户及其用户发送短信。就工作流规则和自定义函数而言,以上步骤中需要更改的部分较少。要反应的更改如下所示:
设置工作流
- 在 Zoho Developer 控制台中,点击左窗格中的自动化,然后点击工作流。
- 选择规则页签,然后点击创建规则按钮
- 按如下所示填写详细信息:
基本信息
- 模块:联系人
- 规则名称:SMSOnContactCreate
- 描述:创建联系人时发送消息。
- 点击下一步
规则触发器
- 执行依据:选择记录操作
- 选择创建,然后点击下一步
规则条件
- 无
- 点击下一步
操作
在即时操作中
- 转至调用自定义函数,然后点击 +
在函数编辑器区域中
- 工作流自定义函数:在所提供文本框中输入 SMSOnContactCreate,然后选择联系人
在编辑器区域中写入 Deluge 脚本中给定的以下自定义函数,然后点击保存并关联按钮。
m = map();
m.put("type","CurrentUser");
resp = zoho.crm.invokeConnector(("crm.getusers"), m);
response = resp.get("response");
indMobile = response.executeXPath("/root/users/mobile/text()");
info indMobile;
contactId = input.contact.get("Contacts.ID");
datamap = map();
datamap.put("module","Contacts");
datamap.put("id", contactId);
resp = zoho.crm.invokeConnector(("crm.get"), datamap);
resp1 =(resp.get("response")).toMap();
res = resp1.get("data");
reqq =(res.subString(1,(res.length()-1))).toMap();
fullName = reqq.get("Last_Name");
mobile = reqq.get("Mobile");
tmobile = zoho.crm.getOrgVariable("twilioext.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilioext.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilioext.Authtoken");
msg = zoho.crm.getOrgVariable("twilioext.Users Message");
messageToBeSent = fullName + mobile + msg;
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
headermap = map();
headermap.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("To", indMobile);
mappp.put("From", tmobile);
mappp.put("Body", messageToBeSent);
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, headermap);
info respp;- 在工作流页面中,点击保存。
测试扩展
- 在 Zoho Developer 控制台的右上角,点击测试扩展。
- 点击联系人模块。
- 选择联系人记录,然后复制顶部地址栏中提供的联系人 ID。
执行自定义函数
- 在 Zoho Developer 控制台中,点击左窗格中的自动化。
- 选择工作流,然后选择自定义函数页签。
- 选择 SMSOnContactCreate,然后点击编辑。
- 点击执行按钮,输入先前步骤中创建的联系人 ID,然后点击提交。

这将生成以下 API 响应。

测试成功时,CRM 帐户所有者和用户将在相应联系人被创建或导入时收到相关详细信息的短信。
(iii) 发送文本短信
下一个自定义功能是每当联系人关联至特定线索时向该线索发送短信。必须创建新的自定义模块(名为“短信文本”)以实现此功能。
创建自定义模块“短信文本”
- 在 Zoho Developer 控制台中,点击左窗格中的模块。
- 选择模块页签,然后点击创建新的模块按钮。
- 输入“短信文本”作为模块名称,然后点击保存。
这将创建新的自定义模块,即,短信文本。
在“短信文本”模块中创建自定义字段
- 在 Zoho Developer 控制台中,点击左窗格中的定制。
- 选择字段页签。
- 从模块列表中选择短信文本,然后点击新建自定义字段。
- 在短信文本中创建以下自定义字段:创建自定义字段
标签 | 数据类型 |
|---|---|
| 联系人 | 查找 查找类型:联系人 相关列表标签:短信文本 |
| 自定义短信消息 | 单行 长度:200 |
| 方向 | 选择列表 值:入站/出站 |
| 传入消息内容 | 单行 长度:250 |
| 线索 | 查找 查找类型:线索 相关列表标签:短信文本 |
| 批量短信的消息内容 | 单行 长度:200 |
以下结构显示定制短信文本模块的结构。

设置工作流
- 在 Zoho Developer 控制台中,点击左窗格中的自动化,然后点击工作流。
- 选择规则页签,然后点击创建规则按钮
- 按如下所示填写详细信息:
基本信息
- 模块:短信文本
- 规则名称:发送文本短信
- 描述:将线索关联至联系人时发送消息
- 点击下一步
规则触发器
- 执行依据:选择记录操作
- 选择创建,然后点击下一步
规则条件
- 无
- 点击下一步
操作
在即时操作部分中,
- 转至调用自定义函数,然后点击 +
在函数编辑器区域中:
- 工作流自定义函数:在所提供文本框中输入发送文本短信,然后选择自定义模块 1(短信文本).
在编辑器区域中写入 Deluge 脚本中给定的以下自定义函数,然后点击保存并关联按钮。
idz = input.sms_texts.get("twilioext.SMS_Texts.ID");
datamap = map();
datamap.put("module","twilioext.SMS_Texts");
datamap.put("id", idz);
resp = zoho.crm.invokeConnector(("crm.get"), datamap);
respMap =(resp.get("response")).toMap();
users = respMap.get("data");
temp = users.subString(1,(users.length()-1));
usersVal = temp.toMap();CustomSMSMessage= usersVal.get("twilioext.Custom_SMS_Message");if(CustomSMSMessage==null){
info "No SMS Content";}else{
tmobile = zoho.crm.getOrgVariable("twilioext.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilioext.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilioext.Authtoken");
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
mapp = map();
mapp.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("From", tmobile);if((usersVal.get("twilioext.Contact")!=null)&&(usersVal.get("twilio.Lead")!=null)){
leadIdz =(usersVal.get("twilioext.Lead")).toMap();
leadId = leadIdz.get("id");
data1map = map();
data1map.put("module","Leads");
data1map.put("id", leadId);
resp1 = zoho.crm.invokeConnector(("crm.get"), data1map);
resppMap =(resp1.get("response")).toMap();
users1 = resppMap.get("data");
temp1 = users1.replaceAll("[","",true);
usersVal1 = temp1.replaceAll("]","",false).toMap();Mobile= usersVal1.get("Mobile");
contactIdz =(usersVal.get("twilioext.Contact")).toMap();
contactId = contactIdz.get("id");
data2map = map();
data2map.put("module","Contacts");
data2map.put("id", contactId);
resp2 = zoho.crm.invokeConnector(("crm.get"), data2map);
resp2Map =(resp2.get("response")).toMap();
users2 = resp2Map.get("data");
temp = users2.subString(1,(users2.length()-1));
usersVal2 = temp.toMap();Mobile1= usersVal2.get("Mobile");
mappp.put("To",Mobile);
mappp.put("Body",CustomSMSMessage);
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, mapp);
mappp.remove("To");
mappp.remove("Body");
mappp.put("To",Mobile1);
mappp.put("Body",CustomSMSMessage);
resppp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, mapp);
info resppp;
info respp;}elseif((usersVal.get("twilioext.Lead")!=null)&&(usersVal.get("twilio.Contact")==null)){
leadIdz =(usersVal.get("twilioext.Lead")).toMap();
leadId = leadIdz.get("id");
data1map = map();
data1map.put("module","Leads");
data1map.put("id", leadId);
resp1 = zoho.crm.invokeConnector(("crm.get"), data1map);
resppMap =(resp1.get("response")).toMap();
users1 = resppMap.get("data");
temp = users1.subString(1,(users1.length()-1));
usersVal1 = temp.toMap();Mobile= usersVal1.get("Mobile");
mappp.put("To",Mobile);
mappp.put("Body",CustomSMSMessage);
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, mapp);
info respp;}elseif((usersVal.get("twilioext.Contact")!=null)&&(usersVal.get("twilio.Lead")==null)){
contactIdz =(usersVal.get("twilioext.Contact")).toMap();
contactId = contactIdz.get("id");
data2map = map();
data2map.put("module","Contacts");
data2map.put("id", contactId);
resp2 = zoho.crm.invokeConnector(("crm.get"), data2map);
resp2Map =(resp2.get("response")).toMap();
users2 = resp2Map.get("data");
temp = users2.subString(1,(users2.length()-1));
usersVal2 = temp.toMap();Mobile1= usersVal2.get("Mobile");
mappp.put("To",Mobile1);
mappp.put("Body",CustomSMSMessage);
resppp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, mapp);}else{
info "No Number to send message!";}- 点击保存。
测试扩展
- 在 Zoho Developer 控制台的右上角,点击测试扩展。
- 点击文本短信模块。
- 点击右上角的 +。
- 在相应字段中输入以下值:
- 短信文本名称:传入短信(必填字段)
- 输入其他字段的数据
- 对于联系人和线索自定义字段,从联系人列表中选择联系人,从线索列表中选择线索。
- 自定义短信消息:测试(任意消息)
- 方向:入站/出站
- 保存记录,然后从地址栏复制短信文本 ID。
执行自定义函数
- 在 Zoho Developer 控制台中,点击左窗格中的自动化。
- 选择工作流,然后选择自定义函数页签。
- 选择发送文本短信,然后点击编辑。
- 点击执行按钮,在以下屏幕中输入先前步骤中创建的短信文本 ID,然后点击提交。

这将在成功执行自定义函数时生成以下 API 响应:

(iv) 针对任务发送短信
此功能用于在使用特定线索或联系人定义任务时向线索记录或联系人记录发送短信提醒消息。
设置工作流
- 在 Zoho Developer 控制台中,点击左窗格中的自动化,然后点击工作流
- 选择规则页签,然后点击创建规则按钮
- 按如下所示填写详细信息:
基本信息
- 模块:任务
- 规则名称:针对任务发送短信
- 描述:提醒任务时发送提醒消息
- 点击下一步
规则触发器
- 执行依据:选择日期字段值,然后选择截止日期
- 执行日期:选择之前
- 执行时间:上午 10 点
- 执行周期:一次
- 选择创建,然后点击下一步
规则条件
- 无
- 点击下一步
操作
在即时操作部分中,
- 转至调用自定义函数,然后点击 +
在函数编辑器区域中:
- 工作流自定义函数:在所提供文本框中输入针对任务发送短信,然后选择任务
在编辑器区域中写入 Deluge 脚本中给定的以下自定义函数,然后点击保存并关联按钮。
taskId = input.task.get("Tasks.ID");
datamap = map();
datamap.put("module","Tasks");
datamap.put("id", taskId);
resp = zoho.crm.invokeConnector(("crm.get"), datamap);
respMap =(resp.get("response")).toMap();
users = respMap.get("data");
temp = users.removeFirstOccurence("[");
dataVal =(temp.removeLastOccurence("]")).toMap();
se_module = dataVal.get("$se_module");if(se_module =="Leads"){What_Id=(dataVal.get("What_Id")).toMap();
leadId =What_Id.get("id");
datamapx = map();
datamapx.put("module","Leads");
datamapx.put("id", leadId);
respx = zoho.crm.invokeConnector(("crm.get"), datamapx);
respMapx =(respx.get("response")).toMap();
usersx = respMapx.get("data");
tempx = usersx.removeFirstOccurence("[");
dataValx =(tempx.removeLastOccurence("]")).toMap();
mobile = dataValx.get("Mobile");}else{Who_Id=(dataVal.get("Who_Id")).toMap();
contactId =Who_Id.get("id");
datamapx = map();
datamapx.put("module","Contacts");
datamapx.put("id", contactId);
respx = zoho.crm.invokeConnector(("crm.get"), datamapx);
respMapx =(respx.get("response")).toMap();
usersx = respMapx.get("data");
tempx = usersx.removeFirstOccurence("[");
dataValx =(tempx.removeLastOccurence("]")).toMap();
mobile = dataValx.get("Mobile");}
tmobile = zoho.crm.getOrgVariable("twilio.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilio.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilio.AuthToken");
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
headermap = map();
headermap.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("To", mobile);
mappp.put("From", tmobile);
mappp.put("Body","This is an alert for your task deadline You have only two days left!");
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, headermap);
info respp;- 点击保存。
测试扩展
- 在 Zoho Developer 控制台的右上角点击测试扩展。
- 点击活动页签,然后选择右上角的+任务。
- 点击创建任务,然后填写以下信息:
- 主题:新任务(必填字段)
- 截止日期:选择未来日期
- 选择对应联系人或线索的值
- 选择对应以下任何项的值:客户、商机、产品、案例、市场活动、供应商或报价
- 状态:正在进行
- 优先级:高
- 点击保存,然后从地址栏复制相应任务 ID。
执行自定义函数
- 在 Zoho Developer 控制台中,点击左窗格中的自动化。
- 选择工作流,然后在工作流页面中选择自定义函数页签。
- 在工作流自定义函数中,选择针对任务发送短信,然后点击编辑。
- 点击执行按钮,输入先前步骤中创建的任务 ID,然后点击提交。

这将在离完成任务还剩两天时生成以下 API 响应(带有向相应线索或联系人发送的提醒消息):

(v) 针对活动参与者发送短信
此功能用于向根据线索或联系人安排的活动的所有参与者发送短信提醒。
设置工作流
- 在 Zoho Developer 控制台中,点击左窗格中的自动化,然后点击工作流。
- 选择规则页签,然后点击创建规则按钮
- 按如下所示填写详细信息:
基本信息
- 模块:活动
- 规则名称:针对活动参与者发送短信
- 描述:向活动参与者发送提醒消息
- 点击下一步
规则触发器
- 执行依据:选择日期字段值,然后选择选择日期字段
- 执行日期:选择之前
- 执行时间:上午 10 点
- 执行周期:一次
- 选择创建,然后点击下一步
规则条件
- 无
- 点击下一步
操作
在即时操作部分中,
- 转至调用自定义函数,然后点击 +
在函数编辑器区域中:
- 工作流自定义函数:在所提供文本框中输入针对活动参与者发送短信,然后选择活动
在编辑器区域中写入 Deluge 脚本中给定的以下自定义函数,然后点击保存并关联按钮。
* eventId = input.event.get("Events.ID");
datamap = map();
datamap.put("module","Events");
datamap.put("id", eventId);
resp = zoho.crm.invokeConnector(("crm.get"), datamap);
respMap =(resp.get("response")).toMap();
users = respMap.get("data");
temp = users.subString(1,(users.length()-1));
dataVal = temp.toMap();
participants = dataVal.get("Participants");
newpart = participants.subString(1,(participants.length()-1));
newpartList = newpart.replaceAll("},{","}-|||-{",true).toList("-|||-");for each ind in newpartList
{
indMap = ind.toMap();if(indMap.get("type")=="contact"){
contactId = indMap.get("participant");
datamapc = map();
datamapc.put("module","Contacts");
datamapc.put("id", contactId);
respc = zoho.crm.invokeConnector(("crm.get"), datamapc);
respMapc =(respc.get("response")).toMap();
usersc = respMapc.get("data");
dataValC =(usersc.subString(1,(usersc.length()-1))).toMap();
mobile = dataValC.get("Mobile");
tmobile = zoho.crm.getOrgVariable("twilio.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilio.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilio.AuthToken");
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
headermap = map();
headermap.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("To", mobile);
mappp.put("From", tmobile);
mappp.put("Body","This is alert for your event !");
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, headermap);}elseif(indMap.get("type")=="lead"){
leadId = indMap.get("participant");
datamapc = map();
datamapc.put("module","Leads");
datamapc.put("id", leadId);
respc = zoho.crm.invokeConnector(("crm.get"), datamapc);
respMapc =(respc.get("response")).toMap();
usersc = respMapc.get("data");
dataValC =(usersc.subString(1,(usersc.length()-1))).toMap();
mobile = dataValC.get("Mobile");
tmobile = zoho.crm.getOrgVariable("twilio.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilio.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilio.AuthToken");
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
headermap = map();
headermap.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("To", mobile);
mappp.put("From", tmobile);
mappp.put("Body","This is alert for your event !");
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, headermap);}}- 点击保存。
测试扩展
- 在 Zoho Developer 控制台的右上角,点击测试扩展。
- 点击活动页签,然后选择右上角的+活动。
- 输入创建活动时所需的相关信息,如以下屏幕中所示:

- 点击保存。这将在活动列表中创建名为“会面”的活动。
- 复制所创建活动的活动 ID。
执行自定义函数
- 在 Zoho Developer 控制台中,点击左窗格中的自动化。
- 选择工作流,然后选择自定义函数页签。
- 选择针对活动参与者发送短信,然后点击编辑。
- 点击执行按钮,然后输入在先前步骤中获取的活动 ID。
- 点击提交。
这将生成以下 API 响应,并且会向一个或多个活动参与者发送提醒短信。

(vi) 针对活动相关人员发送短信
此功能用于向参与所安排特定活动的相关线索或联系人发送确认短信。
设置工作流
- 在 Zoho Developer 控制台中,点击左窗格中的自动化,然后点击工作流。
- 选择规则页签,然后点击创建规则按钮。
- 按如下所示填写详细信息:
基本信息
- 模块:活动
- 规则名称:针对活动相关人员发送短信
- 描述:向活动相关人员发送确认消息
- 点击下一步
规则触发器
- 执行依据:选择日期字段值,然后选择选择日期字段
- 执行日期:选择之前
- 执行时间:上午 10 点
- 执行周期:一次
- 选择创建,然后点击下一步
规则条件
- 无
- 点击下一步
操作
在即时操作部分中:
- 转至调用自定义函数,然后点击 +
在函数编辑器区域中:
- 工作流自定义函数:在所提供文本框中输入针对活动相关人员发送短信,然后选择活动
在编辑器区域中写入 Deluge 脚本中给定的以下自定义函数,然后点击保存并关联:
eventId = input.event.get("Events.ID");
datamap = map();
datamap.put("module","Events");
datamap.put("id", eventId);
resp = zoho.crm.invokeConnector(("crm.get"), datamap);
respMap =(resp.get("response")).toMap();
users = respMap.get("data");
temp = users.subString(1,(users.length()-1));
dataVal = temp.toMap();
participants = dataVal.get("Participants");
newpart = participants.subString(1,(participants.length()-1));
newpartList = newpart.replaceAll("},{","}-|||-{",true).toList("-|||-");for each ind in newpartList
{
indMap = ind.toMap();if(indMap.get("type")=="contact"){
contactId = indMap.get("participant");
datamapc = map();
datamapc.put("module","Contacts");
datamapc.put("id", contactId);
respc = zoho.crm.invokeConnector(("crm.get"), datamapc);
respMapc =(respc.get("response")).toMap();
usersc = respMapc.get("data");
dataValC =(usersc.subString(1,(usersc.length()-1))).toMap();
mobile = dataValC.get("Mobile");
tmobile = zoho.crm.getOrgVariable("twilio.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilio.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilio.AuthToken");
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
headermap = map();
headermap.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("To", mobile);
mappp.put("From", tmobile);
mappp.put("Body","This is alert for your event !");
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, headermap);}elseif(indMap.get("type")=="lead"){
leadId = indMap.get("participant");
datamapc = map();
datamapc.put("module","Leads");
datamapc.put("id", leadId);
respc = zoho.crm.invokeConnector(("crm.get"), datamapc);
respMapc =(respc.get("response")).toMap();
usersc = respMapc.get("data");
dataValC =(usersc.subString(1,(usersc.length()-1))).toMap();
mobile = dataValC.get("Mobile");
tmobile = zoho.crm.getOrgVariable("twilio.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilio.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilio.AuthToken");
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
headermap = map();
headermap.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("To", mobile);
mappp.put("From", tmobile);
mappp.put("Body","This is alert for your event !");
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, headermap);}}- 点击保存。
测试扩展
- 在 Zoho Developer 控制台的右上角,点击测试扩展。
- 点击活动页签,然后选择右上角的+活动。
- 选择任意所创建活动记录。
- 点击编辑,然后选择相关人员字段。(这仅显示相关线索或联系人)
- 从线索或联系人中选择记录。
- 点击保存。
- 从地址栏中复制活动 ID。
执行自定义函数
- 在 Zoho Developer 控制台中,点击左窗格中的自动化。
- 选择工作流,然后选择自定义函数页签。
- 选择针对活动相关人员发送短信,然后点击编辑。
- 点击执行按钮,然后输入在先前步骤中获取的活动 ID。
- 点击提交。
这将生成以下 API 响应,并向与特定活动相关的人员发送确认短信。

(vii) 向线索和联系人发送批量短信
此功能用于分别向“线索”模块和“联系人”模块中的所选线索和联系人发送批量短信。
创建定制按钮
- 在 Zoho Developer 控制台中,点击定制,然后在定制页面中选择链接和按钮页签。
- 点击创建新按钮。
- 提供以下详细信息:
- “您要在哪个模块中创建新按钮?”选择联系人
- “您要对按钮指定什么名称?”输入发送批量短信
- “您要将按钮放在什么位置?”选择列表视图页面
- “您希望按钮执行什么操作?”选择编写自定义函数
- “对函数指定名称”:输入对联系人发送短信
在编辑器中编写以下 Deluge 脚本:
contactid = input.contact.get("Contacts.ID").toList("|||");
flag =0;for each abc in contactid
{
datamap = map();
datamap.put("module","Contacts");
datamap.put("id", abc);
resp = zoho.crm.invokeConnector(("crm.get"), datamap);
respMap =(resp.get("response")).toMap();
users = respMap.get("data");
temp = users.subString(1,(users.length()-1));
usersVal = temp.toMap();
mobile = usersVal.get("Mobile");if((mobile ==null)||(mobile =="")){
flag =1;}
tmobile = zoho.crm.getOrgVariable("twilio.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilio.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilio.AuthToken");
msg = zoho.crm.getOrgVariable("twilio.Users Message");
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
first = usersVal.get("First Name");if(first ==null){
first ="";}last= resp.get("Last Name");
headermap = map();
headermap.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("To", mobile);
mappp.put("From", tmobile);
mappp.put("Body", msg);
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, headermap);
info respp;
updateMap ={"twilio.Msg_Content_For_Bulk_SMS": msg,"twilio.SMS_Texts_Name":"Send Through Bulk Contact","twilio.Contact": abc,"twilio.Direction":"Outbound"};
m = map();
l =List();
l.add(updateMap);
m.put("module","twilio.SMS_Texts");
m.put("data", l);
resp = zoho.crm.invokeConnector("crm.create", m);
info resp;}if(flag ==0){return"SMS Sent !";}else{return"Some Mobile Number Missing ! Can't Send SMS to those Contacts";}info respp;
- 点击保存至按钮。
测试扩展
- 在 Zoho Developer 控制台的右上角,点击测试扩展。
- 点击联系人模块,然后从列表视图中选择多个联系人。
- 点击发送批量短信按钮,此按钮显示在自定义列表视图页面顶部。这将显示“消息已发送”。
- 要测试以上操作,导航至短信文本模块。
- 选择最新的发送批量联系人短信文本名称。
- 复制该短信文本中显示的联系人的联系人 ID。
执行自定义函数
- 在 Zoho Developer 控制台中,点击左窗格中的定制。
- 选择发送批量短信按钮。
- 选择针对联系人发送短信函数,然后点击编辑
- 执行自定义按钮代码。
- 粘贴在先前步骤中获取的联系人 ID,然后点击提交
这将生成以下 API 响应,并且会向相应联系人发送消息。要针对多个联系人进行测试,请从联系人列表选择联系人 ID,然后执行该自定义按钮。

重复相同步骤(通过在线索模块中创建名为发送批量短信的另一按钮),然后执行该自定义按钮。下面提供 Deluge 脚本中对应此功能的自定义函数代码:
leadid = input.lead.get("Leads.ID").toList("|||");
flag =0;for each abc in leadid
{
datamap = map();
datamap.put("module","Leads");
datamap.put("id", abc);
resp = zoho.crm.invokeConnector(("crm.get"), datamap);
respMap =(resp.get("response")).toMap();
users = respMap.get("data");
temp = users.subString(1,(users.length()-1));
usersVal = temp.toMap();
mobile = usersVal.get("Mobile");if((mobile ==null)||(mobile =="")){
flag =1;}
tmobile = zoho.crm.getOrgVariable("twilio.Twilio Mobile Number");
twilioAccSId = zoho.crm.getOrgVariable(("twilio.Account SID"));
authtokenTwilio = zoho.crm.getOrgVariable("twilio.AuthToken");
msg = zoho.crm.getOrgVariable("twilio.Users Message");
baseEncoded = zoho.encryption.base64Encode(twilioAccSId +":"+ authtokenTwilio);
encode = baseEncoded.removeFirstOccurence("\n");
first = usersVal.get("First Name");if(first ==null){
first ="";}last= resp.get("Last Name");
headermap = map();
headermap.put("Authorization","Basic "+ encode);
mappp = map();
mappp.put("To", mobile);
mappp.put("From", tmobile);
mappp.put("Body", msg);
respp = postUrl((("https://api.twilio.com/2010-04-01/Accounts/")+ twilioAccSId)+"/Messages.json", mappp, headermap);
info respp;
updateMap ={"twilio.Msg_Content_For_Bulk_SMS": msg,"twilio.SMS_Texts_Name":"Send Through Bulk Leads","twilio.Lead": abc,"twilio.Direction":"Outbound"};
m = map();
l =List();
l.add(updateMap);
m.put("module","twilio.SMS_Texts");
m.put("data", l);
resp = zoho.crm.invokeConnector("crm.create", m);}if(flag ==0){return"SMS Sent !";}else{return"Some Mobile Numbers are Missing ! Can't Send SMS to Those Leads";}







