本文适用于Zendesk管理员。亚博有关开发人员所需任务的信息,请参见启用经过身份验证的访问者。
本文包括以下主题:
关于web和移动消息传递的最终用户身份验证
简单地说,终端用户身份验证就是验证终端用户的身份。然后,经过验证的最终用户的新消息请求可以与他们过去的对话联系起来,从而使代理能够更好地支持他们。
本节包括以下主题:
理解关键要素
要理解消息传递的最终用户身份验证是如何工作的,您应该熟悉身份验证过程中涉及的关键元素:
- 用于身份验证的JSON Web Tokens (JWT)。亚博Zendesk在消息传递中使用签名JSON Web令牌(JWT)进行身份验证。这些令牌验证最终用户的身份。看到jwt.io有关jwt的详细资料。
- 签署的关键。签名密钥由Zendesk管理员在admin Center中创亚博建,并与开发人员共享,开发人员将在必要时使用它对JWT进行签名。看到创建和共享签名密钥。
- 唯一用户标识符,或外部id。这些是对每个用户唯一的字母数字字符串(例如用户名或客户ID号)。如果你有多个品牌在Zendesk亚博帐户中,用户必须具有唯一标识符在每个品牌。
- 用户名(可选)。包含名称可以帮助代理与最终用户进行通信。如果这些信息被收集并包含在JWT中,它将出现在代理工作区中。然而,这不是必需的。
设置过程概述
要启用最终用户身份验证,Zendesk管理员首先需要在Admin Center中亚博创建签名密钥,并将此密钥(其中包含一个秘密)提供给开发人员。然后,开发人员需要在业务的后端实现一个服务,该服务可以创建签名的JWT,并在请求时将其返回到您的网站或移动应用程序(下图中的步骤1和2)。当你的用户登录到你的网站或应用时,你的开发者将需要调用同等的登录API,这将在Zendesk Web Widget和Mobile sdk中提供。亚博在登录时,JWT将被传递给Zendesk,以验证所声明的用户身份(下图中的第3步)。亚博
最终用户和代理的体验是如何受到影响的
一旦实现了消息传递的身份验证,最终用户和代理将在他们的体验中看到细微的变化:
- 最终用户:一旦他们通过了身份验证,并且他们的身份已经与Zendesk进行了验证,最终用户将不会被提示提供他们的姓名或电子邮件地址作为消息机器人的一部分亚博默认消息传递响应。
- 代理:经过验证的最终用户将在代理工作区中通过身份验证图标进行标识:代理将能够将外部id作为最终用户配置文件的一部分查看。
如果API提供的外部id与现有用户的外部id匹配,则将根据现有最终用户引用消息传递票据。
当最终用户进行身份验证时:
- 将创建一个新的终端用户。匿名用户的消息票证将与具有外部id的新创建的用户相关联。
- 如果经过身份验证的最终用户具有未关闭的消息票证,则该票证将使用新消息更新。
- 当最终用户退出时,将为后续对话创建一个新的最终用户和新的消息票证。
例如:
- 终端用户A发送未登录消息。创建用户1和票据1。
- 终端用户A在对话中签名。使用外部id创建用户2(如果不存在具有外部id的用户)。
- 对话在票证1中继续,请求者更新为用户2。
为返回通过身份验证的用户,有后台票据合并以确保会话的连续性。例如:
- 最终用户A作为一个经过身份验证的用户有一个打开的票证1。
- 最终用户A退出。
- 终端用户A发送未登录消息。创建用户2和票据2。
- 终端用户A在通话过程中再次签到。通过外部id检索经过身份验证的用户A,并合并匿名和经过身份验证的对话。
- 1号售票处的对话仍在继续,2号售票处已关闭。
创建和共享签名密钥
如上一节所述,Zendesk管理员必须创建签名密钥并与开发人员共享,以便在亚博JWT中使用。您最多可以存储10个密钥。创建签名密钥还启用消息传递元数据变量在流生成器。
创建和共享签名密钥
- 在管理中心,点击账户在侧边栏中,然后选择“安全>终端用户认证”。
- 单击消息传递选项卡,然后单击创建密钥按钮。如果您正在创建第一个键,此按钮将出现在页面底部;如果您之前已经创建了一个密钥,它将出现在右上角。
- 在“创建新密钥”对话框中,为密钥输入标识名称,然后单击下一个。
- 在“复制共享密钥”对话框中,单击复制若要将秘密保存到剪贴板,请单击永远隐藏钥匙。
您将返回到Messaging选项卡,新密钥将出现在签名密钥列表中,并显示密钥的前六个字符。
- 保密地将共享密钥发送给开发人员,然后开发人员可以使用它来创建JWT。看到启用经过身份验证的访问者了解更多信息。
如果您生成了一个新密钥,但已达到10个密钥的限制,则会出现一个通知,要求您删除任何未使用的密钥。
删除未使用的密钥
- 在管理中心,点击账户在侧边栏中,然后选择“安全>终端用户认证”。
- 单击消息传递选项卡。
- 将鼠标悬停在要删除的键上,然后单击选项菜单图标并选择删除。
- 单击确认操作删除键。
当前的限制
以下限制适用于消息传递中最终用户身份验证的当前版本:
- 限制指南文章。需要身份验证的指南文章最初将无法提供给用户,即使它们已经过身份验证。我们将对消息传递产品进行进一步改进,使用户能够查看需要用户身份验证的指南文章。不需要用户身份验证的项目不受影响。
- Agent Workspace中的邮箱地址。最终用户的电子邮件地址最初将不会在Agent工作区中显示。这也是我们正在积极努力消除的一个限制。我们鼓励希望在Agent Workspace中查看用户电子邮件地址的企业将此数据包含在JWT有效负载中,以便在删除此限制后防止将来的开发,但这不是必需的。或者,如果电子邮件地址是客户的唯一标识符,则可以使用外部id来显示电子邮件地址。
90条评论
开发人员文档链接到https://developer.亚博zendesk.com/documentation/zendesk-web-widget-sdks/sdks/web/sdk_api_reference/#authentication目前还不存在。
我们如何使用Javascript对象来启用JWT调用?
泽(“信使”,…);
你好,托马斯!为延迟道歉,开发人员文档现已更新。
太棒了,谢谢!
嗨,团队,
看起来我们已经成功地实现了消息传递的身份验证,因为最终用户没有被提示提供他们的姓名和电子邮件地址。
但是在用户配置文件中,email字段仍然是空的。
下面是我们用来生成令牌的代码:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImtpZCI6ImFwcF82MWYyYzQ1MWEzODQ0ODAwZWRmMWU3ZDMifQ.eyJleHRlcm5hbF9pZCI6IjEyMzQ1NmFhIiwiZW1haWwiOiJzb21lQGVtYWlsLmNvbSIsImV4dCI6IjE2NzQ4MzYwODUiLCJuYW1lIjoiSm9uIFdhdHNvbiAxOTg1Iiwic2NvcGUiOiJ1c2VyIn0.RcOsjkbcil5YcmBnZpzsC3do0Q7nYY9-S_P_d-8rJ5Y
谢谢你!
此外,用户id不会显示在自定义票证字段中。
嗨亚历克斯,这是目前产品的局限性。我们正在改进Agent Workspace,以便在不久的将来添加这些信息。
你好!
我们一直在等待这个功能,因为我们打算用它来链接Zendesk Messaging用户到我们应用程序中的用户,这样我们就可以通过Zendesk亚博应用程序或类似的方式向我们的团队显示额外的信息。对于这个链接,我们尝试使用外部ID,这将是我们的应用程序用户ID。
然而,到目前为止,我们还没有能够做到这一点:
尤其是后一种行为似乎超越了限制——Zendesk似乎创建了两个使用相同电子邮件地址的用户。亚博这似乎不是我们工作流程的专属问题,而是创建用户,例如,在使用该电子邮件地址之前已提交门票。
我的问题是:
嗨,团队,是否有一个估计的时间框架来发布限制文章访问消息的认证用户?
嘿凯文Konings想知道你的第二个观点有没有得到回应?
我们遇到了同样的问题,如果我们不能将用户附加到现有用户并相应地映射他们的历史记录,就会破坏对用户进行身份验证的目的。这是已知的限制还是bug?
嘿Clayful几天前我给支持发了消息,他们告诉我他们会回来找我的。
我100%同意你的观点,如果它不是作为我们的代理在以前的票中已经交互过的同一个用户进行身份验证,这就不是真正的身份验证。
嘿凯文Konings你有什么消息吗?
再加上Ken Millar提出的这个缺点,如果我们的代理无法看到最终用户的电子邮件地址,这将严重影响他们在我们的内部员工仪表板上进行有效的故障排除以跟踪用户信息。
这些增强的时间表将是非常感谢ZD团队。谢谢!
我们还没有实现这个。当你说它不能提供机票上客户的电子邮件地址时,它能提供什么信息呢?或者用户信息是空白的?如果有人愿意分享,我很想看到整张票的截图。是否有一种方法可以合并用户或将客户的用户信息添加到该票据?只是好奇在Zendesk修复这个限制之前,你们都在使用什么作为工作?亚博你的评论让我犹豫是否要实现这个功能,尽管我们一直期待着它。谢谢你的帮助!
嗨,珍,
坦率地说,这是一团糟
我们使用SFDC ID作为外部字段,由于某种原因最终被填充为Web用户ID(但没有被识别为外部ID或绑定到现有用户)-下面的截图。
这是一个好消息,因为至少我们可以通过搜索这个ID将用户与现有用户合并——所以它实际上只在用户第一次聊天时影响代理。对于合并后的后续聊天,现在弹出的是原始用户。太好了。
问题是现在机器人的行为是非常不稳定的!你不清楚聊天机器人什么时候开始聊天,什么时候不开始聊天,也不清楚你在上班时间或不在上班时间会收到什么信息。如果你在一个新窗口中打开聊天或刷新,一些错误就会得到解决——当然,这对我们的用户来说不是一个很好的外观。这是我们现在最大的问题,因为上面的邮件问题可以被“黑掉”并在内部处理,而这对我们的最终用户来说只是一个可怕的体验……
我也在等待支持团队的回复,所以我一收到回复就会在这里发表评论!
嘿Jen科尔,
当我们两周前尝试实现这个特性时,创建用户时只使用通过JWT提交的名称。我们提交的电子邮件地址和外部ID在代理界面和User API中都不可见。下面是它的截图(基本上只填了名字):
我们的计划是当用户在我们的应用程序中注册时填写用户信息,然后通过他们的外部ID或电子邮件地址在Zendesk Messaging中对这些用户进行身份验证。亚博但是,这里创建的用户已经有一个终端用户,其电子邮件地址和外部ID与用于身份验证的用户相同,Messaging仍然创建了一个新用户。
我还没有从Zendesk那里得到关于我上面问题的反馈,希望这个亚博消息传递行为不是有意的,因为它的方式让这个功能对我们来说几乎毫无用处。
我们看到的和凯文Konings这阻碍了我们向信息传递的转变。如果没有修复,我们可能会在这里使用chat。
我们看到的第二个问题是,即使使用已创建的用户,最终也会创建另一个重复的用户。
谢谢你!肯•米勒和玛丽亚Barrera)!这很有帮助。看起来我们需要等待,当电子邮件地址/用户信息可以被验证,然后带到创建的票实现这一点。
Mick O ' donnell当该功能更新时,我们会收到通知吗?用户信息/电子邮件地址被带入票务创建?
我们在营业时间内外通过消息传递渠道接收门票。如果票证是以一个网络用户的身份发出的,可能是一个用户的名字,但没有电子邮件地址,那么如果没有电子邮件地址,就很难追踪到正确的用户(对于那些在营业时间以外进入的票证)。电子邮件地址是我们客户的唯一标识符,需要将所有用户数据链接在一起。我们非常渴望这个功能的更新,所以我们可以实现它。谢谢!
你好,
我们在身份验证方面也遇到了类似的问题。我们用的是loginUser (jwt)在successCallback上保存和检索的唯一数据是external_id。
请注意jwt还包含名字和一个电子邮件。
感谢大家的来信和反馈。我们希望为未来的改进提供更多的可见性。
我们的计划是将external_id和name作为用户配置文件的一部分。它们对于识别你的客户至关重要。计划在第二季度初推出。显示电子邮件将紧随其后。
在短期内,我们将在对话中显示external_id。这将在几周内推出。
我们将在发布说明中发布更新,一旦它推出,就会在这个线程上发布更新。
——Prakruti
嘿Prakruti Hindia
谢谢你的反馈!
我和其他人面临的使用相同的电子邮件创建重复用户的问题怎么办?这是现在的一个bug,还是会成为第二季度早期改进的一部分?
最好的
你好Prakruti Hindia,
我想问一个问题。当我们生成JWT令牌并在代理工作区上可见时,是否有可能在有效负载上放置标记?
如果不可能的话。你有任何解决方法如何通过Zendesk Messaging (Flow Builder)在Agent Workspace上发送标签吗?亚博因此,我们不需要从票券字段手动输入所需的值
谢谢你!
如果系统中已经存在具有相同外部id的用户,我们将合并用户。这将是第二季度早期改进的一部分。
我还要求其他产品经理回答有关标签和过期的问题。他们很快就会回复。
——Prakruti
重要更新:我们已经推出了一个小的修复,将表面外部id当代理悬停在身份验证徽章。
我们将继续关注将external_id与User配置文件关联起来。
那很好啊!
嗨约书亚!
对于这个问题的回答是:“如果我们没有在JWT有效负载中传递' exp ',会有一个过期吗?”如果有,有效期是多长?”,如果在JWT中没有提供,则不会设置有效期。因此,您需要考虑对安全策略有意义的值。
嗨,快闪咖啡!
目前还不可能在JWT有效负载中插入额外的索赔,并在系统的其他部分使用此数据,但我们目前正在探索允许客户实现这一点的选项。JWT本身可能对客户端上下文数据有用,但这可能只是解决方案的一部分。今天,您需要手动输入需要的值,抱歉。
嗨,Z亚博endesk团队,
在JWT头中使用“kid”属性的正确值是什么?是App ID, Client ID,还是这些都不是?
谢谢——
安倍
编辑:我在这里有一个问题的答案:https://support.亚博zendesk.com/hc/en-us/community/posts/4421945067546-Having-issue-when-trying-to-authenticate-/comments/4446353121434#community_comment_4446353121434
嗨,印度人民,
您提到的新修复是否使得当用户从小部件发送消息并且他们的external_id在JWT中设置时,如果已经存在具有相同external_id的用户,那么它不会创建一个新用户,而是将该票证分配给该“旧”用户?
欢呼,
圣地亚哥
使用此实现身份验证时遇到问题。
首先,我嵌入了脚本(用SECRETKEY替换了实际的键)
接下来,我生成了带有用户范围、external_id等的JWT,并使用JWT.io验证了有效负载和加密类型。没问题。
然而,现在我看到它,无论我是否试图验证用户,我都会得到这个错误。无论如何,小工具加载,但我得到这个。
尽管有这个错误,小部件仍然加载,只是没有任何身份验证工作的迹象。因此,我不知道这是阻止JWT授权工作的原因还是其他原因。
还有,这是我找到的验证代码。我创建了一个与回调相匹配的函数来传递JWT令牌。
你好,
我们在一些三星设备上看到了另一个问题。
我们集成了Zendesk S亚博DK(新的),并使用了SDK中的多个功能:initialize, loginUser, logoutUser, unreadMessageCount和unreadMessageCountChanged的ZendeskEventListener。
所以,基本上我们在一些安卓(三星)设备上打开聊天时看到的是一个白屏。清除缓存可以修复此问题,但当注销并再次登录时,问题仍然存在。
我们如何解决这个问题?
问候,
Ovidiu
请登录留下评论。