ServiceNow

Contact Center AI 平台 (CCAI Platform) 提供与 ServiceNow CRM 的集成。

ServiceNow 开发者设置

首选的最低 ServiceNow 版本要求:Tokyo patch 1

设置基本身份验证用户

ServiceNow 管理员账号可能已启用两步验证,并与该用户相关联。因此,它不能用于在 CCAI Platform 中获取管理员访问权限。为此,您必须在 ServiceNow 中创建用户账号。

创建具有凭证的基本用户:

  1. 依次前往用户 > 新建。

  2. 填写详细信息,然后选择“仅限 Web 服务访问”。

  3. 记下用户 ID 和密码。

ServiceNow 中的必需角色

ServiceNow 中的默认角色已预先配置,可在平台内提供特定访问权限和权限。管理员可以创建和配置角色,以授予特定权限,这些权限用于控制具有该角色的用户和群组可以执行的操作。

如需执行此集成,您需要在 ServiceNow 中拥有以下角色:

  • user_admin:此角色专为需要在 ServiceNow 实例中管理用户、群组、位置和公司的管理员而设计。

  • sn_incident_read:此角色提供对突发事件管理应用及其相关功能的只读权限。它允许用户查看突发事件记录。

  • sn_incident_write:此角色授予对突发事件管理应用及其相关功能的写入权限,允许用户创建和修改突发事件记录。

  • personalize_dictionary:此角色允许自定义字典条目和标签,以满足特定业务要求。

  • function_field_admin:此角色适用于需要在报告设计器中创建、修改和查看函数字段的用户。它不提供从平台列表或表单创建或删除函数字段的功能。

配置实例视图

以下部分概述了实例视图所需的配置更改。

(可选)添加收藏内容

通过收藏夹,您可以快速找到 ServiceNow 实例中最常用的链接。如需添加收藏夹,请选择“导航器”面板中字段旁边的星形图标。如果您以后想过滤导航器面板,以便仅查看收藏夹,则可以选择导航器面板中过滤条件导航器字段正下方的星形图标。

实用收藏夹示例:

  • 突发事件:与自定义 CRM 记录的关联。

  • 用户:与自定义 CRM 账号的关联。

  • REST API Explorer:测试 API 的好方法。

手动添加自定义字段

在您要更改的对象视图中,选择左上角的展开图标(3 条水平线)。您可以在自助服务视图或默认视图中执行此操作。

  1. 在菜单中,依次选择配置 > 表单设计,打开表单设计器。

  2. 在左侧列中,选择字段类型标签页。

  3. 拖动您要添加的自定义字段类型。

  4. 将字段类型拖放到所需部分后,选择齿轮图标以查看设置。

  5. 在窗口中,更改标签并记下名称。该名称是您在 CCAI 平台应用设置中使用的名称。

  6. 选择屏幕右上角的保存。

将练习数据映射到 CRM

您必须使用 Dialogflow 从 CCAIP 映射适当的会话数据,并使用以下参数:

虚拟代理数据

{
  "ujet": {
    "session_variable": {
      "capture_target": "payload",
      "payload": {
        "value_one": "$session.params.payload_value_one"
      };
      "capture_type": [ "comment", "field" ] // optional, default of ["comment"]
    }
  }
}

元数据

https://INSTANCE.service-now.com/api/now/table/sys_dictionary?sysparm_query=name%3Dsys_user https://INSTANCE.service-now.com/api/now/table/sys_dictionary?sysparm_query=name%3Dincident

标签:column_label

API 密钥:element

自定义字段与 sys_user 或 incident 响应中的标准字段处于同一级别。

将文件从 CCAI Platform 上传到 CRM

https://INSTANCE_URL.service-now.com/api/now/attachment/upload

方法:POST

请求数据格式:property

响应数据位置:data.result

类型:Multi-part form

附件类型:Attachment Url

附件网址:download_link

参数:table below

请求示例:

{
    file: FILE_DATA,
    table_name: incident,
    table_sys_id: RECORD_ID
}

集成代理适配器(自定义表单)

以下步骤将引导您完成在 ServiceNow 实例中启用代理适配器和点击通话功能的过程。

