在本教程中,您将创建一个使用子的链接。ZIS链接存储两个数据对象之间的关系。在本教程中,您将链接Zendesk票证id到Slack消息id亚博。

您创建的集成将监听票了创建票务评论事件在Zendesk亚博。当集成检测到这些事件之一时,它将运行一个ZIS流。流检查事件票证id和Slack消息id之间的任何现有ZIS链接。如果存在链接,则流程将向该票据的现有Slack消息线程发布回复。如果不存在链接,则流程为票据发布一条新的Slack消息。然后,流在票据id和Slack消息id之间创建一个ZIS链接。

你需要什么?

要完成本教程,您需要以下内容:

设置Slack应用程序

集成的ZIS流使用Slack API发布消息和回复。要使用该API,首先需要创建一个Slack应用程序。该应用程序包含一个OAuth客户端。在本教程中,您将创建一个名为Zendesk Ticket Bot的Slack应用程序。亚博

要创建Slack应用程序,请完成以下部分中的步骤:

然后回到这里。

将Slack应用程序添加到频道

接下来,邀请Slack应用到你的Slack工作区中的一个频道。这允许您的集成向通道发布消息。

  1. 在Slack中,打开你的工作区。

  2. 去一个Slack频道,在那里你想接收来自集成的消息。在通道中,在消息字段中输入以下内容:

                   
    /邀请@亚博机器人
  3. 按回车。

    根据您的Slack设置,该通道可能会显示成功消息。

为Slack创建OAuth连接

创建一个名为“slack”的OAuth连接。集成的ZIS流使用此连接对Slack API请求进行身份验证。

在典型的设置中,管理员使用私有Zendesk应用程序创建OAuth连接。亚博在本教程中,您将在没有Zendesk应用程序的情况下创建连接。亚博

  1. 在ZIS中注册Slack OAuth客户端。将客户端命名为“slack”。要注册客户端,请按照下面的步骤操作注册OAuth客户端,从步骤2开始。使用Slack的示例请求。

  2. 为Slack创建一个OAuth连接。将连接命名为“slack”。按照下面的步骤创建连接启动授权代码流在OAuth连接文档中。然后回到这里。

创建集成

