- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图在 ZenDesk 上批量编辑我个人宏的签名,唯一的方法是通过 API。所以我写了这个快速的 Python 脚本来尝试这样做:
import sys
import time
import logging
import requests
import re
start_time = time.time()
# Set up logging
logger = logging.getLogger()
log_handler = logging.StreamHandler(sys.stdout)
log_handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s - %(funcName)s - line %(lineno)d"))
log_handler.setLevel(logging.DEBUG)
logger.addHandler(log_handler)
logger.setLevel(logging.DEBUG)
def doTheGet(url, user, pwd):
response = requests.get(url, auth=(user + "/token", pwd))
if response.status_code != 200:
logger.error("Status: %s (%s) Problem with the request. Exiting. %f seconds elapsed" % (response.status_code, response.reason, time.time() - start_time))
exit()
data = response.json()
return data
def doThePut(url, updated_data, user, pwd):
response = requests.put(url, json="{'macro': {'actions': %r}}" % updated_data, headers={"Content-Type": "application/json"}, auth=(user + "/token", pwd))
if response.status_code != 200:
logger.error("Status: %s (%s) Problem with the request. Exiting. %f seconds elapsed" % (response.status_code, response.reason, time.time() - start_time))
exit()
data = response.json()
return data
def getMacros():
macros = {}
data = doTheGet("https://mydomain.zendesk.com/api/v2/macros.json", "me@mydomain.com", "111tokenZZZ")
def getMacros(macro_list, page, page_count):
if not page:
for macro in macro_list:
if macro["restriction"] and macro["active"]:
if macro["restriction"]["type"] == "User":
macros[macro["id"]] = macro["actions"]
else:
for macro in macro_list:
if macro["restriction"] and macro["active"]:
if macro["restriction"]["type"] == "User":
macros[macro["id"]] = macro["actions"]
page_count += 1
new_data = doTheGet(page, "me@mydomain.com", "111tokenZZZ")
new_macs = new_data["macros"]
new_next_page = new_data["next_page"]
getMacros(new_macs, new_next_page, page_count)
macs = data["macros"]
current_page = 1
next_page = data["next_page"]
getMacros(macs, next_page, current_page)
return macros
def updateMacros():
macros = getMacros()
regular = "RegEx to match signature to be replaced$" #since some macros already have the updated signature
for macro in macros:
for action in macros[macro]:
if action["field"] == "comment_value":
if re.search(regular, action["value"][1]):
ind = action["value"][1].rfind("\n")
action["value"][1] = action["value"][1][:ind] + "\nNew signature"
return macros
macs = updateMacros()
for mac in macs:
doThePut("https://mydomain.zendesk.com/api/v2/macros/%d.json" % (mac), macs[mac], "me@mydomain.com", "111tokenZZZ")
现在,一切都按预期运行,我没有收到任何错误。当我转到 ZenDesk 上的宏并按上次更新对它们进行排序时,我确实看到脚本做了一些事情,因为它们显示为今天上次更新。但是,它们没有任何变化。我确保我通过 发送的数据 已编辑(updateMacros
正在 完成其工作)。我确保请求发回 OK 响应。所以我正在发送更新的数据,返回 200 响应,但是 the response sent back向我展示了它们之前的宏,零变化。
我唯一想到的可能在某种程度上是错误的是我发送的数据的格式,或者类似的东西。但即便如此,我希望响应不会是 200,然后...
我在这里错过了什么?
最佳答案
看起来您正在对 PUT 请求中的 JSON 数据进行双重编码:
response = requests.put(url, json="{'macro': {'actions': %r}}" % updated_data, headers={"Content-Type": "application/json"}, auth=(user + "/token", pwd))
json 参数需要一个对象,然后将其尽职地编码为 JSON 并作为请求的主体发送;这只是一种方便;实现很简单,
if not data and json is not None:
# urllib3 requires a bytes-like body. Python 2's json.dumps
# provides this natively, but Python 3 gives a Unicode string.
content_type = 'application/json'
body = complexjson.dumps(json)
if not isinstance(body, bytes):
body = body.encode('utf-8')
(来源:https://github.com/kennethreitz/requests/blob/master/requests/models.py#L424)
由于值总是通过 json.dumps()
传递,如果您传递表示已编码 JSON 的字符串,它本身将被编码:
"{\'macro\': {\'actions\': [{\'field\': \'comment_value\', \'value\': [\'channel:all\', \'Spiffy New Sig that will Never Be Saved\']}]}}"
ZenDesk,在收到它不期望的 JSON 后,更新 updated_at
字段并且...不做任何其他事情。您可以通过传递一个空字符串来验证这一点 - 相同的结果。
请注意,您还依赖 Python 的 repr 格式来填充您的 JSON;这可能也是个坏主意。相反,让我们重建我们的宏对象并让请求对其进行编码:
response = requests.put(url, json={'macro': {'actions': updated_data}}, headers={"Content-Type": "application/json"}, auth=(user + "/token", pwd))
这应该符合您的预期。
关于python - 为什么我的 ZenDesk 宏正在更新,但实际上没有任何变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923106/
我想创建一张带有内联图像的工单,但无法通过它。我正在使用具有粘贴屏幕捕获图像的富文本,内容类似于 "
我正在使用 Zendesk_v2(使用 nuget 包上传)在 ASP.NET MVC5 中开发一个应用程序。我拥有子域 easynext.zendesk.com 的管理员权限。 这是我创建票证的代码
我正在尝试使用 Api token 连接到 ZenDesk,但我遇到了这个问题: { "error": "Couldn't authenticate you" } 我正在尝试使用 Basic
我正在尝试使用 Api token 连接到 ZenDesk,但我遇到了这个问题: { "error": "Couldn't authenticate you" } 我正在尝试使用 Basic
我正在使用最新的 Zendesk 产品。为了测试一些 javascript 小部件,我使用了沙箱,它将我带到旧式的 Zendesk。我将以下小部件放在一起,效果很好; $j(document).rea
您如何搜索 ZenDesk 中是否存在用户?我尝试了以下方法,其中 mydomain 是我公司的域: 例子: https://mydomain.zendesk.com/api/v2/users/sea
我正在尝试通过他们的 API 更新 Zendesk 中的票证并附上几条评论。显然,我似乎使用了错误的格式,因为评论没有出现在我的 Zendesk 仪表板中...... 我使用以下格式(JSON): {
有没有人使用过Zendesk SDK? 我正在考虑使用它,因为它提供了许多现成的功能。但这是不安全的还是容易出错的? 在这种情况下,您是否建议仅使用Zendesk API? 最佳答案 SDK本身使用Z
我正在尝试优化我的网站性能。我已经面临第三方代码对我的性能的巨大影响,我认为我所有的包的大小都比 zendesk 代码小。如何在不影响主线程的情况下加载它?我应该使用 async或 defer标签?
我正在尝试使用 Zendesk 应用程序,但在将变量/json 对象数组从我的应用程序传递到 View 时遇到问题。我看了入门教程并查看了 API,但似乎找不到答案。 这是我所拥有的: this.aj
在某一时刻,我们与 zendesk 的集成停止工作,即使在旧的稳定版本上也是如此 错误是: Could not find com.zendesk:support:3.0.3. 我的模块的存储库配置为依
我一直在尝试通过不加载 Zendesk Widget 来节省页面资源,除非需要。 如果我手动将以下标签添加到页面,一切正常: 作为我页面的一部分,我在某处始终存在一个 div 标签: 我想要的
在 Zendesk 的帮助中心,我设置了一个新的请求页面,允许最终用户提交请求。 对于其中一个问题,有一个下拉菜单要求客户确定他们使用的是基本版还是企业版。 如果是基本的,我想显示一些文本,也许是一个
我正在尝试配置一些 JavaScript 代码以在 Zendesk Lotus 中制作条件字段应用程序。下面是 javascipt 模板和我当前的 html。有人可以给我一个如何更改 java 模板以
我正在使用此类 json 请求代表用户(从移动应用程序)创建 Zendesk 票证: {"ticket": {"subject": "Subject", "comment": { "body": co
我已经使用 CreateOrUpdateUser() 方法创建了用户,但我无法从 zendesk 获取所有用户。我为“oListUser”获取空值,我也尝试获取组织的用户列表,但为此我也获取空值。任何
我正在实现 Zendesk single signon使用 JSON Web Token 的功能进入我的应用程序。根据示例代码,我从我的代码隐藏中调用 ProcessRequest() 函数。 我的代
我有一个想要隐藏 Zendesk 聊天按钮的 URL。看看他们的documentation我发现我需要使用 hideAll() 函数。为此,我创建了: $zopim(function () {
有谁熟悉 Zendesk iOS SDK 吗?我正在尝试将此 SDK 集成到我的 iOS 应用程序中,并且集成确实存在问题,我目前唯一的问题是多语言支持。当您可以使用以下代码动态更改语言时,我的应用程
我必须从我的 MVC 应用程序访问 zendesk.com 的页面。我有用户名和身份验证票。当我尝试访问该页面时,它返回错误“远程服务器返回错误:(401) 未经授权”。这是验证代码 string
我是一名优秀的程序员,十分优秀!