自定义 Zia 操作

技术人员可以在 Zia 的开发者控制台中定义适用于其组织的 [Zia] 操作。技术人员可以定义 Zia 支持的三种操作类型,包括直接提问、数据获取型提问和操作执行。

配置自定义操作

所有 ServiceDesk Plus Cloud 技术人员都可以在 Zia 的开发者控制台中配置操作。但是,技术人员只能修改或删除他们自己创建的操作。只有管理员对所有操作拥有完全控制权。

技术人员可以配置任意数量的操作,没有数量限制。

预配置完成后,这些操作将在 ServiceDesk Plus Cloud 中 Ask Zia 内的 汉堡 图标下显示。 

以下是配置任意类型操作的通用初始步骤:

点击 Zia 集成页面上显示的链接以打开 Zia 的开发者控制台。

点击 AddAction 并选择 Write your Own
 

配置直接提问

例如,您希望定义一个用于提供系统管理员分机号码的操作。

在新建操作表单中,为您的操作提供一个名称。(该名称仅用于开发者控制台中的参考。)

选择 Answer a Question,然后选择 Give a Direct Answer

设置此操作在 AskZia 中向用户显示的方式。为该操作提供一个简短但有意义的名称。
 

提供问题的答案,然后点击 Next
 

输入所有可能用于在 AskZia 中调用同一操作的问题或语句。这些问题将作为推荐项供用户选择。

对问题进行排序,以便在 AskZia 中显示。使用每个问题右侧显示的指针来重新定位问题顺序。

点击 Save
 

选择是仅允许 Zoho 用户还是允许所有网页用户访问该操作。

点击 Save
 

您可以通过点击 ADD FOLLOWUP ACTION 来定义顺序操作。


从可用问题中进行选择,然后点击 UPDATE
 

然后,点击左侧窗格中显示的 ServiceDesk Plus Cloud,并点击页面上半部分的 UPDATE

只有在发布之后,该操作才能在 ServiceDesk Plus Cloud 中使用。

配置数据获取型提问

例如,您希望定义一个通过主题搜索请求的操作。

在新建操作表单中,为您的操作提供一个名称。(该名称仅用于开发者控制台中的参考。)

选择 Answer a Question,然后选择 Construct Answer by Fetching Data

设置此操作在 AskZia 中向用户显示的方式。为该操作提供一个简短但有意义的名称。 

使用 Add 图标,输入所有可能用于在 AskZia 中调用同一操作的问题或语句。这些问题将作为推荐项供用户选择。

对问题进行排序,以便在 AskZia 中显示。使用每个问题右侧显示的指针来重新定位问题顺序。第一个问题将显示在 AskZia 中的 汉堡 菜单下。

然后,您必须提供 参数。有关每种参数类型的详细说明,请参阅此处

点击 AddParam 并填写相关字段。

使用 Add 图标并输入该操作所需的所有参数。

对参数进行排序,以便在调用该操作时按顺序显示在 AskZia 中。使用每个参数左侧显示的指针来重新定位参数顺序。

选择是仅允许 Zoho 用户还是允许所有网页用户访问该操作,然后点击 Done

在显示的页面上点击 EDIT EXECUTION FUNCTION

将脚本插入编辑器中,然后点击 SaveScript。(此处提供了示例操作的格式化脚本。)

您可以通过与页面右侧提供的实时控制台中的 Zia 进行交互,立即测试脚本执行情况,如下所示:

点击 Done

然后,点击左侧面板中显示的 ServiceDesk Plus Cloud,并在页面上半部分点击 PUBLISH

只有在发布之后,该操作才能在 ServiceDesk Plus Cloud 中使用。

配置操作

假设您想定义一个添加提醒的操作。

在新建操作表单中,为您的操作提供一个名称。(该名称仅用于开发者控制台内部参考。)

选择 Perform an Operation

说明该操作在 Ask Zia 中应如何向用户显示。为该操作提供一个简短但有意义的名称。例如,Add Reminder 可以表示任务“Zia,您能为请求添加一个提醒吗?”

使用 Add 图标,输入所有可用于在 Ask Zia 中调用同一操作的问题或句子。这些问题将推荐给用户进行选择。

对问题进行排序,以确定它们在 AskZia 中的显示顺序。使用每个问题右侧显示的指针来重新定位问题。第一个问题将显示在 AskZia 中的 Hamburger 菜单下。

点击 Next 并提供 参数。有关字段的详细说明,请参阅此处

点击 Add Param 按钮并填写详细信息。

使用 Add 图标,输入该操作所需的所有参数。对参数进行排序,以便在调用操作时按顺序显示在 Ask Zia 中。使用每个参数左侧显示的指针来重新定位参数。

选择仅 Zoho 用户还是所有网络用户可以访问此操作,然后点击 Done

点击 Done

在显示的页面上点击 Edit Execution Function

将脚本插入编辑器中,然后点击 Save Script。(此处提供了示例操作的格式化脚本。)

您可以通过与页面右侧提供的实时控制台中的 Zia 进行交互,立即测试脚本执行情况,如下所示:

点击 Done

然后,点击左侧面板中显示的 ServiceDeskPlusCloud,并在页面上半部分点击 UPDATE

只有在更新之后,该操作才能在 ServiceDesk Plus Cloud 中使用。

查看/编辑/停用操作

ServiceDesk Plus Cloud 下,选择一个筛选器以查看相应的操作。

点击您想要修改或停用的操作。

如需修改,请使用页面右上角显示的 Edit 图标。在数据获取问题和操作中,您可以通过点击 Edit Code(位于 Edit 下拉菜单中)来修改脚本。

