设置 ServiceDesk Plus 与 Microsoft Teams 的集成,以利用 Microsoft 的协作应用作为 IT 和企业支持的附加渠道。此集成会创建一个服务台机器人,使用户能够直接在其 Microsoft Teams 账户中查看服务台工单、查看待审批事项,并与帮助台技术人员聊天。通过将事件管理等一系列服务台功能引入 Microsoft Teams,ServiceDesk Plus 弥合了 IT 帮助台团队与最终用户之间的差距。
ServiceDesk Plus 本地部署实例应通过公共网络托管,并具有有效的 SSL 证书。该实例应托管在 HTTPS 上,并可通过互联网访问。如果没有 SSL 证书,则可以使用 Azure application代理服务为 ServiceDesk Plus 实例设置代理 URL。要设置 Azure 代理服务,请按照此链接中的说明进行操作。
要设置 Microsoft Teams 集成,您需要在 ServiceDesk Plus 的集成设置、Microsoft Teams 桌面版或 Web 应用以及 Azure 门户中进行操作。请确保您可以使用以下角色访问所有这些区域:
ServiceDesk Plus SDAdmin
Azure 全局管理员/Teams 管理员以及 Azure application管理员
现在,既然所有先决条件都已满足,您可以在 Microsoft Teams 和 Azure 门户中进行设置。
导航到 MS Teams 中的 Developer Portal。要找到 Developer Portal 应用,请单击左侧窗格中的“应用”,然后搜索/选择 Developer Portal。

在 Developer Portal 中,导航到 Apps 选项卡并选择 Import app。下载此 ServiceDesk Plus zip 文件并导入此应用。

导入后,您将被重定向到应用配置页面。在那里,将显示该应用可用的功能,例如 Personal Tab 或 Bot。
Personal Tab:此个人选项卡可用于在 Microsoft Teams 应用中查看 ServiceDesk Plus 中的打开请求。要设置该选项卡,请选择 Choose App features > 选择 Personal app > Create your first personal app tab。

选择后,填写您的 ServiceDesk Plus 实例详细信息。提供一个名称。在 Content URL 下,按以下格式提供 URL:
<SDP_HOSTED_URL>/WOListView.do?externalframe=true
例如,如果您托管的域名是 https://servicedeskplus.com,则 Content URL 将为:https://servicedeskplus.com/WOListView.do?externalframe=true
在 Website URL 下,按以下格式提供 URL:
<SDP_HOSTED_URL>/WOListView.do
将范围选择为“personal”,并在 Context 下选择“personalTab”。

同样地,要将个人应用添加到主页(适用于 14700 及以上版本),
<SDP_HOSTED_URL>/HomePage.do?externalframe=true
<SDP_HOSTED_URL>/HomePage.do
完成所有设置后,点击 Confirm,然后选择 Save。
现在您已完成个人应用设置,可以为此集成设置机器人。为此,请转到 App features 并选择 Bot。点击 Create a new Bot。

现在,点击顶部的 +New Bot。为机器人提供一个名称(例如“ServiceDesk Plus Bot”)。此名称将显示在机器人聊天窗口中。

现在机器人已创建,您可以继续在 Azure portal 中进行设置,以进一步配置该机器人。
创建机器人后,您需要指定其权限及其他各种配置。为此,请转到 Azure 门户中的 应用注册,并选择您在上一步中创建的机器人。
在这里的 Overview 部分,将显示该机器人(应用注册)的各种详细信息。请记录下来。
复制 Application (Client) ID 和 Tenant (Directory) ID,并将其保存在文档中。后续集成时会用到它们。

现在,在左侧窗格中,转到 Certificates and Secrets,然后点击 +New Client Secret。复制该 Secret 的 VALUE,而不是 Secret ID,并将其保存在文档中。

现在,在左侧窗格中,转到 API permissions,点击 +Add a permission > Microsoft Graph > Delegated Permissions,然后选择“openid”。

您现已完成机器人/应用注册的基本配置。接下来该在 ServiceDesk Plus 中配置详细信息了。
在 ServiceDesk Plus 中,转到 Admin > Integrations > Third Party > Microsoft Teams。
指定 Application ID、Client ID 和 Application Password。

