创建通道的第一步是为通道构建集成服务。

一个集成服务是一个web应用程序,您构建连接Zendesk支持到客户寻求帮助的外部系统。亚博集成服务充当外部系统和Zendesk Support之间的控制中心。亚博这项服务帮助双方进行交流。

在本系列教程中,外部系统是一个Gather社区,它是Zendesk Support的一个独立产品。亚博在本文中,您将为新的社区频道创建集成服务。

主题:

这是从头开始构建渠道项目的第二部分:

免责声明: 亚博Zendesk提供本文仅用于演示和教学目的。本文中开发的通道不应用于生产环境。亚博Zendesk不提供开发渠道的支持。

设置web应用程序

为了简单起见,本教程中的集成服务使用,一个极简的Python web框架。要了解更多关于Bottle的工作原理,请参阅瓶文档.该框架包括一个本地web服务器,您可以使用它进行测试。

  1. 为项目创建一个文件夹。

    例子:

                   
    Mkdir -p projects/channel_tutorial

    避免在谷歌Drive或Microsoft OneDrive等共享网络路径下创建文件夹。Python解释器可能难以在这些路径中找到模块。

  2. 创建一个名为service.py在项目文件夹中。

  3. 将以下代码粘贴到文件中:

                   
    进口操作系统进口json进口urllib解析pathlib进口路径进口路线运行请求响应模板@route' / 'defshow_home返回'

    Zendesk支持社区频道的集成服务

    '亚博
    如果操作系统环境得到“环境”= =“生产”运行宿主“0.0.0.0”港口int操作系统环境得到“端口”5000其他的运行

    当浏览器请求url根地址('/')的页面时,路由返回HTML字符串。

    最后四行告诉应用程序如何基于它的位置运行。如果它不在Glitch生产环境中,应用程序将运行在Bottle的本地web服务器上。您将在Glitch中托管应用程序部署通道

  4. 保存文件。

  5. 在你的命令行界面,导航到你的项目文件夹,并使用Bottle的内置本地服务器运行web应用程序:

                   
    python3 service.py

    启动后,应用程序运行在http://localhost:8080

  6. 将以下url粘贴到浏览器或类似于Postman的API客户端中并运行它。

                   
    http//localhost: 8080/

    你也可以在命令行界面中运行curl请求:

                   
    旋度http//localhost: 8080/

    该页面应包含以下一行:

    Zendesk支持社区频道的集成服务亚博

  7. 按Ctrl+C停止Bottle服务器。

引导新的社区职位给支持代理

在设置好web应用程序之后,你可以开始添加API端点来将数据从社区传递到Zendesk Support,然后再返回。亚博

每隔两分钟左右,Zendesk就会向你的整合服务发亚博送一个HTTP请求,请求它从你的社区中提取任何新的帖子,并将它们转发给Zendesk。这些请求被称为把请求或者只是拉。

来自Zendesk的pull请求是HTTP请求亚博。这意味着您需要为服务构建一个API端点来接受、处理和响应这些请求。

在本节中,您将添加一个名为Pull New Posts的API端点来处理来自Zendesk的Pull请求。亚博稍后您将添加处理逻辑。

添加“拉新帖子”端点

将以下端点粘贴到service.py文件在您的项目文件夹,并保存文件。

             
@route“/渠道/社区/拉”方法“职位”defpull_new_posts#获取主题id元数据请求形式“元数据”元数据urllib解析结束元数据# url -解码JSON值元数据json加载元数据#将解码的JSON转换为dicttopic_id元数据“topic_id”# get开始时间start_time如果请求形式“状态”# url -解码JSON值状态urllib解析结束请求形式“状态”状态json加载状态#将解码的JSON转换为dictstart_time状态“start_time”#获得新的社区帖子new_posts社区get_new_poststopic_idstart_time如果“错误”new_posts打印new_posts“错误”“文本”其他的#发送新帖子到Zendesk亚博响应状态201响应“内容类型”“application / json”返回json转储new_posts

它是如何工作的

端点为对象定义路由/渠道/社区/拉url路径。来自Zendesk的Pull请求是PO亚博ST请求,因此端点指定它只接受POST请求:

             
@route“/渠道/社区/拉”方法“职位”

接下来,pull_new_posts ()函数定义端点采取的操作。

对象的主题id开始元数据参数来自Zendesk随请求发送的表单数据:亚博

             
元数据请求形式“元数据”元数据urllib解析结束元数据# url -解码JSON值元数据json加载元数据#将解码的JSON转换为dicttopic_id元数据“topic_id”

亚博Zendesk在pull请求中以表单数据的形式发送信息。您可以从Bottle框架中检索这些数据request.forms字典。例子:

             
元数据请求形式“元数据”

元数据参数是您自己的数据,您将在本教程后面的Zendesk中存储这些数据。亚博现在,您只需要知道将在这里存储您想要跟踪的社区主题的id。例子:

             
元数据“topic_id”“234567”

亚博Zendesk允许您在其基础设施中存储通道数据,只要数据是字符串化的。你最初的元数据parameter将是一个Python字典,用于指定团体主题id。要在Zendesk中保存它,亚博您需要将字典转换为JSON,然后对JSON进行url编码。为了从拉请求中恢复值,需要反转操作:对JSON进行url解码,然后将JSON转换为字典。

