无服务器函数 - API 密钥

无服务器函数 - 使用 API 密钥

函数的 API 密钥

CRM 中无服务器函数可从任何第三方应用程序或在 CRM 中用 webhook 进行调用。但是,除少数 webhook 支持外,通常大多数 webhook 不支持 OAuth2。在这一情况下,您可以用 API 密钥身份验证方法执行该函数,您或其他人可用该方法从任何地方调用该函数。

API 密钥与 OAuth2 的不同之处在于身份验证的模式。API 密钥必须在请求 URL 中进行身份验证,而非作为Header。

另请参阅

示例函数:

场景:

在涉及与顾客和客户交互的企业中,帮助台和支持相关软件是绝对必不可少的。将帮助台软件与 CRM 集成节省大量时间和精力,从一个集中的平台来管理所有业务信息。

Zendesk 就是一款这样的软件。Zoho 开发的 Zoho Desk 也是这样一款软件,但不同之处是 Zoho Desk 是自动在 Zoho CRM 中集成的,而 Zendesk 只能通过小部件来集成。而且,当需要工单信息从一个帮助台转移到另一个时,您需要大费周章。因此,在 Zoho CRM 中通过无服务器函数集成 Zendesk 和 Zoho Desk 相当方便且有用。

我们要假设的场景相似。无论何时在 "Zendesk" 中创建一个工单,将会在 Zoho Desk 中同样创建一个带相同信息的工单。

所需应用程序:

  • Zendesk
  • Zoho Desk

第 1 部分:进行连接

为了使函数能够使用第三方应用程序并促进数据传输,您需要首先在Zoho CRM和第三方软件之间建立连接。在此情况下,第三方应用就是 Zendesk 。阅读更多

创建到 Zoho Desk 的连接

第 2 部分:创建函数

在 Zoho CRM 中创建函数(包括来自“连接器”的代码)。

第 2.1 部分:编写函数

函数代码为:

+

string createTicket(string requestBody){
  if(isNull(requestBody))
  {
    return "No Content";
  }
  if(!requestBody.contains("arguments"))
  {
    return "Invalid Format";
  }
  requestBody = requestBody.get("arguments");
  requestBody = requestBody.get("requestBody");
  requestBody = requestBody.get("details");
  deskURL = "https://desk.zoho.com/api/v1/";
  header = {"orgId":"664950682"};
  departmentId = "264631000000006907"; //Get ticket and user details from requestBody
  userDetails = requestBody.get("user");
  ticketDetails = requestBody.get("ticket"); //Create map
  param = Map(); //Insert Details
  param.put("departmentId",departmentId);
  if(!userDetails.contains("email"))
  {
    return "Email is Mandatory";
  }
  email = userDetails.get("email");
  param.put("email",email);
  contactName = "Guest";
  if(userDetails.contains("full_name"))
  {
    contactName = userDetails.get("full_name");
  }
  else if(userDetails.contains("first_name") && userDetails.contains("last_name"))
  {
    contactName = userDetails.get("first_name") + " " + userDetails.contains("last_name");
  }
  else if(userDetails.contains("first_name"))
  {
    contactName = userDetails.get("first_name");
  }
  else if(userDetails.contains("last_name"))
  {
    contactName = userDetails.get("last_name");
  }
  //Get Contact ID from Contact name
  //Get all Contacts
  contactList = invokeurl
  [
    url :deskURL + "contacts"
    type :GET
    headers:header
    connection:"zoho_desk9"
  ];
  isExistingCustomer = false;
  contactId = "";
  contactList = contactList.get("data");
  for each contactInfo in contactList
  {
    contactEmail = contactInfo.get("email");
    if(!isNull(contactEmail))
    {
      if(email.equals(contactEmail))
      {
        isExistingCustomer = true;
        contactId = contactInfo.get("contactId");
        break;
      }
    }
  }
  info isExistingCustomer;
  if(!isExistingCustomer)
  {
    //Create a new Contact
    contactParam = Map();
    contactParam.put("firstName",userDetails.get("first_name"));
    contactParam.put("lastName",userDetails.get("last_name"));
    contactParam.put("mobile",userDetails.get("mobile"));
    contactParam.put("email",userDetails.get("email"));
    contactParam.put("accountId","264631000000081178");
    contactList = invokeurl
    [
      url :deskURL + "contacts"
      type :POST
      parameters:contactParam.toString()
      headers:header
      connection:"zoho_desk9"
    ];
    contactId = contactList.get("id");
  }
  param.put("contactId",contactId);
  if(!ticketDetails.contains("title"))
  {
    return "title is mandatory";
  }
  param.put("subject",ticketDetails.get("title"));
  if(!ticketDetails.contains("status"))
  {
    return "status is mandatory";
  }
  param.put("status",ticketDetails.get("status"));
  if(ticketDetails.contains("priority"))
  {
    param.put("priority",ticketDetails.get("priority"));
  }
  if(userDetails.contains("organization"))
  {
    organization = userDetails.get("organization");
    if(organization.contains("name"))
    {
      param.put("accountName",organization.get("name"));
    }
  }
  if(userDetails.contains("mobile"))
  {
    param.put("phone",userDetails.get("mobile"));
  }
  if(userDetails.contains("description"))
  {
    param.put("description",userDetails.get("description"));
  }
  info param;
  response = invokeurl
  [
    url :deskURL + "tickets"
    type :POST
    parameters:param.toString()
    headers:header
    connection:"zoho_desk9"
  ];
  if(response.contains("errorMessage"))
  {
    return "Sorry Something went wrong. error ::: " + response.get("errorMessage");
  }
  //Send Notification to Suppot Team
  sendmail
  [
    from :zoho.adminuserid
    to :"deborah.g@zohocorp.com"
    subject :"no-reply"
    message :"'Dear Team,<expression></expression><div><br></div><div>A New Ticket is created inside Zoho DESK through Zendesk.</div><div><br></div><div>Ticket Details - </div><div><br></div><div>User Name - ' + contactName + '</div><div><br></div><div><br></div><div>Request Body = " + requestBody + "</div><div><br></div>'"
  ]
  return response;
}

 

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

  1. 对需要以 API 形式出现的相应函数点击设置图标。
  2. 点击 REST API
  3. 启用 API 密钥滑块。
  4. 点击保存

