无服务器函数 - OAuth2

无服务器函数 - 使用 OAuth2

OAuth2

函数可通过 OAuth2 协议进行访问。OAuth2 方法通过设定特定范围来授予对特定数据的访问权,允许您将特定数据与任何应用程序共享,同时保持用户名和密码私有。

为了通过 OAuth2 方法访问函数,您需要首先向 Zoho CRM 注册您的客户端。请查看此处以了解如何注册您的客户端应用程序

但是,有一些需要注意的要点:

  1. 使用 HTTP GET 方法时客户端范围应为:

    ZohoCRM.functions.execute.READ

  2. 使用 HTTP POST 方法时客户端范围应为:

    ZohoCRM.functions.execute.CREATE

一旦身份验证完成,您可以继续创建您的函数。

另请参阅

在很多情况下,都可以将函数作为 API 进行调用。例如,一个函数可设为无论何时达到公司业绩统计数据中的一定限制时触发。本文为您提供一个示例函数,它通过外部源来触发,该函数作为 API 提供。

示例函数:

场景:

假设有一个需求,要获得客户的同意并签名以发表在时事通讯上。这是为了保证安全,而不侵犯他们的隐私。

您可以在联系人记录的查看页面中放置一个按钮。该按钮可打开小部件,显示订阅表单(由您的代理填写)。要创建小部件,请参阅我们的小部件帮助。

通过该小部件,提交订阅表单。将带有同意表格的电子邮件发送给客户。在客户接受同意表后,有关联系人的信息将添加至 MailChimp 营销列表。

所需应用程序:

  • MailChimp - 用于时事通讯
  • Google Drive - 同意表

需求:

  1. 对 MailChimp 和 Google Drive 创建连接。
  2. 在此函数中调用 MailChimp 和 Google Drive API。
  3. 将函数转换为 API。
  4. 创建小部件并调用其中的函数。

进行连接:

为了使该功能能够使用第三方应用程序并促进数据传输,您需要首先设置 Zoho CRM 与相关第三方应用程序之间的连接。在此例中,就是 MailChimp 和 Google Drive。了解连接器

对于 MailChimp:

对于 Google Drive:

创建函数:

根据需求创建函数的步骤分为两个部分。

第 1 部分:编写函数代码

使用以下代码创建一个独立函数。

函数代码为:

+

string subscribeNewsletter(string listId,string emailAddress,string extraDetails){
  mailChimpURL = "https://us18.api.mailchimp.com/3.0/";
  if(isNull(listId))
  {
    //Default List
    listId = "2a9a3690fd";
  }
  if(isNull(emailAddress))
  {
    return "Email Address cannot be null";
  }
  //Get all members
  membersList = invokeurl
  [
    url :mailChimpURL + "/lists/" + listId + "/members"
    type :GET
    parameters:""
    connection:<CONNECTION_LINKNAME>
  ];
  //Is Member already in List
  for each memberInfo in membersList.get("members")
  {
    if(emailAddress.equals(memberInfo.get("email_address")))
    {
      return "The member is already subscribed to Zoho Newsletter";
    }
  }
  //Get all Documents from Google Drive
  gdriveURL = "https://www.googleapis.com/drive/v2/files";
  fileList = invokeurl
  [
    url :gdriveURL
    type :GET
    parameters:""
    connection:<CONNECTION_LINKNAME>
  ];
  //Get Download URL of Consent Form
  webContentLink = null;
  for each fileInfo in fileList.get("items")
  {
    title = fileInfo.get("title");
    if(title.equals("Consent-Form.docx"))
    {
      webContentLink = fileInfo.get("webContentLink");
      break;
    }
  }
  if(isNull(webContentLink))
  {
    return "No Document Found on Drive.Docuemnt Name ::: Consent-Form.docx";
  }
  //Send Notification -
  name = "Guest";
  signature = "Zoho";
  if(!isNull(extraDetails))
  {
    if(extraDetails.contains("name"))
    {
      name = extraDetails.get("name");
    }
    if(extraDetails.contains("signature"))
    {
      signature = extraDetails.get("signature");
    }
  }
  sendmail
  [
    from :zoho.adminuserid
    to :emailAddress
    subject :"consent form"
    message :"Hi " + name + ",<expression></expression><div><br></div><div>Before subscribing to Zoho Newsletter, </div><br /><div>Please download the <br /><a target='_blank' href='" + webContentLink + "'>Consent Form</a> and mail it to newsletter@xyz.com</div><div><br></div><div><br></div><div>Regards,</div><div>" + signature + "<br></div>" ]   if(extraDetails.contains("mobile"))
  {
    sendsms
    [
      to :extraDetails.get("mobile")
      message:"Consent Form has been sent to your mail id :- " + emailAddress
    ];
  }
  return "Consent form sent successfully"; }

 

