网络挂钩
网络挂钩允许您将 Zoho Mail 与其他外部应用程序集成。网络挂钩用于使用来自外部应用程序的实时事件在一个应用程序中触发操作。网络挂钩有两种类型:传入Webhook和传出Webhook。传入Webhook用于使用来自第三方应用程序的实时事件在 Zoho Mail 中触发操作。使用传出Webhook,可以将传入的电子邮件配置为在外部应用程序中触发操作。
如何使用?
为了在 Zoho Mail 和任何第三方应用程序之间建立集成,您必须在一个应用程序中配置传入Webhook,在另一个应用程序中配置传出Webhook。例如,如果您希望将事件从外部应用程序发布到 Streams 群组,则应执行以下步骤。
- 在 Zoho Mail 中配置传入Webhook。
- 获取在创建传入Webhook时生成的网络挂钩 URL。
- 使用获得的网络挂钩 URL 在第三方应用程序中配置传出Webhook。
如果您希望在收到电子邮件时在外部应用程序中触发事件,则需要在 Zoho Mail 中配置传出Webhook,在第三方应用程序中配置传入Webhook。
传入Webhook
当第三方应用程序中发生指定事件时,传入Webhook允许您发布到您选择的 URL。您可以将传入Webhook配置为使用从外部应用程序接收的信息在 Streams 群组中发布消息、笔记或任务。
配置传入Webhook
- 登录到 Zoho Mail
- 导航到设置开发人员空间 >> 集成 >>
- 在左侧菜单的配置部分下选择传入Webhook。
- 单击添加新配置
- 选择帖子格式
- Mail - 网络挂钩更新将作为电子邮件发送到您的收件箱。
- 帖子/笔记/任务 - 网络挂钩更新会作为帖子/笔记/任务发布在首选的 Streams 群组中
- 如果您在上一步中选择了“邮件”,请跳过此步骤。如果您选择了帖子/笔记/任务,请在配置页面中输入以下详细信息:
- 自定义用户名 - 此名称将用于在 Streams 中发布帖子
- 群组 - 将在其中发布更新的群组
- 然后,如果您想根据需要修改发布请求中的数据以适应网络挂钩格式,请单击“自定义函数”下的写入函数。创建自定义函数后,单击选择自定义函数以选择函数。注意:
您可以使用 DRE 连接器在选择的任何第三方应用程序之间建立连接。 - 单击生成 URL 并复制创建的 URL。
在您选择的第三方应用程序中配置传出Webhook时,将使用已生成的 URL。
注意:
只有群组的审核者或所有者才能为 Streams 群组配置传入Webhook。
需要牢记的要点
- 如果您希望 Streams 帖子包含 @提及,请在邮件正文中包含以下内容:
- 要 @提及群组成员,请在消息中包含 @emailID。示例:要 @提及 Rebecca,应使用 @rebecca@zylker.com.cn
- 要 @提及群组,请在消息中包含 @group。为网络挂钩配置的群组将自动被添加标签。
- 网络挂钩 URL 不应泄露给未经授权的人员。如果泄露,他们将能够向您的 Streams 群组发布更新。
- 如果重新生成网络挂钩 URL,则需要在所有先前使用它的位置用新 URL 替换旧 URL。
传出Webhook
传出Webhook允许您配置电子邮件/任务以触发第三方应用程序中的事件。您可以将收到的电子邮件/任务的详细信息发布到外部应用程序。配置中的过滤器选项允许您选择要充当事件触发器的电子邮件/任务。
配置传出Webhook
- 登录到 Zoho Mail
- 导航到设置开发人员空间 >> 集成 >>
- 在左侧菜单的配置部分下选择传出Webhook。
- 单击添加新配置
- 填写自定义用户名和网络挂钩 URL 后,您必须选择要配置的实体,即邮件或任务。
- 自定义用户名 - 为网络挂钩配置的名称
- 网络挂钩 URL - 从第三方应用程序的传入Webhook配置中获取的 URL。从 Mail 或 Tasks 触发的更新将发布到此 URL。
- 如果您希望修改post请求中的数据,以适应webhook格式,请单击“自定义函数”下的“编写函数”。 创建自定义函数后,单击“选择自定义函数”以选择所需函数。
- 单击保存。
- 如果配置中使用的网络挂钩 URL 长时间无响应,则传出Webhook将自动禁用。
- 首次保存传出Webhook配置时,将启动 POST 请求。只有收到 POST 请求的 200 响应时,才会保存配置。
网络挂钩示例:
{
"summary": "Rebecca,您好,我已经分享了周五的产品推介会议的幻灯片。请看一下,如果您有任何建议,请告诉我。此致,Paula",
"sentDateInGMT": 1560866021000,
"subject": "Marketing - Product pitch",
"messageId": 1560840837125110000,
"toAddress": ""Rebecca A"<rebecca@zylker.com>",
"folderId": 3881227000000013000,
"zuid": 647772765,
"ccAddress": "",
"size": 55503,
"sender": "Paula",
"receivedTime": 1560840837126,
"fromAddress": "paula@zylker.com.cn",
"html": "<meta /><div><div style="font-family:quot;Trebuchet msquot;, Arial, Helvetica, sans-serif;font-size:12pt;"><div>Hi Rebecca,<br /></div><div><br /></div><div>I have shared the slide deck for our product pitch meeting on Friday.请看一下,如果您有任何建议,请告诉我。<br /></div><div id=""><div><img src="/zm/ImageDisplay?f=1.pngamp;mode=inlineamp;cid=0.28869215260.3894179596053002321.16b695cdb49__inline__img__srcamp;" width="145" height="145" style="float:left;" /><br /></div><div><br /></div><div><br /></div><div>Regards,<br /></div><div>Paula<br /><br /></div></div><br /><br /><div style="clear:both;"></div></div><br /></div>",
"IntegIdList": "34000000580271,"
}
保护网络挂钩
建议保护您的网络挂钩,因为它可以帮助您确定请求是否确实来自 Zoho Mail。为使您能够验证网络挂钩,Zoho Mail 会在其所有网络挂钩请求中添加签名。这为您的网络挂钩增加了额外一层的安全保护。
验证网络挂钩请求
每个网络挂钩请求都包含一个用于验证目的的签名。用于签署消息的密钥是 x-hook-secret。这个密钥只能从网络挂钩的第一个请求的标头中获得。在所有请求的 HTTP 标头中都可以找到 x-hook-signature。标头是 HMAC SHA256 哈希的 Base64 摘要。哈希内容应该是完整请求正文的二进制表示形式。
为了验证签名,您需要使用 x-hook-secret 生成自己的签名。然后,您可以将生成的签名与请求标头中的签名进行比较,以检查请求的真实性。
下面给出了用于检查请求有效性的示例代码:
JAVA:
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
//method to validate webhook request
boolean verifyWebhookRequest(String secret, String payload, HttpServletRequest request) throws Exception
{
Mac mac = Mac.getInstance("HmacSHA2256");
SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
mac.init(secretKey);
String signature = Base64.encodeBase64String(mac.doFinal(payload.getBytes()));
return signature.equals(request.getHeader("X-Hook-Signature"));
}
JAVA SCRIPT:
function VerifyWebhookRequest(request, secret)
{
//secret is x-hook-secret while registering webhook to URL
var crypto = require('crypto');
var headerHash = request.headers['x-hook-signature'];
var createdHash = crypto.createHmac('sha256' , secret).update(request.body).digest('base64');
return headerHash = = = createdHash;
}