接下来,该函数确定用于检查新帖子的开始时间。如果还没有设置开始时间,它会先将其设置为空字符串:

             
start_time

如果已经设置了开始时间,则从状态参数来自Zendesk随请求发送的表单数据:亚博

             
如果请求形式“状态”# url -解码JSON值状态urllib解析结束请求形式“状态”状态json加载状态#将解码的JSON转换为dictstart_time状态“start_time”

就像元数据,状态参数是您自己定义的数据,您将在本教程的后面完成该操作。的状态属性就像一个便利贴,用于跟踪经常变化的数据。稍后,您将使用它存储开始时间,该时间可以在不同的拉请求之间更改。例子:

             
状态“start_time”2020 - 08 - 10 - t16:30:19.036629 + 00:00 '

你最初的状态parameter将是一个Python字典,指定一个datetime字符串。要将其保存在Zendesk中亚博,您需要将其转换为JSON,然后对JSON进行url编码。从拉请求中恢复值,函数url -解码JSON,然后将JSON转换为字典。

接下来,该函数将获取社区帖子的任务交给名为get_new_posts ()在一个叫做社区

             
new_posts社区get_new_poststopic_idstart_time

get_new_posts ()函数使用帮助中心API去拿邮件。你将在下一篇文章中定义模块和函数,但现在你只需要知道函数有两个参数:

  • topic_id-社区主题,客户添加帖子寻求帮助
  • start_time-开始寻找新职位的日期

如果帮助中心API请求不成功,端点将响应有关错误的信息:

             
如果“错误”new_posts打印new_posts“错误”“文本”

否则,端点在响应中将新帖子发送给Zendesk:亚博

             
其他的响应状态201响应“内容类型”“application / json”返回json转储new_posts

new_posts变量由external_亚博电脑端resources参数状态参数。start_time存储在Zendesk。亚博

就是这样。每隔两分钟左右,Zendesk就会向端点发送一个亚博pull请求,请求发送任何新的帖子。作为响应,端点获取新帖子并将它们发送到Zendesk。亚博当Zend亚博esk收到这些帖子时,它会为每一个帖子创建一张罚单,以便支持人员可以回答它们。

您将在稍后创建的集成清单亚博文件中告诉Zendesk端点创建通道清单

引导代理评论回到社区帖子

从您的整合服务接收到新的社区帖子后,Zendesk会将它们转换为供代理处理的票据。亚博

当Zendesk支持的代理向社区帖亚博子创建的票据添加评论时,Zendesk将该评论发送给您的集成服务,要求它将评论添加到原始帖子。这些请求被称为channelback请求

来自Zendesk的channelback请求是HTTP请求亚博。这意味着您必须为服务构建一个API端点来接受、处理和响应这些请求。

在本节中,您将添加一个名为Channelback Ticket Comment的API端点来处理来自Zendesk的Channelback请求。亚博稍后您将添加处理逻辑。

添加Channelback票据注释端点

将以下端点粘贴到service.py文件在您的项目文件夹,并保存文件。

             
@route' /渠道/社区/ channelback '方法“职位”defchannelback_ticket_comment#从channelback请求获取评论post_id请求形式“parent_id”评论请求形式“消息”#添加评论到原始的帖子external_id社区create_post_commentpost_id评论如果“错误”external_id响应状态500返回#发送注释id响应状态200响应“内容类型”“application / json”返回json转储external_id

它是如何工作的

端点为对象定义路由/ /社区/ channelback渠道url路径。来自Zendesk的Channelback请求是PO亚博ST请求,因此端点指定它只接受POST请求:

             
@route' /渠道/社区/ channelback '方法“职位”

channelback_ticket_comment ()函数为端点完成繁重的工作。它首先检索代理注释和在channelback请求中发送的post id:

             
defchannelback_ticket_commentpost_id请求形式“parent_id”评论请求形式“消息”

亚博Zendesk以表单数据的形式发送信息。您可以从Bottle框架中检索这些数据request.forms字典。

parent_id属性是原始社区帖子的id。亚博Zendesk从集成服务中的Pull New Posts端点接收id。您将在下一篇文章中构建的community模块中设置这个值。

消息属性包含代理的票据回复。

Channelback Ticket Comment端点将创建post注释的任务交给一个名为create_post_comment ()社区模块:

             
external_id社区create_post_commentpost_id评论

create_post_comment ()函数使用帮助中心API创建注释。您将在下一篇文章中定义模块和函数。

如果帮助中心API请求不成功,端点响应Zendesk channelback请求并返回500状态错误:亚博

             
如果“错误”external_id响应状态500返回

亚博Zendesk Support将500-599范围内的状态码识别为未能正确处理channelback请求,并通知Support代理。

如果注释被成功创建,该函数返回新注释的id,该id被赋值给external_id变量。端点在响应中发送值:

             
响应状态200响应“内容类型”“application / json”返回json转储external_id

来自Zendesk的channelback请求需要所创建资亚博源的唯一标识符——在本例中是注释id。看到响应格式

就是这样。当代理向从发布中创建的票据添加注释时,Zendesk将该注释在channelback请求中发送到您的端点。亚博端点接着将注释添加到原始社区帖子中,从而结束循环。

下一个部分:与社区联系