在 Application ID 字段中,粘贴 Application (Client) ID 值。在 Tenant ID 字段中,粘贴 Tenant (directory) ID 值。在 Application Password 中,填写在 Azure 中生成的客户端密钥的 VALUE。
当这三项都填写完成后,点击 Save。保存后,系统将为您提供 Redirect URL 和 Bot Endpoint URL。
这三个application中的基本配置均已成功完成。现在是时候指定重定向 URL 和机器人终结点 URL 了。
复制重定向 URL:
复制重定向 URL,前往 Azure 门户,选择你的机器人/应用注册。在左侧窗格中,导航到身份验证选项卡。

单击+ 添加平台 > Web > 在重定向 URI 下,粘贴从 ServiceDesk Plus 复制的重定向 URL。勾选底部的 ID 令牌复选框,然后单击配置。

复制机器人终结点 URL,前往 Microsoft Teams > 开发人员门户 > 工具选项卡 > 机器人管理 > 选择你的机器人 > 配置 > 粘贴从 ServiceDesk Plus 复制的机器人终结点 URL。完成后,单击保存。


现在重定向 URL 和机器人终结点 URL 都已指定,此机器人必须与开头导入的应用相关联。
为此,
前往开发人员门户中的应用选项卡,选择已导入的应用。在左侧窗格中单击应用功能,然后选择“机器人”。
现在选择“输入机器人 ID”,并将从 Azure 门户复制的application(客户端)ID 粘贴到此处。
现在在你的机器人可以做什么?部分下,选择上传和下载文件。在范围下,选择这三个选项(个人、团队和群聊)。
完成后单击保存。保存后,你将获得一个选项来添加在与机器人聊天时可用的自定义命令。要添加命令,只需单击“添加命令”并指定详细信息。这里的范围也可以选择全部三个。

消息扩展允许你直接从 Microsoft Teams 执行关键的 ServiceDesk Plus 操作,例如创建新请求、搜索服务台或使用快速创建选项。这有助于用户无需在application之间切换即可管理请求。
要进行配置,
在 Microsoft Teams 中,从 ServiceDesk Plus 应用左侧窗格进入应用功能。
选择消息扩展。
选择一个现有机器人。
选择你为此集成创建的机器人,然后单击保存。


此功能允许用户从 Teams 消息中立即创建新事件。它会根据消息内容自动填充主题,用户也可以根据需要添加描述。

对于更详细的请求,“创建新请求”扩展会在 Teams 中呈现完整的请求表单。用户可以填写所有必填字段、选择合适的模板,并提供完整的上下文信息,以确保工单被正确路由和处理。主题和请求者字段将自动填充。

使用 Search ServiceDesk,用户可以根据消息内容快速查找现有的类似请求。此扩展会解析消息,并在适用的情况下,在 Search ESM 页面中显示相关的事件、变更或项目。若不适用,则会在全局搜索中使用请求模块筛选器进行搜索。
非 ESM 设置

ESM 设置

在左侧面板中,转到 Publish to Store。滚动到底部并单击 Download app package。应用程序包 zip 文件将下载到您的计算机中。

下载完成后,在最左侧面板中单击 Apps。在 Apps 页面中,选择底部的 Manage your apps。单击Upload an app,然后选择Upload a customised app。选择上一步下载的应用程序包 zip 文件。


选择完成后,单击 Add 按钮。添加后,您将被重定向到该应用。首次访问聊天选项卡时会弹出登录卡片。如果没有出现登录卡片,请输入“/help”并等待几秒钟,登录卡片就会出现。按照屏幕上的说明完成授权。正确授权后,即可利用该机器人进行集成。