接下来,创建ZIS集成。

  1. 创建一个JSON文件my_zis_bundle.json

  2. 将以下包骨架添加到my_zis_bundle.json

                   
    “名称”“与ZIS链接集成示例”“描述”“更新机票时发布Slack消息”“zis_template_version”“2019-10-14”“亚博电脑端资源”“PostToSlack”“_placeholder_”"ZIS自定义动作定义在这里"“TicketUpdateFlow”“_placeholder_”“ZIS流到这里”“TicketCreatedJobSpec”“_placeholder_”“ZIS的工作说明书在这里”“CommentAddedJobSpec”“_placeholder_”“ZIS的工作说明书在这里”

    在接下来的步骤中,您将定义自定义操作、ZIS流和作业规范。

  3. my_zis_bundle.json,替换PostToSlack具有以下自定义操作定义的占位符。在定义中,将“SLACK_CHANNEL”替换为您选择的Slack通道将Slack应用程序添加到频道

                   
    “PostToSlack”“类型”“子::行动::Http”“属性”“名称”“PostToSlack”“定义”“方法”“职位”“url”“https://slack.com/api/chat.postMessage”“connectionName”“松弛”“头”“关键”“内容类型”“价值”“application / json”“requestBody”“通道”“SLACK_CHANNEL”“美元文本。”" $。“thread_ts美元。”“.thread_ts美元”

    当调用时,自定义动作向Slack API发送POST请求chat.postMessage端点。请求体包含一个Slack通道、消息文本和消息id。

  4. 取代TicketUpdateFlow占位符,具有以下ZIS流定义。在定义中,将“INTEGRATION”替换为您的集成键。

    流包含两个Action状态,它们调用内置的ZIS链接操作。突出显示了这些操作状态。

                   
    “TicketUpdateFlow”“类型”“子:流”“属性”“名称”“TicketUpdateFlow”“定义”“StartAt”“GetLinkedMessage”“州”“GetLinkedMessage”“类型”“行动”“ActionName”“子:常见:行动:LoadLinks”“参数”“link_type”“ticket_to_message”“left_object_name美元。”“ticket_id: {{$ .input.ticket_event.ticket.id}}”“ResultPath”“.get_linked_message_response美元”“下一个”“CheckLink”“CheckLink”“类型”“选择”“选择”“变量”“.get_linked_message_response.count美元”“NumericEquals”0“下一个”“SendMessageOnTicketCreate”“变量”“.get_linked_message_response.count美元”“NumericEquals”1“下一个”“ExtractThreadId”“SendMessageOnTicketCreate”“类型”“行动”“ActionName”“子:集成:行动:PostToSlack”“参数”“美元文本。”:rotating_light: Ticket 已创建!”“thread_ts”0“ResultPath”“.send_message_response美元”“下一个”“创建”“ExtractThreadId”“类型”“行动”“ActionName”“子:常见的变换:金桥”“参数”“expr”".right_object.name | split(\":\")[1]"“数据。美元”" $ .get_linked_message_response.links[0]”“ResultPath”“.thread_id美元”“下一个”“ThreadMessageOnTicketUpdate”“ThreadMessageOnTicketUpdate”“类型”“行动”“ActionName”“子:集成:行动:PostToSlack”“参数”“美元文本。”“.input.ticket_event.comment.body美元”“thread_ts美元。”“.thread_id美元”“下一个”“完成”“创建”“类型”“行动”“ActionName”“子:常见:行动:创建”“参数”“link_type”“ticket_to_message”“left_object”美元”的名字。”“ticket_id: {{$ .input.ticket_event.ticket.id}}”“right_object”美元”的名字。”“thread_ts: {{$ .send_message_response.message.ts}}”“下一个”“完成”“完成”“类型”“成功”

    流的GetLinkedMessage动作状态调用内置的LoadLinks行动。状态加载事件票证id和Slack消息id之间的任何现有ZIS链接。以后的状态可以通过“$”访问动作的响应。get_linked_message_response”路径。

    创建动作状态调用内置的创建行动。状态在事件的票证id和相关的Slack消息id之间创建一个ZIS链接。只有当事件的票证id尚未链接到Slack消息id时,ZIS流才运行此状态。

  5. 取代TicketCreatedJobSpec具有以下职位说明定义的占位符。在定义中,将“INTEGRATION”替换为您的集成键。

                   
    “TicketCreatedJobSpec”“类型”“子::JobSpec”“属性”“名称”“TicketCreatedJobSpec”“event_source”“支持”“event_type””票。票Created"“flow_name”“子:集成:流:TicketUpdateFlow”

    作业规范告诉ZIS在检测到Ticket Created事件时运行ZIS流。

  6. 取代TicketCreatedJobSpec具有以下职位说明定义的占位符。在定义中,将“INTEGRATION”替换为您的集成键。

                   
    “CommentAddedJobSpec”“类型”“子::JobSpec”“属性”“名称”“CommentAddedJobSpec”“event_source”“支持”“event_type””票。CommentAdded”“flow_name”“子:集成:流:TicketUpdateFlow”

    作业规范告诉ZIS在检测到Comment Created事件时运行ZIS流。

  7. 保存my_zis_bundle.json。文件现在看起来应该是这样的:

                   
    “名称”“与ZIS链接集成示例”“描述”“更新机票时发布Slack消息”“zis_template_version”“2019-10-14”“亚博电脑端资源”“PostToSlack”“类型”“子::行动::Http”“属性”“名称”“PostToSlack”“定义”“方法”“职位”“url”“https://slack.com/api/chat.postMessage”“connectionName”“松弛”“头”“关键”“内容类型”“价值”“application / json”“requestBody”“通道”“SLACK_CHANNEL”“美元文本。”" $。“thread_ts美元。”“.thread_ts美元”“TicketUpdateFlow”“类型”“子:流”“属性”“名称”“TicketUpdateFlow”“定义”“StartAt”“GetLinkedMessage”“州”“GetLinkedMessage”“类型”“行动”“ActionName”“子:常见:行动:LoadLinks”“参数”“link_type”“ticket_to_message”“left_object_name美元。”“ticket_id: {{$ .input.ticket_event.ticket.id}}”“ResultPath”“.get_linked_message_response美元”“下一个”“CheckLink”“CheckLink”“类型”“选择”“选择”“变量”“.get_linked_message_response.count美元”“NumericEquals”0“下一个”“SendMessageOnTicketCreate”“变量”“.get_linked_message_response.count美元”“NumericEquals”1“下一个”“ExtractThreadId”“SendMessageOnTicketCreate”“类型”“行动”“ActionName”“子:集成:行动:PostToSlack”“参数”“美元文本。”:rotating_light: Ticket 已创建!”“thread_ts”0“ResultPath”“.send_message_response美元”“下一个”“创建”“ExtractThreadId”“类型”“行动”“ActionName”“子:常见的变换:金桥”“参数”“expr”".right_object.name | split(\":\")[1]"“数据。美元”" $ .get_linked_message_response.links[0]”“ResultPath”“.thread_id美元”“下一个”“ThreadMessageOnTicketUpdate”“ThreadMessageOnTicketUpdate”“类型”“行动”“ActionName”“子:集成:行动:PostToSlack”“参数”“美元文本。”“.input.ticket_event.comment.body美元”“thread_ts美元。”“.thread_id美元”“下一个”“完成”“创建”“类型”“行动”“ActionName”“子:常见:行动:创建”“参数”“link_type”“ticket_to_message”“left_object”美元”的名字。”“ticket_id: {{$ .input.ticket_event.ticket.id}}”“right_object”美元”的名字。”“thread_ts: {{$ .send_message_response.message.ts}}”“下一个”“完成”“完成”“类型”“成功”“TicketCreatedJobSpec”“类型”“子::JobSpec”“属性”“名称”“TicketCreatedJobSpec”“event_source”“支持”“event_type””票。票Created"“flow_name”“子:集成:流:TicketUpdateFlow”“CommentAddedJobSpec”“类型”“子::JobSpec”“属性”“名称”“CommentAddedJobSpec”“event_source”“支持”“event_type””票。CommentAdded”“flow_name”“子:集成:流:TicketUpdateFlow”
  8. 将包上传到ZIS。

                   
    curl -X POST https://{subdomain}.亚博zendesk.com/api/services/zis/registry/{integration}/bundles \-u {email}:{password} \-H "Content-Type: application/json" \- d @my_zis_bundle.json
  9. 安装TicketCreatedJobSpec工作规范。

                   
    curl -X POST "https://{subdomain}.亚博zendesk.com/api/services/zis/registry/job_specs/install?job_spec_name=zis:{integration}:job_spec:TicketCreatedJobSpec" \密码- u {email}: {}
  10. 安装CommentAddedJobSpec工作规范。

                   
    curl -X POST "https://{subdomain}.亚博zendesk.com/api/services/zis/registry/job_specs/install?job_spec_name=zis:{integration}:job_spec:CommentAddedJobSpec" \密码- u {email}: {}

    现在已经启用了集成。

