使用Zendesk API导入用户亚博
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
作为字段键。看到向用户添加自定义字段.
假设列中包含姓名、电子邮件和会员级别C,D,F分别在Excel工作表中。对于脚本,将Excel列的位置从字母转换为索引号,这在脚本中更容易处理。因为索引通常以0开头,所以C,D,F列对应于列索引2,3.,5.
的名字
=指数2电子邮件
=指数3user_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].价值}
}
)
为用户在用户:
打印(用户)
脚本读取工作表中的用户数据,并将数据重新打包为列表中的用户变量。
试试吧
下载并安装最新版本的Python。
在新的项目文件夹中创建一个Python文件,并将其命名为任何您喜欢的名称。这个名字import_users.py是一个可靠的选择。
将脚本粘贴到文件中并保存。
下载users_list.xlsx样例文件,并将其放在与Python文件相同的文件夹中。
安装OpenPyXL库,脚本使用它来处理Excel工作簿。要安装它,在命令行界面的提示符处运行以下命令:
皮普安装openpyxl
皮普是Python中包含的用于安装和管理Python包的实用程序。
执行如下命令运行脚本:
python3 import_users.py
在命令行界面中,确保在运行脚本之前导航到包含Python文件的文件夹。
该脚本应该从Excel文件中读取用户并将其打印到控制台。例子:
它是如何工作的
代码将工作簿中的值提取到与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”:int(行[2].价值)
遍历工作表中的所有行之后,用户变量包含每个用户的名称、电子邮件和会员级别。结尾代码段将数据打印到控制台,以便您可以检查它是否工作:
为用户在用户:
打印(用户)
当您完成测试时,删除这两行。
使用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_size=One hundred.
num_users=len(用户)
开始=0
为开始在范围(0,num_users,batch_size):
停止=开始+batch_size
批处理=用户[开始:停止]#获取下一批100个用户
#发布批到Zendesk亚博
数据={“用户”:批处理}
响应=请求.帖子(url,json=数据,身份验证=身份验证,头=头)
如果响应.status_code= =429:
打印(“达到了利率上限。请稍等。”)
时间.睡眠(int(响应.头[“retry-after”]))
响应=请求.帖子(url,json=数据,身份验证=身份验证,头=头)
如果响应.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_size=One hundred.
num_users=len(用户)
开始=0
为开始在范围(0,num_users,batch_size):
停止=开始+batch_size
批处理=用户[开始:停止]#获取用户切片
循环更新停止
而且开始
的计数器用户(启动,停止)
片的表情。以下是开始
而且停止
前三次迭代的值:
批处理=用户[0:One hundred.]
批处理=用户[One hundred.:200]
批处理=用户[200:300]
在第一次迭代中,0表示从列表中的第一个元素开始切片。100表示在第100个元素处停止切片,但不包含它。
接下来,脚本使用API将100个用户的切片导入Zendesk:亚博
数据={“用户”:批处理}
响应=请求.帖子(url,json=数据,身份验证=身份验证,头=头)
如果响应.status_code= =429:
打印(“达到了利率上限。请稍等。”)
时间.睡眠(int(响应.头[“retry-after”]))
响应=请求.帖子(url,json=数据,身份验证=身份验证,头=头)
如果响应.status_code! =200:
打印(f导入状态失败{响应.status_code}')
退出()
该脚本还检查以确保未达到速率限制。当响应返回429状态码时,达到了限制。方法指定的秒数为脚本暂停的时间retry-after
头。时间过期后,脚本再次尝试请求。
在将第一批用户导入Zendesk后,脚本循环获取下一批用户并导入它们。亚博
代码完成
请随意更改和改编脚本,以了解更多关于它是如何工作的。例如,创建另一个示例xlsx文件,其中包括其他用户字段,然后导入数据。或者,不是从Excel工作表获取用户,而是改编脚本,从真实或虚构的API获取用户。
注意,该脚本仅用于教学目的,不应该在生产环境中使用。