安装和配置 OpenFrame

  1. 依次前往全部 > 系统应用 > 所有可用应用 > 全部。

  2. 搜索 OpenFrame。

  3. 安装 OpenFrame。

  4. 安装后,依次前往全部 > OpenFrame > 配置。

  5. 使用网址创建配置。如果您在 ServiceNow 实例中有多个配置,则您的用户可能无权访问新创建的配置。检查您的群组和 OpenFrame 配置顺序列表,确定用户使用的是哪种配置。

  6. 在搜索框中输入 sys_properties.list。

  7. 修改 glide.ui.concourse.onmessage_enforce_same_origin_whitelist。

  8. 将新网址添加到值列表中。

  9. 修改 sn_openframe.cross.origin.access。

  10. 将 autoplay 添加到值列表中。

为用户启用新版界面体验

  1. 在导航栏中输入 sys_properties.list,然后按 Enter 键。

  2. 将系统属性 glide.ui.polaris.experience 设置为 true。

  3. 将系统的用户偏好设置 glide.ui.polaris.use 设为 false。

  4. 将用户的用户偏好设置 glide.ui.polaris.use 设为 true。(您可以创建用户偏好设置行。)

更新系统属性

  1. 在导航栏中输入 sys_properties.list,然后按 Enter 键。

  2. 修改 glide.ui.concourse.onmessage_enforce_same_origin_whitelist。

  3. 将该网址添加到值列表中。多个值需要用英文逗号分隔。

  4. 修改 sn_openframe.cross.origin.access。

  5. 将 autoplay 添加到值列表中。

  6. 修改 glide.ui.polaris.experience。

  7. 更改为 false,因为如果启用,某些功能将无法正常运行。

在表单顶部添加“点击致电”

  1. 依次前往系统界面 > 界面操作。

  2. 选择创建新操作。

  3. 在如图所示的表单中,选择此点击致电功能所属的表。

  4. 对于引用了联系人或用户的表单,请使用 g_form.getReference API 访问用户的手机号码。对于自定义表,参考 ID 和生成的属性可能会有所不同。与 CCAI Platform 的通信将保持不变,因此载荷和数据结构必须与以下内容保持一致:

    function clickToDial() {
      var user = g_form.getReference('caller_id',function(res) {
        var phone = res.phone || res.mobile_phone;
        var payload = {"name": "clicktodial", "number": phone};
        var data = {"payload": payload, "method": "openframe_communication" };
        CustomEvent.fireAll("openframe_request", data);
      });
    }
    
  5. 对于表单中包含要拨打的号码的表单,请使用 g_form.getValue API 检索相关值。以下是 Users 表的界面操作示例。对于自定义表格,表单字段名称可能会有所不同。 与 CCAI Platform 的通信将保持不变,因此载荷和数据结构必须与以下内容保持一致:

    function clickToDial() {
      var phone = g_form.getValue('phone') || g_form.getValue('mobile_phone');
      var payload = {"name": "clicktodial", "number": phone};
      var context = {"payload": payload, "method" : "openframe_communication" };
      CustomEvent.fireAll("openframe_request", context);
    }
    

在参考资料旁边添加点击通话功能

  1. 必须在表单中修改联系人引用旁边的通话按钮。右键点击相应字段,然后前往 Configure Dictionary(配置字典)。对于属性,请将值 show_phone 或 show_phone_customer_service 添加到 ref_contributions 值。

  2. 在界面宏中,修改 show_phone 和 show_phone_customer_service。

  3. 替换以下内容:

更新前:

var task =    {"entity": p.attr('data-task-table'), "query" :"sys_id="+p.attr('data-task-id')+"$[AMP]sysparm_view="+p.attr('data-task-view'),"value":p.attr('data-task-value'),"label":p.attr('data-task-label')};
                                        var company = {"entity": p.attr('data-company-table'),"query":"sys_id="+p.attr('data-company-id')+"$[AMP]sysparm_view="+p.attr('data-task-view'),"value":p.attr('data-company-value'),"label":p.attr('data-company-label')};
                                        var caller = {"entity": p.attr('data-caller-table'),"query": "sys_id="+p.attr('data-caller-id')+"$[AMP]sysparm_view="+p.attr('data-task-view'),"value":p.attr('data-caller-value'),"label":p.attr('data-caller-label')};

                                        var callContext = [];
                                        callContext.push(task);
                                        callContext.push(company);
                                        callContext.push(caller);

                                        var metaData = {"phoneNumber":p.attr('data-caller-phone'),"taskId":p.attr('data-task-id')};

                                        var data =    {"metaData":metaData , "data": callContext};
                                        var payload = {"type": "OUTGOING_CALL", "data" : data};
                                        var createInteractionData ={};
                                        createInteractionData.interactionSysId = -1;
                                        createInteractionData.direction = 'outbound';
                                        createInteractionData.context_document = p.attr('data-task-id');
                                        createInteractionData.context_table = p.attr('data-task-table');
                                        createInteractionData.account = p.attr('data-company-id');
                                        if(p.attr('data-caller-table') === 'customer_contact')
                                                createInteractionData.contact = p.attr('data-caller-id');
                                        createInteractionData.opened_for = p.attr('data-caller-id');

                                        var ga = new GlideAjax('sn_openframe.OpenFrameAjaxUtility');
                                        ga.addParam('sysparm_name', 'createInteractionWithPropertyCheck');
                                        ga.addParam('context', JSON.stringify(createInteractionData));
                                        ga.getXML(function(serverResponse) {
                                                var result = serverResponse.responseXML.getElementsByTagName("result");
                                                var output = JSON.parse(result[0].getAttribute("data"));
                                                if(output.status == "success"){
                                                        var interaction = {"entity": "interaction", "query" :"sys_id="+output.fields.interactionSysId, "value":output.fields.number, "label":"Interaction", "display":false};
                                                        payload.data.data.push(interaction);
                                                }
                                                var context = {"payload": payload, "method" : "openframe_communication" };
                                                jslog("context with interaction : "+ JSON.stringify(context));
                                                CustomEvent.fireAll("openframe_request", context);
                                        });