除了将应用作为自定义应用上传之外,还可以直接将其上传到组织。为此,请按照相同步骤上传应用,但这次不要选择“Upload a customised app”,而是选择“Upload an app to your org's app catalog”。当 Microsoft Teams 管理员为组织提供 ServiceDesk Plus 机器人后,每位组织用户都可以在机器人中授权 ServiceDesk Plus 并开始使用。
默认情况下,ServiceDesk Plus 包含一组可从 Microsoft Teams 调用的默认命令。您可以创建更多自定义命令,并使用 ServiceDesk Plus 机器人直接在 Microsoft Teams 中执行任何操作。
ServiceDesk Plus 中的默认命令列表:
命令 | 说明 |
/help | 显示帮助卡片,其中包含适用于当前登录用户的命令 |
/create request | 仅通过提供主题和说明即可快速创建请求 |
/view all requests | 列出用户的所有请求 |
/view open requests | 列出用户的所有打开请求 |
/search request | 使用关键字搜索请求(将在请求主题中查找这些关键字) |
/pending approvals | 列出用户所有待审批项(用户可在相应请求卡片中执行审批操作) |
/overview | 显示待审批项和打开请求的汇总视图 |
/select instance | 列出供用户选择的门户 |
/revoke | 撤销 Teams 帐户中的 ServiceDesk Plus 授权 |
/chat(仅请求人) | 发起与技术人员的聊天 |
/end chat(仅请求人) | 结束与技术人员的聊天 |
在 Microsoft Teams 配置 页面中,转到机器人命令选项卡。
单击自定义命令。
输入命令的名称。
在描述中概述该命令的功能。
配置执行该命令时要执行的操作。您可以将全局函数关联为操作,或使用新建选项创建全局函数。
单击创建命令。
已创建的命令会立即在 Microsoft Teams 中生效。使用
图标可禁用某个命令,以防止用户使用它。如有需要,您也可以稍后重新启用。

编辑/删除自定义命令
单击命令名称可修改命令详细信息。使用更新保存更改。您可以使用
图标删除该命令。
您可以使用全局函数,通过发起相应命令来创建将在 Microsoft Teams 中显示的卡片。
创建用于添加服务请求的卡片
定义卡片布局:
test='{"attachments":[{"contentType":"application/vnd.microsoft.card.adaptive","contention":"1.2"}}],"action":"sendActivity","type":"message"}'; t=Map(); t=test.toMap(); return t; |
卡片 JSON 示例

定义操作按钮:
data = Collection(); data.insert("requester":{"id":metadata.get("user_id")}); data.insert("subject":metadata.get("subject")); data.insert("description":metadata.get("description")); input_data = {"request":data}; response = invokeurl [ url:"https://zylker-sdpclient.mssapp.net/api/v3/requests" type :POST parameters:{"input_data":input_data,"TECHNICIAN_KEY":"39C1A638-191E-4997-9CEF-10A8S220F227"} ]; info response; id=response.get("request").get("id"); responseStatus = response.get("response_status"); returnObj = Collection(); if(responseStatus.get("status_code") == 2000) { returnObj.insert("action":"sendActivity","type":"message","text":"已成功添加,ID 为 "+id); } else { returnObj.insert("action":"sendActivity","type":"message","text":"添加失败"); } return returnObj; |
使用参数创建服务请求
data = Collection(); data.insert("requester":{"id":metadata.get("user_id")}); data.insert("subject":metadata.get("argument1")); data.insert("description":metadata.get("argument2"));
input_data = {"request":data}; response = invokeurl [ url :"https://zylker-sdpclient.msapp.net/api/v3/requests" type :POST parameters: {"input_data":input_data,"TECHNICIAN_KEY":"B7A223B1-8ED6-4630-B4C1-C1BEEDB64C28"} ]; info response; id=response.get("request").get("id"); responseStatus = response.get("response_status"); returnObj = Collection(); if(responseStatus.get("status_code") == 2000) { returnObj.insert("action":"sendActivity","type":"message","text":"已成功添加,ID 为 "+id); } else { returnObj.insert("action":"sendActivity","type":"message","text":"添加失败"); } return returnObj; |
在 Microsoft Teams 机器人中调用该参数后,服务请求将被添加到 ServiceDesk Plus 中。

创建卡片以添加变更请求
定义卡片布局:

test='{"attachments":[{"contentType":"application/vnd.microsoft.card.adaptive","content":{"$schema":"http://adaptivecards.io/schemas/adaptivedata":{"action":"cancel"},"style":"destructive","type":"Action.Submit","title":"Cancel"}],"version":"1.2"}}],"action":"sendActivity","type":"message"} t=Map(); t=test.toMap(); return t; |
示例卡片 JSON
创建的卡片将如下所示:

