该通知只是通过 HTTP 发出的 SOAP 请求,因此与常规 HTTP 触发请求并没有太大区别。
虽然您可以将其视为一个普通请求并自己解析内容,但 Azure Functions 确实公开了我们从 ASP.NET WebHooks 获得的出色 WebHook 支持,幸运的是,有一个 Salesforce receiver这大大简化了这项任务。
免责声明:值得注意的是,虽然接收器在 Azure Functions 中已在技术上启用,但尚无官方支持,因此您不会找到很多文档,并且帮助仅限于你在 SO 和论坛上得到了什么。对此接收器和其他接收器的官方支持有望很快到来,这意味着文档、模板和 UI 支持将可用。
要开始,您需要以下内容:
- 创建一个新函数,选择 GenericWebHook - CSharp 模板(这也适用于节点,但我将重点介绍 C#。
- 按照ASP.NET WebHooks integration with Salesforce post 中列出的步骤创建出站消息。在这里,您要使用门户网站提供的 Function Url 没有代码查询字符串(那里有代码不会受到伤害,但接收者不会使用它信息)。
-
重要提示:获取您的 Salesforce 组织 ID,该 ID 将用于身份验证,位于 Administer > Company Profile > Company Information > Salesforce.com Organization ID 下并返回 Azure功能门户,打开 Keys 面板,删除您的 default 功能键(不是主机键)并创建一个名为 default 的新键(此名称很重要)使用您从 Salesforce 获得的组织 ID 值。
- 转到集成
- 在集成页面上,选择右上角的高级编辑器(如上所述,没有官方支持,因此 UI 不会公开这一点。我们戴上探索者的帽子并冒险进入这里有更高级的工作流程:))
- 将
webHookType 属性值更改为sfsoap 并保存配置。您的 function.json 配置应如下所示:
function.json:
{
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"webHookType": "sfsoap",
"name": "req"
},
{
"type": "http",
"direction": "out",
"name": "res"
}
],
"disabled": false
}
这就是 ASP.NET WebHooks 接收器的亮点!它将为您解析通知,公开您可以使用的强类型对象。您需要做的就是修改您通过模板获得的方法/函数签名以使用SalesforceNotifications 类型,确保您引用了所需的程序集(Microsoft.AspNet.WebHooks.Receivers.Salesforce,它可供您使用,因此无需打包参考)和命名空间参考(Microsoft.AspNet.WebHooks)。
这是一个完整的函数示例,它将接收请求并记录组织 ID、操作 ID、获取第一个通知并记录其所有属性:
#r "Microsoft.AspNet.WebHooks.Receivers.Salesforce"
using Microsoft.AspNet.WebHooks;
public static void Run(SalesforceNotifications req, TraceWriter log)
{
log.Info($"Salesforce webhook was triggered!");
log.Info(req.OrganizationId);
log.Info(req.ActionId);
var notification = req.Notifications.First();
foreach (var p in notification.Keys)
{
log.Info($"{p} = {notification[p]}");
}
}
当接收器得到官方支持时,这个过程会顺畅很多,但即使添加了步骤,这仍然比必须自己解析 SOAP 消息要好:)
我希望这会有所帮助!