- 入门指南
- 面向 Administrator
- RPA 工作流项目
- 应用程序项目
- 智能体流程
- Agents (智能体)
- Solutions (解决方案)
- API 工作流
- 测试

Studio Web 用户指南
检索工单详细信息
本教程演示如何使用 API 工作流并检索工单详细信息,以便稍后与智能体和 Maestro 集成。
API 工作流旨在从 ServiceNow 中检索事件详细信息,然后从 Salesforce 验证并获取有关工单创建者及其关联公司的其他信息(如果适用)。


-
打开数据管理器,然后使用以下属性添加事件编号作为输入属性:
- 类型:字符串
- 说明:传入工单编号的参考
- 必填项: True
-
在数据管理器中,将事件对象和isValidCallerIdLink添加为具有以下属性的变量:
- IncidentObject — 存储丰富的事件详细信息。
- “类型”:对象
- 默认值:留空
- isValidCallerIdLink — 验证从 ServiceNow 检索的Caller_id_link是否为有效的 URL。
- 类型:布尔值
- 默认值: false
- IncidentObject — 存储丰富的事件详细信息。
-
打开“调试配置”窗口。在必填的事件编号字段中,输入 NC0026701。
-
添加一个“连接器”活动,并将其配置为使用以下ServiceNow活动: “按事件编号搜索事件” 。这将根据作为输入提供的事件编号检索事件详细信息。
- 选择您的 ServiceNow 连接。
- 将“事件 ID”连接到以下变量: “工作流” > “输入” > “事件编号” 。
- 将活动上下文输出重命名为
$context.outputs.incident_1。
-
要检查在上一步中是否发现了任何事件,请添加具有以下条件的“If条件”活动:
$context.outputs.incident_1.content && $context.outputs.incident_1.content.length > 0$context.outputs.incident_1.content && $context.outputs.incident_1.content.length > 0 -
在Then分支中,如果发现任何事件,请继续验证
caller_id_link并获取更多详细信息。添加“Try Catch 异常处理”活动。-
在Try块内,添加具有以下“代码”的“脚本”活动 :
const callerIdLink = $context.outputs.incident_1.content[0].caller_id_link; const urlRegex = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i; $context.variables.isValidCallerIdLink = (callerIdLink && urlRegex.test(callerIdLink)); return $context.variables.isValidCallerIdLink;const callerIdLink = $context.outputs.incident_1.content[0].caller_id_link; const urlRegex = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i; $context.variables.isValidCallerIdLink = (callerIdLink && urlRegex.test(callerIdLink)); return $context.variables.isValidCallerIdLink;将该活动重命名为“验证来电者 ID”链接,并将上下文输出名称重命名为
$context.outputs.Validate_Caller_ID_Link。 -
在同一个Try块中,添加具有以下条件的If活动:
$context.variables.isValidCallerIdLink。将活动重命名为“如果来电者 ID 链接有效”,将上下文输出名称重命名为$context.outputs.If_Caller_ID_Valid。 -
在上一个“IF 条件”活动的“Then” (链接有效)分支中,添加具有以下配置的“连接器”活动Service Now HTTP 请求:
- ServiceNow 连接— ServiceNow 开发者帐户
- 方法— GET
- 请求 URL —
$context.outputs.incident_1.content[0].caller_id_link ```Rename the activity to "Get Ticket Creator". The context output name remains as `$context.outputs.ServiceNow_HTTP_Request_1`.$context.outputs.incident_1.content[0].caller_id_link ```Rename the activity to "Get Ticket Creator". The context output name remains as `$context.outputs.ServiceNow_HTTP_Request_1`.
-
在上一个“IF 条件”活动的“Else (链接无效)”分支中,添加具有以下“代码” 的“脚本”活动:
console.error("Invalid caller_id_link, skipping 'Get Ticket Creator' activity."); return null;console.error("Invalid caller_id_link, skipping 'Get Ticket Creator' activity."); return null;将活动重命名为“记录无效的来电者 ID 链接”,并将上下文输出名称重命名为
$context.outputs.Log_Invalid_Caller_ID。 -
在“If条件”活动外部,但仍在“Try”块内,使用以下“代码”添加“脚本”活动。此活动会将初始事件详细信息与获取的创建者详细信息合并到单个事件对象中。
const incident = $context.outputs.incident_1.content[0]; let creatorDetails = null; const creatorOutput = $context.outputs.ServiceNow_HTTP_Request_1.content; if (creatorOutput && Array.isArray(creatorOutput) && creatorOutput.length > 0) { creatorDetails = creatorOutput[0]; } else if (creatorOutput && typeof creatorOutput === 'object' && creatorOutput !== null) { creatorDetails = creatorOutput; } let companyDetails = null; const companyOutput = $context.outputs.ServiceNow_HTTP_Request_1.content; if (companyOutput && typeof companyOutput === 'object' && companyOutput !== null) { companyDetails = companyOutput; } else if (companyOutput && Array.isArray(companyOutput) && companyOutput.length > 0) { companyDetails = companyOutput[0]; } return { ...incident, creator: creatorDetails, company: companyDetails };const incident = $context.outputs.incident_1.content[0]; let creatorDetails = null; const creatorOutput = $context.outputs.ServiceNow_HTTP_Request_1.content; if (creatorOutput && Array.isArray(creatorOutput) && creatorOutput.length > 0) { creatorDetails = creatorOutput[0]; } else if (creatorOutput && typeof creatorOutput === 'object' && creatorOutput !== null) { creatorDetails = creatorOutput; } let companyDetails = null; const companyOutput = $context.outputs.ServiceNow_HTTP_Request_1.content; if (companyOutput && typeof companyOutput === 'object' && companyOutput !== null) { companyDetails = companyOutput; } else if (companyOutput && Array.isArray(companyOutput) && companyOutput.length > 0) { companyDetails = companyOutput[0]; } return { ...incident, creator: creatorDetails, company: companyDetails };
将活动重命名为“JS - 事件对象”。上下文输出名称仍为
$context.outputs.Javascript_1。6. 将事件对象分配给变量:添加具有以下配置的“分配”活动:-
目标变量— 选择在开头定义的事件对象变量。
-
设置值— 引用上一个脚本活动的上下文名称:
$context.outputs.Javascript_1$context.outputs.Javascript_1将活动重命名为“分配事件对象”。上下文输出名称仍为
$context.outputs.Assign_1。
-
在当前“ Try Catch 异常处理”活动的Catch块中,添加具有以下“代码”的“脚本”活动:
let errorMessage = `Error in Try_Catch_1: ${$error.title || 'Unknown Error'}`; if ($error.detail) { errorMessage += `\nDetails: ${$error.detail}`; } if ($error.data && $error.data.status) { const statusCode = $error.data.status; if (statusCode === 0 || statusCode === -1) { errorMessage += "\nNetwork error: Unable to connect to ServiceNow."; } else if (statusCode >= 500 && statusCode < 600) { errorMessage += "\nServiceNow server error."; } } console.error(errorMessage); console.error("Stack Trace:", $error); return null;let errorMessage = `Error in Try_Catch_1: ${$error.title || 'Unknown Error'}`; if ($error.detail) { errorMessage += `\nDetails: ${$error.detail}`; } if ($error.data && $error.data.status) { const statusCode = $error.data.status; if (statusCode === 0 || statusCode === -1) { errorMessage += "\nNetwork error: Unable to connect to ServiceNow."; } else if (statusCode >= 500 && statusCode < 600) { errorMessage += "\nServiceNow server error."; } } console.error(errorMessage); console.error("Stack Trace:", $error); return null;将活动重命名为“记录错误详情”,并将上下文输出名称重命名为
$context.outputs.Log_Error_Catch。 -
如果发生任何错误,请添加“分配”活动,以使用带有来自 ServiceNow 的初始详细信息的简化事件对象:
- 目标变量— 选择在开头定义的事件对象变量。
- 设置值— ``` (($ IncidentDetails) => ({ ID:$ IncidentDetails.sys_id,number: $ IncidentDetails.number,short_description: $ IncidentDetails.short_description,说明:$ IncidentDetails.description,州: $ IncidentDetails.state,紧急情况:$ IncidentDetails.urgent,影响:$ IncidentDetails. Impact ,Opened_at:$ IncidentDetails.opened_at,closed_at:$ IncidentDetails.closed_at}))($context.outputs.curated_search_ Incident_1.Content[0])
The activity name and the context output name remain as they are.The activity name and the context output name remain as they are.
-
-
退出“Try Catch 异常处理” 活动,并在“Else”分支中添加空“响应” 。将“响应”活动重命名为“未找到结果”。
-
要检查是否有任何事件对象包含有关创建者电子邮件和公司帐户 ID 的足够信息,请添加具有以下条件的If活动:
$context.variables.incidentObject && $context.variables.incidentObject.creator && $context.variables.incidentObject.creator.email && $context.variables.incidentObject.company && $context.variables.incidentObject.company.account_id$context.variables.incidentObject && $context.variables.incidentObject.creator && $context.variables.incidentObject.creator.email && $context.variables.incidentObject.company && $context.variables.incidentObject.company.account_id- 在Then分支中,添加一个连接器活动,并将其配置为使用Salesforce活动:使用 SOQL 搜索。将活动重命名为“获取联系人”,并将上下文输出名称重命名为
$context.outputs.soqlQuery_1。 - 在“查询”字段中,打开“表达式编辑器”并写入:
"SELECT Id, Name, Email, AccountId FROM Contact WHERE Email = '" + $context.variables.incidentObject.creator.email + "' LIMIT 1""SELECT Id, Name, Email, AccountId FROM Contact WHERE Email = '" + $context.variables.incidentObject.creator.email + "' LIMIT 1"- 在“Then”分支中,添加具有以下“条件”的“IF条件”活动:
$context.outputs.soqlQuery_1.content && $context.outputs.soqlQuery_1.content.length > 0
Rename the activity to "If Contact Found" and the context output name to `$context.outputs.If_Contact_Found`. This conditional activity checks if a contact was found in Salesforce.Rename the activity to "If Contact Found" and the context output name to `$context.outputs.If_Contact_Found`. This conditional activity checks if a contact was found in Salesforce.-
在“If Contact Found”活动的Then分支中,添加一个“连接器”活动并将其配置为使用Salesforce “获取帐户”活动:
- Salesforce 连接— Salesforce 开发者帐户
- 帐户 ID —
$context.variables.incidentObject.company.account_id$context.variables.incidentObject.company.account_id
将上下文输出重命名为
$context.outputs.curated_account_1。此活动使用增强后的“事件对象”中的account_id检索 Salesforce 中的帐户详细信息。 -
在“如果找到联系人”活动的“Then ”分支中,添加一个“遍历循环”活动并配置其查找:
$context.outputs.soqlQuery_1.content。此循环将遍历 Salesforce 联系人搜索的结果(尽管 SOQL 查询限制为 1)。在循环内,它尝试获取与已找到联系人相关的案例详细信息。 -
在“遍历循环”的主体内部,添加具有以下配置的“连接器”活动“立即服务 HTTP 请求”和的配置:
- ServiceNow 连接— Salesforce 开发者帐户
- 方法— GET
- 请求 URL —
"/services/data/v64.0/sobjects/Case/" + $currentItem.Id"/services/data/v64.0/sobjects/Case/" + $currentItem.Id
将活动重命名为“案例详细信息”。上下文输出名称保持原样。
-
退出遍历循环并添加一个空的“响应”活动。
-
在“If Contact Found”活动的Else分支中,添加具有以下Response的 Response活动:
- 响应—
No Salesforce Contact found for the incident creator email."No Salesforce Contact found for the incident creator email."
将该活动重命名为“返回未找到联系人错误”。
- 响应—
- 在Then分支中,添加一个连接器活动,并将其配置为使用Salesforce活动:使用 SOQL 搜索。将活动重命名为“获取联系人”,并将上下文输出名称重命名为