对所有组织请求抄送客户

44岁的评论

  • 安德烈Sarapulov

    干得好,格雷姆!

    我在我的帖子中添加了一条关于这篇文章的评论。

    0
  • 詹尼弗罗
    亚博Zendesk文档团队

    这太棒了,格雷姆,也是很多人都在寻找的东西。谢谢分享!

    0
  • Ace女巫大聚会

    很棒的文章,我自己也有几个重要的问题,我相信,其他人使用它会发现特别澄清:

    1. 如果不能使用单一的“value”参数,您建议我们使用什么?具体来说,v2 API文档声明所有传入的PUT参数都应该是JSON。但是很明显,API的Content类型允许XML和Form输入。那么我们应该使用什么,你建议我们传递什么作为参数呢?JSON:{"ticket[合作者]":"{{dc.extract_cc_mails_+|+prepend:','+|+prepend:{{ticket.organization.custom_fields.cc_user_on_all_organisation_requests}}"}看起来不像会起作用。
    2. 有几个地方看起来可能是打字错误,但也许不是。{{直流。Extract_cc_mails_ + be {{dc。extract_cc_mails + ? ?类似地,在末尾有{{dc、{{ticket和}}。所以它真的会正确解析两个{{和一个}},还是也需要纠正?

    谢谢!

    0
  • 格雷姆·卡迈克尔
    社区的主持人

    安德鲁

    谢谢你的反馈。我一定很幸运,控制中心还能正常工作。我已经按照你的建议更新了文本,很明显你是正确的。

    对于你的第一点,关于值参数,不幸的是,我不知道答案。我的账户上没有看到任何变化。

    0
  • Ace女巫大聚会

    对于那些没有“值”选项的人,JSON选项似乎与我一起工作。当你创建你的触发器时,它会问你使用什么JSON块,输入如下:

    {“字段”:“cc_user”}

    (同样,这是一个虚拟值,但它需要是有效的JSON。)

    我很想知道这对其他人是否一直有效。我让它工作了,但不稳定。

    0
  • Ace女巫大聚会

    几天后,我可以报告JSON字段工作得很好,所以对于那些没有访问值的人来说。JSON与假{"field": "value"}工作。

    我还发现了另一个优化“extract_cc_mail”动态内容例程,似乎已经复制和粘贴相当多,如果有人感兴趣:

    我对Liquid做了一些研究,发现{% for %}循环会自动检查是否为空——实际上,您可以在{% for %}循环结束前使用{% else %}来指示没有项目需要迭代的状态(例如“Nobody”)。考虑到这一点,你可以极大地简化你的extract_cc_mail例程:
    {% capture ccedusers %}{%在票据中捕获cc。CCS %}{{cc.email}}{%除非forloop。Last %}, {% endunless %}{% endfor %}{% endcapture %}{{ccedusers | strip_newlines}}

    希望这对你有所帮助。

    0
  • 杰西舒兹
    亚博Zendesk客户服务

    嗨,安德鲁!

    感谢分享你的解决方案!:)

    0
  • Ace女巫大聚会

    今晚我花了更多的时间研究这个,有一个更有效的方法来做这个工作。Liquid中的MAP函数接受一个数组,并自动遍历它,并可以提取其中特定的命名部分(在本例中为“email”),然后将其与给定的文本连接在一起,在本例中为“,”:

    所以所有这些:

    {% capture ccedusers %}{%在票据中捕获cc。CCS %}{{cc.email}}{%除非forloop。Last %}, {% endunless %}{% endfor %}{% endcapture %}{{ccedusers | strip_newlines}}

    变成这样:

    {{票。CCS | map: 'email' | join:',' | strip}}

    Strip不仅删除换行符,还删除前导和尾随空格。

    0
  • 皮埃尔Merrien

    你好,

    有没有人知道我是如何得到相同的东西使用我的自定义字段(下拉)工作

    https://company.亚博zendesk.com/api/v2/tickets/ {{ticket.id}} . json + ?票[合作]= {{dc.extract_cc_mails + | +预谋:“,”+ | +预先考虑:票。Ticket_field_24561309 == gen_cc}}

    不与字段ID工作?

    这是一个自定义的下拉字段,用于根据标记选择其中的值gen_cc

    票。Ticket_field_24561309 == gen_cc

    亲切的问候,

    皮埃尔

    0
  • 杰西舒兹
    亚博Zendesk客户服务

    哇,安德鲁!看看你走了!再次感谢楼主的分享!

    0
  • 迈克

    很好的解决方案,但我需要能够CC不同的终端用户基于票的内容,而不是组织,有什么想法吗?

    谢谢,

    迈克。

    0
  • Ace女巫大聚会

    格雷姆和杰西,

    我非常欣赏这个最初的剧本。这是我学习和为公司做事的最好方式。我也相信回馈发起人和社区会让我们变得更好。所以我想向你们展示我的发现,并将我的一些其他评论收集到一起:

    1)扩展和HTTP目标有两个错误:

    1a)我们不再可以访问“value”选项,所以我们应该使用“JSON”。事实证明,一个空的JSON数据包效果最好,所以只需:{}。我尝试使用{"ticket":{"collaborators":["a@b.com”、“b@c.com"]}},并且由于它的限制而不能扩展"{{dc。Extract_cc_mail}}”变成单独的条目,这种方法将不起作用。因此,只需使用一个空白数据包:{}

    你不需要。json和?之间的空格,所以。json+?应该是。json吗?

    1c) HTTP目标URL是提供多个协作者作为逗号分隔的列表的方式,没有空格。但是,如果您的CC字段为BLANK,则当前的实现会失败,因为它会在列表前面放置一个偏离的“,”,从而导致URL调用静默失败。纠正的方法是将此逻辑移到extract_cc_mail例程中。这种优化还有一个好处,那就是Pierre和Mike都可以解决他们的问题。在后续评论中有更多内容。所以与其这样:

    https://YOURDOMAIN.亚博zendesk.com/api/v2/tickets/ {{ticket.id}} . json + ?票[合作]= {{dc.extract_cc_mails + | +预谋:“,”+ | +预谋:ticket.organization.custom_fields.cc_user_on_all_organisation_requests}}

    让每个人都这样做:

    https://YOURDOMAIN.亚博zendesk.com/api/v2/tickets/ {{ticket.id}} . json ?票[合作]= {{dc.extract_cc_mails}}

    2) Extract_cc_mails有许多我推荐的优化。你是这样开始的:

    {%如果票据。Cc_names !=空%}{% capture ccedusers %}{%用于cc在ticket中。CCS %}{%除非forloop。去年%}{{cc.email |添加 : ', ' }}{% 其他%}{{cc.email}} {% endunless %} {% endfor %} {% endcapture %} {{ccedusers | strip_newlines}}{%其他%}{% endif %}

    然后我发现Liquid会自动跳过一个空循环,所以你不需要在开始的时候使用IF。然后我还发现Liquid有一个STRIP命令,它也可以删除前后空白(这是压缩多用户电子邮件列表所需要的——我们无法验证用户不会输入)。a@b.comb@c.com“中间有一个空间,或者甚至”a@b.comb@c.com,这样我们就可以再防弹一点了。

    还有MAP和JOIN命令,它们允许我们直接从结构中提取字段并自动迭代。这极大地减少了extract_cc_mails。但是现在我们需要引入逻辑,不仅要获取CC字段,还要添加CC Org用户字段。最后得到一个dc。Extract_cc_mails例程看起来像这样:

    {% assign ticket_cc = ticket。CCS | map: 'email' | join:',' | strip %}{% assign org_cc = ticket.organization.custom_fields.cc_user_on_all_organisation_requests | remove:' ' | remove:'<' | remove:'>' | remove:'"' | remove:'?“|取代 :';',',' | 替换:' + ',' % 2 b”|地带%}{{ticket_cc}}{如果ticket_cc %。Size > 0和org_cc。大小> 0 %},{% endif %}{{org_cc}}

    这将创建两个变量,一个用于票据的抄送列表,另一个用于组织的抄送列表。它会对每一组数据进行消毒——当票据的CC被第一次输入时,Zendesk会对其进行很好的消毒和验证,但是Org CC列表可能有很多不合适的部分,所以我们删除了所有明显亚博会导致失败的部分。然后打印出清理和压缩后的票的CC(如果不是空的),检查是否需要用“,”连接它们——如果是,打印出来,然后打印清理后的Org CC。

    这样做的好处是可以将逻辑放入代码中,从而可以与HTTP目标进行控制。因此,例如,Pierre和Mike都可以向动态内容脚本添加特定的逻辑(或不同的字段名)。

    希望这对你有帮助!

    0
  • 安德烈Sarapulov

    @Andrew,

    关于第1a点,我不称之为bug。Target V1和Target V2是两个不同的特性。这篇文章是基于我在另一篇我使用Target V1的文章中描述的想法。对于Targets V1,您可以指定“value”属性。而对于目标V2则不同。在我的测试账户上,我可以选择使用哪个目标(见下面的链接)。

    https://www.evernote.com/l/AQOiIR8gApdPhIa1nwFQwn_xMKCPkwrNWc0

    0
  • 佩特里罗西

    你好,

    首先,感谢大家分享解决日常重复任务的方法。这对我们来说非常有价值,因为我们的代理目前每天都在每张票上手动添加cc。然而,我在获得解决方案时遇到了一些问题(首先在我们的SANDBOX中进行测试)。请原谅我的新问题(不熟悉Liquid)。

    我首先添加了组织自定义字段(cc_user_on_all_organization_requests)。

    然后设置动态内容(dc.extract_cc_mails):

    {% assign ticket_cc = ticket。CCS | map: 'email' | join:',' | strip %}{% assign org_cc = ticket.organization.custom_fields.cc_user_on_all_organisation_requests | remove:' ' | remove:'<' | remove:'>' | remove:'"' | remove:'?“|取代 :';',',' | 替换:' + ',' % 2 b”|地带%}{{ticket_cc}}{如果ticket_cc %。Size > 0和org_cc。大小> 0 %},{% endif %}{{org_cc}}

    在快速浏览了Liquid语法文档之后,这似乎是合乎逻辑的,而且据我所知应该可以工作。

    我已经建立了一个HTTP的目标扩展来使用这个(用""替换为我们实际的SANDBOX域):

    URL: https:// < MYDOMAIN亚博 > .zendesk.com/api/v2/tickets/ {{ticket.id}} . json ?票[合作]= {{dc.extract_cc_mails}}
    方法:把
    内容类型: JSON
    身份验证: /token(带有有效的电子邮件地址)和API token作为密码


    ..最后是一个触发器,在ticket创建时运行,将其推送到目标,带有一个空的JSON Body:{}

    我还尝试了以下版本的JSON体在触发器没有成功:

    {“字段”:“价值”}

    {“字段”:“cc_user”}

    我可以在测试单上看到扳机向目标推送。然而,我没有得到任何cc添加到创建的票。有人能指出我错在哪里吗?非常感谢你的帮助。

    0
  • 格雷姆·卡迈克尔
    社区的主持人

    佩特里

    很棘手,不是吗?

    要使用新的URL Target, Andrew建议使用{}作为JSON内容。

    我发现这对我有用,但前提是我在文章中使用原始URL。

    https://YOURDOMAIN.亚博zendesk.com/api/v2/tickets/ {{ticket.id}} . json + ?票[合作]= {{dc.extract_cc_mails + | +预谋:“,”+ | +预谋:ticket.organization.custom_fields.cc_user_on_all_organisation_requests}}

    而不是你提到的修改后的URL。

    使用修改后的URL,我得到与您相同的结果。扩展可以成功测试,在票证上触发,但没有添加CC。

    我相信安德鲁会比我更擅长解释这个过程。但是,这可能会让你开始。

    0
  • 佩特里罗西

    嗨格雷姆,

    感谢您的快速回复!我测试了一下,确实有效!然而,我现在在我们的Zendesk产品上测试了它。亚博

    由于某些原因,它似乎不能在我的Zendesk SANDBOX上工作(同样,通过API添加CC似乎不能在SANDBOX上工作,这促使我在生产中仔细尝亚博试)。

    0
  • Ace女巫大聚会

    嗨,你们两个!检查确保字段名是相同的,因为我们在英式英语拼写和美式英语拼写之间做了一些翻译。也就是说,要确保:

    ticket.organization.custom_fields.cc_user_on_all_organisation_requests

    是正确拼写的(与你所使用的相比)和:

    {{dc.extract_cc_mails}}

    也是同一个名字。

    0
  • 格雷姆·卡迈克尔
    社区的主持人

    谢谢安德鲁!

    0
  • Ace女巫大聚会

    穿一些开放的和服来回馈社会怎么样?现在,我把Graeme写的东西弄得更复杂一些,以解释Zendesk在Liquid实现(2.6.2)中的一些bug或限制……亚博

    这是我的字段名:

    cc_users_on_all_organization_requests

    这是我的dc(注意,我和Zendesk的支持人员谈过,他们不支持最新的L亚博iquid实现,所以“strip”不做任何事情,你可以使用“strip_newlines”):

    {{dc.extract_cc_emails}}

    {%分配CCS =票据。CCS | map:'email' | join:',' | append:',' | append:ticket.organization.custom_fields.cc_users_on_all_organization_requests | strip_newlines | remove:' ' | remove:'<' | remove:'>' | remove:'"' | remove:' '?“|取代 :';',',' | downcase |取代:' + ',' % 2 b”|预谋:“%开始%”|删除:“% %开始,”|删除:“%开始%”|添加:“%结束%”|删除:,结束% % |删除:“%结束%”|分割:',' | %}{%分配new_ccs排序 = '' %}{% cc的ccs %}{%如果cc.size > 3%}{%分配cc_bookends = %开始% |添加:cc |添加:‘%结束% %}{%除非new_ccs包含cc_bookends %}{%分配new_ccs = new_ccs |添加:cc_bookends %} {% endunless %} {% endif %} {% endfor %}{%分配new_ccs = new_ccs |取代:% % % %开始结束,”、“|remove:'%start%' | remove:'%end%' %}{{ new_ccs }}{% comment %}We do this horrific for loop to check for duplicates because Zendesk only supports Liquid 2.6.2, which doesn't have strip or uniq. So if someone specifies the same email twice in the org_cc, it'll make two copies in the ticket cc.{% endcomment %}

    这是我的触发器,每次它这样做都会给我发一封电子邮件,这样我就可以看到它是否正常工作:

    由于有重复的错误,JSON会遗漏合作者:

    {“票”:{“合作者”:[]}}

    电子邮件主体(如果你想用它调试)是:

    dc.extract_cc_emails:
    ({{dc.extract_cc_emails}})
    ticket.organization.custom_fields.cc_users_on_all_organization_requests:
    ({{ticket.organization.custom_fields.cc_users_on_all_organization_requests}})

    这是HTTP目标:

    还有放进去的URL:

    https://instartlogicinc.亚博zendesk.com/api/v2/tickets/ {{ticket.id}} . json ?票[合作]=票[合作]= {{dc.extract_cc_emails}}

    是的,有两个合作伙伴,因为有一个bug,在添加新成员之前不会清除之前的合作伙伴,并且可以得到重复的合作伙伴。

    最后一件事:我注意到当盯着票证并添加“ccadd”评论时,票证将得到更新,但CC字段有时不显示最新的内容,所以我总是在我的web浏览器中手动强制刷新页面,在我看到触发器运行后显示票证,以确保CC字段显示最新更新的信息。

    希望这对你有帮助!

    0
  • 佩特里罗西

    @Andrew,

    很好,谢谢!问题确实存在于DC vs. Organization字段名称的英式英语和美式英语之间。

    0
  • 詹尼弗罗
    亚博Zendesk文档团队

    嗨,Petri,很高兴你把它修好了!

    Andrew,谢谢你的帮助,谢谢你发布你的解决方案!如果你想把你修改后的解决方案作为一个单独的新提示发布给用户(链接回Graeme的原始),我们会寄给你swag。:)

    感谢您成为社区的一员!

    0
  • Ace女巫大聚会

    嗨,珍妮花!我很乐意,但我真的只是在推进格雷姆和安德烈的工作,所以在他们的文章中发表似乎是合适的。如果你不这么认为,就在我的电子邮件,我们可以讨论!

    0
  • 亚尼克·劳伦
    你好,
    添加抄送的好技巧!
    有人有一个伟大的建议,通过电子邮件通知这些新的CCed用户当票创建?(只有这些新的)
    初始CCed用户将自动收到电子邮件通知,当票创建,这似乎是由设计。但是这些自定义添加的CCed用户将不会,因为异步API调用。

    0
  • Ace女巫大聚会

    @Yannick,

    实际上,“新票上的电子邮件用户”看起来是一个触发器,所以只要你让这个触发器先于它运行,你就会收到这些人的电子邮件,作为初始创建警报的一部分。您是否看到了触发器页面右上角的“编辑”按钮,它允许您拖动它们的顺序?

    欢呼,

    0
  • 亚尼克·劳伦

    嗨,安德鲁,

    这是我的票事件:

    1/第一个事件:包含现有CC用户的新票

    我们看到通知抄送并不是一个触发器,它集成在我的Zendesk中。亚博

    2/第二个事件,URL目标的触发结果(添加第二个CC用户):


    即使在顶部设置了URL目标触发器,这也是一个异步过程。因此,通过web服务添加的抄送电子邮件(“YL公共”)在第一个事件发生时不存在。在第一个事件中发生抄送通知之后,它作为第二个事件出现。

    所以…有没有可能我们使用的不是同一个Zendesk平台?亚博或者我错过了什么…

    0
  • 丹Spataru

    这太棒了!

    谢谢分享!

    0
  • 丹尼尔春天

    我已经尝试了目标URL和目标HTTP的变化,虽然我可以证明我构建的抄送列表是正确的,但我从来没有真正看到添加到票的抄送列表中的电子邮件。:-(电子邮件是否必须以现有用户帐户注册?我希望使用这种技术来绕过Zendesk的愚蠢限制,考虑到这篇文章的目的,我认为这是可能的。亚博我试图通过目标HTTP添加的电子邮件在我们的ZD实例中不作为用户存在,所以我想知道这是否是我从未看到添加到抄送列表中的电子邮件的原因。

    0
  • Ace女巫大聚会

    @Yannick:我觉得你说对了。因为我注意到,当我想添加一个抄送的用户并让他们看到我添加的评论时,我不能同时这样做。我必须添加抄送用户,以打开状态提交,然后添加评论,然后以打开状态提交。所以你肯定是对的,这里有一个不确定的排序。

    你绝对不需要这些人是有效的Zendesk账户,就像你说的,这是解决整个问题的一种方法。亚博在我看来,您的HTTP或URL目标可能配置错误——您是否实际执行了测试选项并看到了合理的响应?因为当你测试它的时候你应该得到测试记录的结果记录。您还可以做另一件事:添加一个“email”事件,在每次触发器运行时向您发送电子邮件,并让它向您发送{{dc。Extract_mail_ccs}}在邮件正文中,您将能够看到这是否产生了任何有意义的结果。

    0
  • Hossam Medhat

    这太神奇了,格雷姆,

    我有一个问题。我得到了触发器和目标工作,但通知电子邮件没有发送给由创建票据后的触发器添加的CC-ed人员。但是,电子邮件是在第一次回复后发送的。这意味着在票据创建之后不会通知新添加的CC。

    有什么想法吗,我该如何克服这个问题?

    谢谢,

    0
  • 格雷姆·卡迈克尔
    社区的主持人

    霍萨姆。

    很抱歉地说,新添加的CC没有在票证创建时被通知是这种方法的一个限制。

    您可能想要探索用户设置。如果你允许用户从“用户的组织”查看门票,那么用户就可以选择“关注”所有组织的请求。用户可以设置它,或者您可以假设他们的身份并为他们设置它。

    0

登录留下评论。

由Zendesk提供支亚博持