Zend亚博esk API通常用于将用户从其他系统导入Zendesk实例。本文给出了一个如何使用Zendesk API导入用户的示例。亚博它假设用户数据从第三方应用程序(如QuickBooks)导出到Excel工作表。

如果用户数据存储在具有自己API的应用程序中,则可以同时使用这两个API来传输数据,而不必先将其导出为工作表或JSON等其他格式。

本文使用Python,这是一种功能强大但对初学者友好的编程语言,语法清晰易读。如果您使用另一种语言工作,您应该仍然能够遵循代码逻辑并使其适应您的脚本。所有语言的逻辑都是相似的。

免责声明: 亚博Zendesk提供本文仅用于教学目的。亚博Zendesk不支持或保证该代码。亚博Zendesk也不能提供对第三方技术的支持,比如Python。

决定导入用户

在很多情况下,你不需要做任何事情就可以将用户导入Zendesk。亚博Zendesk中的大多数用户帐户是在客户第一亚博次提交票据时自动创建的。

要决定是否需要导入用户,请查看Zendesk实例是如何设置的。亚博Ze亚博ndesk实例可以设置为对所有用户开放,限制为具有特定电子邮件域的一组用户,或者对除您指定的用户外的所有用户关闭。

  • 如果你有开放Zen亚博desk实例,则不需要导入用户。该网站对公众开放。当用户第一次提交票据时,会在Zendesk中创建一个新的用户帐户。亚博

  • 如果你有受限Zendesk实例亚博,只有电子邮件地址在批准的电子邮件域的用户才能提交门票,您也不需要导入用户。当来自已批准的电子邮件域的用户第一次提交票据时,Zendesk会自动创建一个新用户帐户。亚博

  • 如果你有封闭Zende亚博sk实例,只有您添加的用户才能登录并提交门票。一个典型的例子是IT支持部门。

即使你有一个封闭的Zendesk实例,你也不需要使用亚博API来导入用户。你可以在Zendesk管理界面中使用批量用户导入功能。亚博看到批量导入用户和组织.每个选择都有其优点和缺点。例如,API每个请求最多接受100个用户,而批量导入功能一次最多接受2000个用户。然而,批量导入功能不能导入API可以导入的某些数据,比如用户的时区、照片和语言首选项。

用户API基础

中的以下端点用户API允许您一次导入多个用户:

POST / api / v2 /用户/ create_many.json

它为每个请求创建最多100个用户。

有些系统可能有不止一种识别用户的方法。可能的用户身份包括辅助电子邮件地址、Twitter句柄或电话号码。若要创建具有多个用户身份的用户,请参见创建多个身份的用户

在开始使用此API导入用户之前,请确保在Zendesk中配置您的帐户设置,以便在导入用户时获得您想要的结果。亚博例如,是否希望向新用户自动发送欢迎电子邮件?看到向您添加的用户发送电子邮件验证消息

将您的用户数据映射到Zendesk用户数据亚博

首先将用户属性映射到Zendesk亚博用户属性.例如,可以将您的姓名和电子邮件属性映射到的名字而且电子邮件Zendesk中的属性。亚博还可以将自定义数据映射到user_fields属性在Zendesk。亚博看到向用户添加自定义字段

读取用户数据

本文假设用户数据已导出到Excel工作表。你可以下载users_list.xlsx示例文件,以测试本文中的脚本。

在导入工作表中的用户数据之前,首先必须读取它。

假设你想从工作表中导入以下用户属性:

  • 的名字
  • 电子邮件
  • 会员级别(用户可以是金、银或铜会员)

在Zendesk中将这些属性映射到以下用户属性:亚博

  • 的名字
  • 电子邮件
  • user_fields,以容纳“会员级别”字段

若要包含“会员级别”字段,您或组织中的管理员应创建一个自定义用户字段Zen亚博desk。指定member_level作为字段键。看到向用户添加自定义字段

假设列中包含姓名、电子邮件和会员级别CD,F分别在Excel工作表中。对于脚本,将Excel列的位置从字母转换为索引号,这在脚本中更容易处理。因为索引通常以0开头,所以CD,F列对应于列索引23.,5

  • 的名字=指数2
  • 电子邮件=指数3
  • user_fields=指数5

假设Excel文件已命名users_list.xlsx并且它位于与Python文件相同的文件夹中,您可以使用以下Python脚本读取工作表的数据:

             
openpyxl进口load_workbook用户工作簿load_workbook文件名“users_list.xlsx”工作簿“Sheet1”如果= =列表0#跳过第一行继续如果2价值在Zendesk中需要一个名称亚博用户附加“名字”2价值“电子邮件”3.价值“user_fields”“member_level”5价值用户用户打印用户

脚本读取工作表中的用户数据,并将数据重新打包为列表中的用户变量。

试试吧

  1. 下载并安装最新版本的Python。

  2. 在新的项目文件夹中创建一个Python文件,并将其命名为任何您喜欢的名称。这个名字import_users.py是一个可靠的选择。

  3. 将脚本粘贴到文件中并保存。

  4. 下载users_list.xlsx样例文件,并将其放在与Python文件相同的文件夹中。

  5. 安装OpenPyXL库,脚本使用它来处理Excel工作簿。要安装它,在命令行界面的提示符处运行以下命令:

                   
    皮普安装openpyxl

    皮普是Python中包含的用于安装和管理Python包的实用程序。

  6. 执行如下命令运行脚本:

                   
    python3 import_users.py

    在命令行界面中,确保在运行脚本之前导航到包含Python文件的文件夹。

    该脚本应该从Excel文件中读取用户并将其打印到控制台。例子:

                   
    “名字”“乔恩·海沃德”“电子邮件”(电子邮件保护)“user_fields”“member_level”“黄金”“名字”“苏琼斯”“电子邮件”(电子邮件保护)“user_fields”“member_level”“青铜”“名字”“本·克拉克森”“电子邮件”(电子邮件保护)“user_fields”“member_level”“银”