新:

var phone = p.attr('data-caller-phone')
                   var payload = {"name": "clicktodial", "number": phone};
                   var data = {"payload": payload, "method": "openframe_communication" };
                   CustomEvent.fireAll("openframe_request", data);

CRM 设置

以下步骤说明了如何使用 CCAI Platform 门户将 API 连接到 ServiceNow。

  1. 在 CCAI Platform 门户中,依次前往设置 > 开发者设置 > CRM。

  2. 在“Agent Platform”部分中,选择 ServiceNow。

  3. 在 ServiceNow 网域字段中输入您的 ServiceNow 网域信息。 这可能是开发者实例或供应商实例(视需要而定),但与实例直接相关,并且是 ServiceNow 门户网址中网址的第一部分:https://{your instance}.servicenow.com。

  4. 在 ServiceNow 云选择字段中,选择 Incident 作为基本工单类型。如果您选择Custom,系统会显示其他选项。 突发事件是任务表的扩展;自定义对象应是突发事件的扩展。

  5. 在身份验证凭证字段中,输入您的用户名和密码。

  6. 如果您为云选择字段类型选择了 Incident,您将看到以下字段:

    • 查找账号对象包含三个下拉字段:Object Type、Phone Number lookup fields和Phone number primary field。
  7. 如果您为云选择字段类型选择了 Custom,您将看到以下字段:

    • 查找记录对象:

      • 基本记录对象类型:选择 task 或 incident 表类型。

      • 记录对象类型:如果突发事件表已扩展,则此字段将填充数据,您可以根据需要选择该字段。

      • 查找账号对象包含三个下拉字段:Object Type、Phone Number lookup fields和Phone number primary field。

  8. 自定义用户 ID 字段:如果您想为移动或 Web SDK 或 Apps API (Chat) 会话启用自定义用户查找字段,请选中此复选框。

  9. 手机号码格式:让您能够选择要用于显示手机号码的格式。

  10. 会话元数据文件:选中此复选框可将会话元数据附加到 CRM 记录。

  11. 点击保存,保存您所做的选择。

记录的自定义字段

这些是已在表单设计器中为 ServiceNow 实例创建的自定义字段,可在 CCAI Platform 中使用。您还可以通过在菜单的“记录的自定义字段”部分中选择创建来创建其他自定义字段。

字段 类型 定义
u_ujet_custom_field_after_call_work 字符串 通话后收尾工作时长
u_ujet_custom_field_call_duration 字符串 通话时长
u_ujet_custom_field_comm_id 整数 通话或聊天 ID(取决于联系人类型)
u_ujet_custom_field_rating 整数 客户满意度评分
u_ujet_custom_field_email_via_web 字符串 通过网页发送的电子邮件
u_ujet_custom_field_feedback 字符串 反馈
u_ujet_custom_field_from_phone_number 字符串 来电者的电话号码
u_ujet_custom_field_hold_duration 字符串 总呼叫保持时长
u_ujet_custom_field_menu_path 字符串 菜单选择
u_ujet_custom_field_queue_name 字符串 队列名称
u_ujet_custom_field_session_type 字符串 会话类型
u_ujet_custom_field_verification True/False 确认验证已完成
u_ujet_custom_field_wait_time 字符串 总等待时间