备注

  • 整个请求正文将不提供在函数内部中。它需要在参数内进行发送或接收。

配置包含整个请求正文的参数。

在以上给出的函数中您可以看到,我们将 'extraDetails' 作为一个函数参数。它用于获取用户的姓名和签名。当无法知道将传递至函数的参数数量时,这个操作很有用。

由于无法知道其中的参数数量,因此您可以让函数在单个参数中包含整个请求正文,即本例中的 "extraDetails"。

备注

  • 'listId' 的值将为 '2a9a3690fd'(如果为空值)。
  • 'emailAddress' 是必填项。
  • 提供了 'extraDetails' 参数以传递额外信息,它包含整个请求正文。
  • 'listId'、'emailAddress' 的类型为 STRING。
  • 'extraDetails' 的类型为 STRING,我们在 'extraDetails' 中传递 JSON。

第 2 部分:以 API 形式提供函数

一旦函数被创建、测试和保存,您就可以继续将该函数转换为 API 了。

  1. 转至设置 > 开发者空间 > 函数
  2. 对需要以 API 形式出现的相应函数点击设置图标。
  3. 点击 REST API
  4. 启动 OAuth2 滑块。
  5. 点击保存

调用小部件内的函数

现在来看实际的工作部分。由于该函数已转换为 API 调用,您可以在任何小部件、应用程序或软件中的函数使用 API 代码,并设置它以根据需求来触发。

使用以下 HTML 代码(时事通讯的同意表)以创建小部件。要了解如何创建小部件,请点击此处

HTML 代码

<h2>XYZ Newsletter</h2>
<div class="container">
<h2<Subscribe to our Newsletter</h2>
</div>
<div class="container" style="background-color:white">
<input type="text" id="name" placeholder="Name" name="name" required>
<input type="text" placeholder="Email address" name="mail" required id="email">
<label>
<input type="checkbox" checked="checked" name="subscribe">Daily Newsletter
</label>
</div>
<div class="container">
<input type="submit" value="Subscribe" id="subscribeButton">
</div>
<span id="res1">Click on the above button to Subscribe</span>

Script(Javascript):

<script type="text/javascript">

$("#subscribeButton").click(function() {
  var extraDetails = {};
  extraDetails.name = $("#name").val();
  extraDetails.signature = "XYZ";
  var arguments = {};
  arguments.extraDetails = extraDetails;
  arguments.emailAddress = $("#email").val();
  var data = {
      "arguments": JSON.stringify(arguments),
  }

  ZOHO.embeddedApp.init()
    .then(function() {

      ZOHO.CRM.FUNCTIONS.execute("subscribenewsletter", data)
        .then(function(resp) {
        $('#res1').text(JSON.stringify(resp));
        }).catch(function(resp) {
          $('#res1').text(JSON.stringify(resp));
        })
    });
});

备注

  • 以上脚本仅对 CRM 中的小部件生效。
  • 要了解更多有关函数集成任务的信息,请点击此处

结果:

订阅新闻通讯:

获取订阅邮件:

一旦同意表发送回邮件程序,则将启用时事通讯订阅。

不使用无服务器函数的缺点:

用户必须手动:

  • 在 MailChimp 和 Google Drive 上注册应用程序。
  • 编码以处理 OAuth2 流。
  • 调用 Mailchimp API 以验证用户可用性。
  • 调用 Google Drive API 以检索文档 URL。
  • 编辑以发送电子邮件和短信给客户。

从以上步骤您可以看到有多个步骤,要求您手动对小部件和小部件的功能编写代码。但是,该方法很耗时,需要大量人工。您可使用无服务器函数来避免这些。

还没找到您需要的内容?

发送邮件给我们:support@zohocorp.com.cn