第 3 部分:在 Zendesk 中创建 Webhook:

  1. 转至“管理 > 扩展 > HTTP 目标”。
  2. 提供以下信息:
    • 函数 URL
    • 方法 - GET 或 POST
    • 选择 JSON 作为内容类型。要了解详情,请点击此处

备注

  • 函数 URL 是您从第 2 步获得的 API 密钥 URL。

第 4 部分:在 Zendesk 中创建触发器:

  1. 条件 - 创建工单时。
  2. 通知目标 - HTTP 目标名

参数的 JSON 正文:

{"arguments":
{
"requestBody":{

"details":{
"ticket":
{
"title":"{{ticket.title}}",
"description":"{{ticket.description}}",
"source":"{{ticket.via}}",
"priority":"{{ticket.priority}}",
"due_date":"{{ticket.due_date}}",
"URI":"{{ticket.url}}",
"status":"{{ticket.status}}"
},
"assigne":
{
"email":"{{ticket.assignee.email}}",
"name":"{{ticket.assignee.name}}",
"first_name":"{{ticket.assignee.first_name}}",
"last_name":"{{ticket.assignee.last_name}}"
},
"user":
{
"full_name":"{{current_user.name}}",
"first_name":"{{current_user.first_name}}",
"language":"{{current_user.language}}",
"details":"{{current_user.details}}",
"mobile":"{{current_user.phone}}",
"email":"{{current_user.email}}",
"organization":
{
"details":"{{current_user.organization.details}}",
"name":"{{current_user.organization.name}}"
}}
}}
}}

第 5 部分:配置包含整个请求正文的参数。

当 webhook 发送数据至函数时,没有办法知道其中的参数数目。为了解决此问题,您可以让函数在单个参数中包含整个请求正文。

调用函数内 Desk API 并保存该函数。

结果:

在 Zendesk 中创建工单:

工单创建在 Zoho Desk 中

还没找到您需要的内容?

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