设置 OAuth

如需配置 OAuth,请按照以下步骤在 ServiceNow 中创建 OAuth 应用。 然后,在开发者设置 > CRM > 身份验证方法下输入凭证(OAuth 客户端 ID 和 OAuth 客户端密钥)。

在 ServiceNow 中创建 OAuth 应用

  1. 在您的 ServiceNow 账号中,依次前往全部 > 系统 OAuth > 应用注册。

  2. 创建 OAuth 应用,然后选择为外部客户端创建 OAuth API 端点。

  3. 配置以下字段:

    • 名称:输入一个唯一名称。

    • 客户端 ID:客户端 ID 由 ServiceNow OAuth 服务器自动生成。

    • 客户端密钥:这是 OAuth 应用的客户端密钥。 留空即可自动生成。

    • 刷新令牌生命周期:刷新令牌的有效时间(以秒为单位)。

    • 访问令牌生命周期:访问令牌的有效时间(以秒为单位)。

    • 重定向网址:输入您的环境网址和子目录。例如: https://servicenow.yourcompany.co/v1/servicenow/oauth_callback

    • 强制执行令牌限制:将访问令牌的使用限制为 ServiceNow 文档中的 REST API 访问权限政策中定义的 API。取消选择此选项将允许在其他 REST API 中使用访问令牌。

  4. 点击提交。

  5. 创建应用后,返回记录并检索客户端 ID 和新创建的客户端密钥。

在开发者设置中更新设置

  1. 依次前往开发者设置 > CRM。

  2. 请务必按照上述步骤输入和配置设置。

  3. 在身份验证方法下,点击 OAuth。

  4. 输入 OAuth 客户端 ID 和 OAuth 客户端密钥。(请参阅上文中的第 5 步)。

  5. 点击保存。

  6. 点击关联凭证。

Virtual Agent 的自定义字段映射

如果使用 Virtual Agent,请在自定义字段映射屏幕中配置此字段。这样,Virtual Agent 变量就可以从 Virtual Agent 会话载荷转移到 ServiceNow。变量名称可以是任何字符串,此处列出的字段标签只是一个示例。

在自定义字段映射屏幕中,配置您在初始 Virtual Agent 配置中使用的载荷定义所创建的变量与 ServiceNow 中的相关变量之间的连接。

字段映射标题 CRM 字段标签 自定义数据字段标签
虚拟客服反馈 ccaip_custom_field_incident_feedback va_feedback

添加 CRM 字段映射

  1. 前往设置 > 运营管理。

  2. 前往 CRM Custom Field Mapping(CRM 自定义字段映射)部分 > 点击 View All(查看全部)。

  3. 点击 + 添加 CRM 字段映射链接。

    • 字段映射标题:CCAI Platform 门户中使用的此自定义字段映射的 CCAI Platform 名称。

    • CRM 字段标签:CRM 中您要映射到的 CRM 字段的标签。

    • 自定义数据字段标签(自定义数据键):您要从中映射的 CCAI Platform 自定义数据载荷中的顶级键名称(例如,SDK 载荷的 device,或 Apps API Chat 载荷的 orderId)。此密钥必须由 CCAI Platform Web 或移动 SDK 发送,或者(对于聊天互动)使用 Apps API Send custom data in a chat 端点发送。键必须完全匹配(包括大小写)。

  4. 点击保存。

配置其他设置

您可以在设置下拉菜单下找到其他设置,以便将 CCAI Platform 正确集成到 ServiceNow 实例中。如需详细了解如何配置每个部分,请参阅以下列表中的链接。

测试输出

现在,您可以点击 CCAI Platform 门户屏幕顶部的相关按钮,验证通话和聊天流程的功能。请务必确保在运行此测试时停用弹窗拦截器。

您应该会在 ServiceNow 中看到创建的突发事件,并且该突发事件的活动部分中会列出通话或聊天联系人。此信息应显示为工作备注,而不是突发事件评论,这样客户就看不到此后端活动。

支持请求说明将自动填充“使用 CCAI Platform 通话”或“使用 CCAI Platform Chat”,并且可能需要由客服人员进行更新。

如果您对通话或聊天的结果感到满意,可以输入解决代码和备注(如果已配置 ServiceNow 解决代码和备注字段),然后关闭支持请求。

如需验证支持请求是否已关闭,您可能需要点击浏览器上的 back 导航按钮。在 ServiceNow 实例中,解决支持请求后,系统会自动关闭该请求并转到客户记录页面,这是正常现象。