测试集成

要测试集成,请在Zendesk Support中创建一个新票证。亚博验证集成为票证发布新的Slack消息。然后用新的注释更新票据。验证集成是否向现有消息线程发布回复。

  1. 使用以下请求创建Zendesk支持工单。亚博

                   
    curl -X POST https://{subdomain}.亚博zendesk.com/api/v2/tickets.json \-u {email}:{password} \-H "Content-Type: application/json" \- d”{“票”:{“主题”:“我的打印机着火了!”“状态”:“解决”,"评论":{“身体”:“烟很鲜艳。”} '

    保存ticket.id值。您将在接下来的步骤中使用票证id。

  2. 查看你的Slack频道。通道应该包含您创建的票证的消息。消息应该包含一个用于票据注释的线程。

  3. 使用下面的请求用注释更新票证。将“{ticket_id}”替换为步骤1中保存的id。

                   
    curl -X PUT https://{subdomain}.亚博zendesk.com/api/v2/tickets/{ticket_id}.json \-u {email}:{password} \-H "Content-Type: application/json" \- d”{“票”:{“状态”:“解决”,"评论":{"body": "打印机不再着火了。谢谢!”“公共”:真的} '
  4. 检查步骤2中的Slack消息。消息线程现在应该包含带有步骤3中的评论的回复。

恭喜你!您已经创建了一个使用ZIS链接的集成。有关ZIS集成的另一个示例,请参阅亚博Zendesk应用程序作为管理界面教程系列。