它是如何工作的

代码将工作簿中的值提取到与API期望的JSON格式匹配的数据结构中。根据医生的说法创建多个用户端点需要一个用户对象列表(或字典在Python中)命名为“users”:

脚本首先创建一个变量来存储列表:

             
用户

接下来,它使用OpenPyXL库将工作表加载到内存中:

             
工作簿load_workbook文件名“users_list.xlsx”工作簿“Sheet1”

然后,脚本遍历工作表中的每一行以收集数据:

             
#收集用户数据

每次迭代执行几次检查。第一个检查查找工作表中索引0处的第一行并跳过它,因为它由列标题组成。

             
如果= =列表0#跳过第一行继续

第二个检查确保行指定了用户名:

             
如果2价值#收集用户数据

在Zendesk中创建用户需要一个名称。亚博如果指定了名称,脚本只收集行的用户数据。否则,脚本将忽略该行并移动到下一行。

接下来,脚本将列2、3和5中的值赋给一个新字典,然后将该字典追加到用户列表:

             
用户附加“名字”2价值“电子邮件”3.价值“user_fields”“member_level”5价值

行[我]。value属性返回指定列索引(在本例中为索引2、3和5)处的单元格的值。

请注意:如果Excel工作表中的一列或多列由数字id组成,openpyxl将它们作为浮点数读取,并向它们添加一个尾随0(1.0,2.0,3.0)。(Excel将所有数字都视为浮点数。)方法将这些值转换回整数int ()方法。例子:

             
“external_id”int2价值

遍历工作表中的所有行之后,用户变量包含每个用户的名称、电子邮件和会员级别。结尾代码段将数据打印到控制台,以便您可以检查它是否工作:

             
用户用户打印用户

当您完成测试时,删除这两行。

使用API导入用户

用户变量现在应该包含要用API导入Zendesk的用户列表。亚博

用添加的高亮显示行更新脚本,将用户导入Zendesk:亚博

             
进口时间openpyxl进口load_workbook进口请求#获取XLSX文件中的用户用户工作簿load_workbook文件名“users_list.xlsx”工作簿“Sheet1”如果= =列表0#跳过第一行继续如果2价值在Zendesk中需要一个名称亚博用户附加“名字”2价值“电子邮件”3.价值“user_fields”“member_level”5价值#准备API请求身份验证“{your_zd_email}”“{your_zd_password}”“内容类型”“application / json”url“https:// {your_subdomain}亚博 .zendesk.com/api/v2/users/create_many.json”#将用户列表分成100个批次batch_sizeOne hundred.num_userslen用户开始0开始范围0num_usersbatch_size停止开始+batch_size批处理用户开始停止#获取下一批100个用户#发布批到Zendesk亚博数据“用户”批处理响应请求帖子urljson数据身份验证身份验证如果响应status_code= =429打印“达到了利率上限。请稍等。”时间睡眠int响应“retry-after”响应请求帖子urljson数据身份验证身份验证如果响应status_code! =200打印f导入状态失败响应status_code退出打印“\ nImport做。”

取代{your_zd_email}{your_zd_password},{your_subdomain}你的值占位符。出于安全原因,仅在准备运行脚本时输入密码。完成后删除它。

它是如何工作的

脚本首先导入请求库,用于发出HTTP请求的第三方Python库。

要在您的计算机上安装库,在命令行上运行以下命令:

             
皮普安装请求

它还导入时间库,这是一个本地Python库,以处理可能的速率限制。

接下来,代码创建API请求中使用的变量,例如身份验证信息、内容类型标头和API端点的url。详细信息请参见创建多个用户在API参考中。

Create Many Users端点一次只接受最多100个用户,因此脚本设置了一个循环,将用户列表切片为100个批量:

             
batch_sizeOne hundred.num_userslen用户开始0开始范围0num_usersbatch_size停止开始+batch_size批处理用户开始停止#获取用户切片

循环更新停止而且开始的计数器用户(启动,停止)片的表情。以下是开始而且停止前三次迭代的值:

             
批处理用户0One hundred.批处理用户One hundred.200批处理用户200300

在第一次迭代中,0表示从列表中的第一个元素开始切片。100表示在第100个元素处停止切片,但不包含它。

接下来,脚本使用API将100个用户的切片导入Zendesk:亚博

             
数据“用户”批处理响应请求帖子urljson数据身份验证身份验证如果响应status_code= =429打印“达到了利率上限。请稍等。”时间睡眠int响应“retry-after”响应请求帖子urljson数据身份验证身份验证如果响应status_code! =200打印f导入状态失败响应status_code退出

该脚本还检查以确保未达到速率限制。当响应返回429状态码时,达到了限制。方法指定的秒数为脚本暂停的时间retry-after头。时间过期后,脚本再次尝试请求。

在将第一批用户导入Zendesk后,脚本循环获取下一批用户并导入它们。亚博

代码完成

请随意更改和改编脚本,以了解更多关于它是如何工作的。例如,创建另一个示例xlsx文件,其中包括其他用户字段,然后导入数据。或者,不是从Excel工作表获取用户,而是改编脚本,从真实或虚构的API获取用户。

注意,该脚本仅用于教学目的,不应该在生产环境中使用。