You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Webhook连接Azure DevOps Boards与ServiceNow并触发API端点?

实现Azure DevOps Boards与ServiceNow的Webhook集成

步骤1:确认ServiceNow API端点信息

你已创建Scripted REST API,先整理好以下关键信息:

  • API完整访问URL(例如https://<你的实例名>.service-now.com/api/自定义路径/端点)
  • 认证方式:一般是ServiceNow用户名+密码(Basic Auth),或已配置的OAuth令牌
  • 请求方法:根据你的脚本逻辑选择(通常为POST,用于接收事件推送数据)

步骤2:在Azure DevOps中创建Webhook订阅

  1. 进入目标Azure DevOps项目,打开项目设置 > 服务挂钩
  2. 点击创建订阅,选择Azure DevOps Services作为服务源,再选工作项更新作为触发事件
  3. 配置筛选规则:
    • 勾选要监听的工作项类型:事件(Incident)和任务(Task)
    • 设置触发时机:比如“工作项被创建、更新、删除时”(按需调整)
  4. 配置HTTP请求操作:
    • 填入你ServiceNow的API端点URL
    • 选择对应的HTTP方法(如POST)
    • 设置认证:选基本认证并输入ServiceNow账号密码;若用OAuth则配置对应令牌
    • 请求正文:Azure DevOps会自动生成包含工作项详情的JSON payload,可根据ServiceNow脚本需求精简字段

步骤3:验证Webhook有效性

  1. 在Azure DevOps的Webhook配置页面点击测试,触发模拟的工作项更新事件
  2. 查看ServiceNow的系统日志或API专属日志,确认请求是否被成功接收并处理
  3. 若出现错误,优先排查:
    • URL是否正确,实例名无拼写错误
    • 认证信息是否有效,账号是否有API访问权限
    • 请求payload格式是否匹配ServiceNow脚本的解析逻辑

步骤4:适配ServiceNow脚本处理Azure DevOps数据

以下是示例脚本,用于解析Azure DevOps推送的工作项数据并同步到ServiceNow:

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
    // 解析Azure DevOps发送的payload
    var payload = request.body.data;
    var workItemId = payload.resource.id;
    var workItemTitle = payload.resource.fields['System.Title'];
    var workItemType = payload.resource.fields['System.WorkItemType'];
    var updateTime = payload.resource.fields['System.ChangedDate'];

    // 同步Incident类型工作项到ServiceNow事件表
    if (workItemType === 'Incident') {
        var incident = new GlideRecord('incident');
        // 通过自定义字段关联Azure DevOps工作项ID
        incident.addQuery('u_azure_work_item_id', workItemId);
        incident.query();
        if (incident.next()) {
            incident.short_description = workItemTitle;
            incident.u_azure_update_time = updateTime;
            incident.update();
        } else {
            incident.initialize();
            incident.short_description = workItemTitle;
            incident.u_azure_work_item_id = workItemId;
            incident.u_azure_update_time = updateTime;
            incident.insert();
        }
    }

    // 同步Task类型工作项到ServiceNow任务表(逻辑类似)
    if (workItemType === 'Task') {
        var task = new GlideRecord('task');
        task.addQuery('u_azure_work_item_id', workItemId);
        task.query();
        if (task.next()) {
            task.short_description = workItemTitle;
            task.u_azure_update_time = updateTime;
            task.update();
        } else {
            task.initialize();
            task.short_description = workItemTitle;
            task.u_azure_work_item_id = workItemId;
            task.u_azure_update_time = updateTime;
            task.insert();
        }
    }
})(request, response);

常见问题排查

  • 请求被拦截:检查ServiceNow是否设置了IP白名单,确保Azure DevOps的IP地址在允许范围内
  • 数据解析失败:在ServiceNow脚本中加入日志打印,输出完整的Azure DevOps payload,确认字段路径是否正确
  • 认证失败:验证账号密码是否正确,或OAuth令牌是否过期、权限是否足够

内容的提问来源于stack exchange,提问作者Paul George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:50:25