定义操作按钮:
data = Collection(); data.insert("description":metadata.get("description")); data.insert("title":metadata.get("title")); input_data = {"change":data}; response = invokeurl [ url:"https://zylker-sdpclient.msapp.net/api/v3/changes" type :POST parameters:{"input_data":input_data,"TECHNICIAN_KEY":"832B0BCFC-A812-2D3B-A126-C536551DA3768"} ]; info response; id=response.get("change").get("id"); responseStatus = response.get("response_status"); returnObj = Collection(); if(responseStatus.get("status_code") == 2000) { returnObj.insert("action":"sendActivity","type":"message","text":"已成功添加,ID 为 "+id); } else { returnObj.insert("action":"sendActivity","type":"message","text":"添加失败"); } return returnObj; |
创建用于添加请求任务的卡片
定义卡片布局:

test='{"attachments":[{"contentType":"application/vnd.microsoft.card.adaptive","content":{"$schema":"htn":"sendActivity","type":"message"}'; t=Map(); t=test.toMap(); return t; |
示例卡片 JSON

定义操作按钮:
data = Collection(); data.insert("description":metadata.get("description")); data.insert("title":metadata.get("title")); data.insert("status":{"name":"Open"}); request_id=metadata.get("request_id"); input_data = {"task":data}; info input_data; response = invokeurl [ url:"https://zylker-sdpclient.msapp.net/api/v3/requests/"+request_id+"/tasks" type :POST parameters:{"input_data":input_data,"TECHNICIAN_KEY":"67B0BCFC-A812-4D3B-A126-C86111DA3768"} ]; info response; id=response.get("task").get("request").get("id"); responseStatus = response.get("response_status"); returnObj = Collection(); if(responseStatus.get("messages").get(0).get("status_code") == 200) { returnObj.insert("action":"sendActivity","type":"message","text": "新任务已成功添加到 Id "+id); } else { returnObj.insert("action":"sendActivity","type":"message","text":"添加失败"); } return returnObj; |
单击卡片中的 Create Task 按钮后,将在 ServiceDesk Plus 中为指定请求添加任务。系统会返回一条成功消息以及对应的 ID。
将机器人添加到团队后,ServiceDesk Plus 将能够访问该团队中的频道。
您可以将 ServiceDesk Plus 中的各个支持组映射到相应的团队频道。当请求被分配给某个支持组时,机器人会向相应频道触发通知。
您可以使用快速创建功能,在 Microsoft Teams 内部直接在 ServiceDesk Plus 中创建请求。此功能的工作方式与 ServiceDesk Plus 中的快速创建功能相同。
要使用此功能创建请求,
执行命令 /create request。
[或者]
执行命令 /overview 并单击 Quick Create。
输入请求的主题和描述,然后单击 Create Request。单击 Cancel 可中止该过程。


快速创建选项使用默认请求模板来创建请求。如果默认模板包含必填字段,您可以使用以下查询在数据库中更新为一个不含任何必填字段的请求模板:
这里的 <template_name> 是要更新的模板名称。
您可以在 teams 应用中直接对 ServiceDesk Plus 中的请求或变更执行批准/拒绝操作。为此,
在聊天窗口中执行 /pending approvals 命令。这将以单独卡片的形式显示您所有待处理的审批。
添加相关备注,并对每个审批执行所需操作。

用户可以在 Microsoft Teams 中 ServiceDesk Plus 应用的请求视图选项卡下跟踪他们的服务台工单。

.png)
要将 Microsoft Teams 中现有的 ServiceDesk Plus 应用更新到最新版本,
图标,然后选择开发者门户。

转到左侧窗格中的应用功能页面。

转到左侧面板中的应用包页面。

前往 admin.teams.microsoft.com


要更新集成中的任何配置,请进行更改并单击 更新。
要在保留配置的同时禁用集成,请取消选中集成页面顶部显示的 启用 Microsoft Teams。
要完全删除集成,请单击页面底部显示的 删除。请注意,如果删除集成,所有配置都将被删除且无法恢复。