如需停用,请点击 Vertical Ellipsis 按钮,然后点击 Deactivate。已停用的操作将显示在 Inactive [操作] 筛选器下。

管理员可以控制所有操作,而技术人员只能修改或停用他们自己的操作。

参数 

参数是必须从用户处接收以完成操作的输入数据。

参数详情

在每个参数中,您必须填写以下字段:

参数名称 - 有效的参数名称应符合以下要求:

  • 在一个操作中,参数名称必须唯一
  • 以小写字母开头
  • 只能包含字母、数字和下划线 
  • 以下名称不能用作参数名称,因为它们是 Zia 中的保留字 — userInput、previousParam、additionalParams、sessionData、broadcast、previousUserMsgs、cache、org 和 user

参数类型 - 为您的参数选择合适的数据类型。Zia 支持以下数据类型:

  • String - 字符序列
  • Number - 任意有效数字
  • Time - 有效格式的时间
  • Date - 有效日期
  • Array 单选 — 供用户选择其中一个选项的列表
  • Array 多选 — 供用户选择多个选项的列表

数组类型参数 - 对于数组类型参数,您可能需要输入以下附加信息:

  • 数组值 - 您可以包含一个选项列表,供用户选择一个或多个选项。或者,您可以为每个选项输入 ID,或在仅输入值时使用自动生成的 ID。
  • 输入方式 - 指定数组参数向用户发出提示的方式。可以是文本方式或可视化方式。如果选择文本方式,用户可以(在聊天场景中)输入或(在语音场景中)说出他们希望为数组参数分配的值。在可视化输入方式下,用户需要通过点击或触摸从数组值中选择其输入,选项将以单选按钮(单选)或复选框(多选)的形式显示。

提示消息

当您在 ServiceDesk Plus Cloud 中与 Zia 交互时,Zia 将通过显示提示来获取在操作中配置的参数输入。

示例脚本

操作 1:按主题搜索请求
 

result = Map();
/*
按主题搜索的条件
*/
criteria = Map();
criteria.put("condition","like");
criteria.put("field","subject");
criteria.put("value",searchsubject);
list_info_param = Map();
list_info_param.put("search_criteria",criteria);
paramMap = Map();
paramMap.put("list_info",list_info_param);
apiUrl = "/api/v3/requests";
client_data = sessionData.get("client_data");
if(client_data != null)
{
    appName = client_data.get("appname");
    if(appName != null)
    {
        apiUrl = "/app/" + appName + apiUrl;
    }
}
response = invokeurl
[
    url :"https://sdpondemand.manageengine.com"+apiUrl
    type :GET
    parameters:{"input_data":paramMap}
    connection:"sdpondemand3"
];
info response;
// 以表格格式显示 API 结果
requestArr = response.get("requests");
card = list();
item = Map();
item.put("type","table");
item.put("heading","请求");
columns = {"请求 ID","请求主题","请求人姓名","分配给","状态","到期日期","链接"};
item.put("columns",columns);
rows = {};
foreach  request in requestArr
{
    row = {};
    row.add(request.get("display_id"));
    row.add(request.get("subject"));
    requestername = request.get("requester").get("name");
    row.add(requestername);
    technician = request.get("technician");
    technicianName = "-";
    if(technician != null)
    {
        technicianName = technician.get("name");
    }
    row.add(technicianName);
    row.add(request.get("status").get("name"));
    dueByTime = request.get("due_by_time");
    if(dueByTime != null)
    {
        dueByTimeLabel = dueByTime.get("display_value");
    }
    if(dueByTimeLabel == null)
    {
        dueByTimeLabel = "-";
    }
    row.add("" + dueByTimeLabel);
    row.add("https://sdpondemand.manageengine.com/app/" + appName + "/WorkOrder.do?woMode=viewWO&woID=" + request.get("id"));
    rows.add(row);
}
item.put("rows",rows);
card.add(item);
//info "此操作中的卡片数据======>" + card;
if(requestArr.size() > 0)
{
    result.put("card",card);
}
else
{
    result.put("message","未找到结果。");
}
return result;

操作 2:添加提醒

apiUrl = "/api/v3/reminders";
client_data = sessionData.get("client_data");
if(client_data != null)
{
    appName = client_data.get("appname");
    if(appName != null)
    {
        apiUrl = "/app/" + appName + apiUrl;
    }
}
reminder_base = Map();
if(summaryparam != null && reminderdateparam != null && remindertimeparam != null)
{
    reminder_base.put("summary",summaryparam);
    datemap = Map();
    reminderdateparam = reminderdateparam.toTime().addHour(remindertimeparam.toTime().getHour());
    reminderdateparam = reminderdateparam.toTime().addMinutes(remindertimeparam.toTime().getMinutes());
    datemap.put("value",reminderdateparam.toTime().toLong());
    reminder_base.put("date",datemap);
    paramMap = Map();
    paramMap.put("reminder",reminder_base);
    response = invokeurl
    [
        url :"https://sdpondemand.manageengine.com"+apiUrl
        type :POST
        parameters:{"input_data":paramMap}
        connection:"sdpondemand3"
    ];
    responseStatusObject = response.get("response_status");
    result = Map();
    if(responseStatusObject != null)
    {
        responseStatusMessage = responseStatusObject.get("status");
        resultString = "添加提醒时出错。";
        if(responseStatusMessage == "success")
        {
            resultString = "提醒添加成功。";
        }
        else
        {
            responseMessages = responseStatusObject.get("messages").toJSONList().get(0);
            resultString = resultString + " 请使用有效的 " + responseMessages.get("field") + " 重新执行该过程。";
        }
        result.put("message",resultString);
    }
}
return result;