(迁移到 15110 后,以下 AI 功能将可用,并由 ChatGPT 提供支持,同时还需要启用该集成)
1.为用户查询推荐解决方案:用户现在可以使用自然语言向机器人发送任何查询,机器人将利用 AI 将这些查询与 ServiceDesk Plus 中可用的解决方案进行交叉匹配。如果找到匹配项,机器人将向用户显示相应解决方案的详细信息。
例如,如果用户查询为“存在网络问题”,并且 ServiceDesk Plus 中有一个标题为“WiFi 故障排除”的解决方案,则该解决方案将作为对用户查询的响应返回
2.推荐相关机器人命令:现在会分析用户的自然语言输入,如果没有相关解决方案,则会向用户返回与该查询最匹配的机器人命令,并且该命令可点击。
例如,如果用户输入“笔记本电脑不断重启”,而 ServiceDesk Plus 中没有任何匹配的解决方案,则会向用户显示机器人命令“/create request”。他们可以单击此命令以启动所需操作。
3.请求摘要:用户在 Microsoft Teams 中查看请求详情时,可以对其请求进行摘要。请求详情卡片将提供一个“使用 AI 生成摘要”按钮,点击后会生成该请求的简明摘要。
4.向 AI 寻求解决方案:在创建请求之前,请求创建卡片将提供一个“向 AI 寻求解决方案”按钮。该按钮会将请求主题作为输入,并展示与该请求主题相关的一些解决方案或变通办法。
使用模板创建请求:用户可以在请求创建卡片出现之前,从下拉菜单中选择自己偏好的模板来创建请求。
查看公告:用户可以通过 MS Teams 中的 “/announcements” 机器人命令查看当前有效的公告。系统会向用户显示一个包含最新 10 条公告的轮播。
搜索解决方案:用户可以在 Microsoft Teams 中搜索 ServiceDesk Plus 中提供的解决方案。标题匹配的解决方案将以轮播形式显示,供用户查看。
将技术人员分配给请求:技术人员在查看所有请求或打开状态的请求详情时,可以直接通过 Microsoft Teams 为请求分配技术人员。
Microsoft Teams 中的消息扩展使用户能够直接在 Teams 对话中执行 ServiceDesk Plus 操作。
技术人员和终端用户无需切换到 ServiceDesk Plus 界面,即可创建新请求,或搜索并共享现有请求。
ServiceDesk Plus 在 Teams 中提供以下消息扩展:
快速创建:直接从 Teams 消息中记录新的事件。消息内容会自动捕获为请求主题,用户也可以根据需要添加描述。

创建新请求:在 Microsoft Teams 中打开完整的请求表单,允许用户提交详细请求。用户可以填写所有必填字段、选择模板,并添加相关详细信息,以确保工单被准确创建和路由。

搜索 ServiceDesk:根据对话内容快速查找类似请求。此扩展会分析消息内容,并显示相关的事件、更改或项目。

(适用于非 ESM 设置)

(适用于 ESM 设置)
用户可以通过此集成直接在 Microsoft Teams 中与其技术人员/请求者聊天。要结束聊天,请使用“/end chat”命令。这将结束从 Microsoft Teams 发起的聊天。
如果用户没有“上传自定义应用”的选项,请前往 MS Teams 管理中心的设置策略。选择您的组织,并确保“上传自定义应用”滑块已打开。

上传应用后,如果该应用持续从 MS Teams 中消失,请前往 MS Teams 管理中心的权限策略。选择您的组织,并确保已允许自定义应用和第三方应用。

如果在输入“/help”消息后机器人仍未返回登录卡片,请前往 Developer Portal 并进入 Apps 选项卡。选择已创建的 ServiceDesk Plus 应用。现在,如果左上角显示的应用图标不是 ServiceDesk Plus 的图标,而是其他内容,则说明 Microsoft 未正确解析该应用。请联系技术支持以修复应用清单。下方是应用解析不正确的示例截图。

在个人请求列表视图选项卡中,如果页面无法加载或登录失败,请确保 ServiceDesk Plus 实例正在通过 https 运行。这是主要前提条件之一。
如果请求列表视图选项卡仍然无法加载,请检查安全设置中是否存在额外的标头。如果实例包含“X-Frame-Options”标头,则会导致渲染失败。请再添加一个“Content-Security-Policy”标头,并将其值设置为 'frame-ancestors 'self' <servicedesk-domain> teams.microsoft.com',以按下图所示修复此问题。例如,如果您的域名是 https://demo.servicedeskplus.com,则 CSP 标头应为 frame-ancestors 'self' demo.servicedeskplus.com teams.microsoft.com。此变通方法仅适用于 Microsoft Teams Web 应用,不适用于 Microsoft Teams 桌面应用。如果仍然无效,请联系技术支持。
