CXone Mobile SDK 事件图
此页面提供聊天交互期间发生的常见事件的图表和说明。
应用程序变为活动状态
此序列图捕获 Mobile 应用程序 变为活动状态、准备聊天、处理访问者和客户信息以及与后端服务进行通信时的流程。如果发生任何错误,则会适当地处理并记录这些错误。
初始状态:
-
将 SDK 的初始状态设置为 initial。
-
Mobile 应用程序 进入前台。
聊天准备:
-
用户通过调用 prepare(brandId:channelId:) 启动聊天准备。
-
如果聊天状态不是初始状态或离线状态,则返回 IllegalChatStateError。
-
否则,SDK 会将聊天状态设置为 preparing 并通过 onChatUpdated() 通知 UI。
渠道配置:
-
SDK 通过 getChannelConfiguration() 向后端请求渠道配置。
-
如果服务器出现错误,则会返回 ServerError,并将聊天状态重置为 initialize。
-
否则,将接收此渠道配置,并且 SDK 创建目标 ID。
-
如果访问者 ID 或客户 ID 为 null,则会在本地创建并存储它们。
访问者和客户处理:
-
SDK 在后端调用 createOrUpdateVisitor(visitorId:customerId:deviceToken:)。
-
如果服务器出现错误,则将聊天状态重置为 initialize。
-
否则,访问者和客户处理成功。
聊天已准备就绪状态:
-
将聊天状态设置为 prepared。
-
通过 onChatUpdated() 通知 UI。
-
在 Mobile 应用程序 与后端之间跟踪页面浏览量分析。
应用程序进入后台
此序列图捕获 Mobile 应用程序 进入后台、处理页面浏览量跟踪以及与后端服务进行通信时的流程。如果发生任何错误,则会适当地处理这些错误。当 应用 进入后台时,这意味着它不再是您在设备上看到或与之交互的主要内容。想象一下您正在使用消息传送 应用程序,然后您按主页按钮或切换到另一个 应用程序。此消息传送 应用程序 现在位于后台。它仍在运行,但您没有在主动使用它。当您最小化 应用程序、切换到不同的 应用程序 或锁定电话时便会发生这种情况。应用程序 仍然存在,但不再位于前台。
应用程序进入后台:
-
UI 会显示一个框,指示应用程序正在进入后台。
-
UI 使用 pageViewEnded 通知 SDK,页面浏览已结束。
-
后端接收 pageViewEnded 事件。
-
如果出现服务器错误,则会处理该错误。
-
否则,此事件成功。
-
断开连接和状态处理:
-
UI 使用 disconnect() 启动断开连接。
-
根据当前状态:
-
如果正在准备,则 SDK 会将状态设置为 initial。
-
如果已准备好,则 SDK 会断开套接字并将状态设置为 prepared。
-
查看页面
此序列图表示用户在 Mobile 应用程序 中查看页面时的流程,包括与 SDK 和后端服务的交互。它显示用户查看页面、跟踪访问详细信息以及与后端服务进行通信时的分析事件。如果发生任何错误,则会适当地处理这些错误。
应用程序激活参考:
-
该图引用了应用程序已进入活动状态事件。
查看页面事件:
-
用户查看页面,UI 通过 viewPage(title:url:) 通知 SDK。
-
检查聊天模式:
-
如果未准备好,则返回 illegalChatStateError。
-
否则,将检查访问详细信息,以了解是否过期。
-
如果过期,则会创建新的访问详细信息(UUID 和过期)。
-
如果有效,SDK 会调整当前到期时间。
-
-
如果未发送查看的最后页面,则 SDK 会结束页面浏览。
-
存储查看的当前最后页面、标题、URI 和时间戳。
-
如果出现故障,例如服务器错误,则会处理该故障。
-
后端交互:
-
SDK 与后端服务进行通信:
-
调用 visitorVisit(date:) 来记录该访问。
-
调用 pageView(title:uri:timestamp) 来记录页面浏览。
-
如果出现服务器错误,则会处理该错误。
-
打开聊天
此序列图捕获用户打开聊天、处理 OAuth 以及与后端服务建立连接时的流程。如果发生任何错误,则会适当地处理这些错误。
应用程序激活参考:
-
该图引用了应用程序已进入活动状态事件。
聊天打开:
-
应用程序用户打开聊天,UI 启动与 connect() 的连接。
-
检查聊天状态:
-
如果正在连接,则 SDK 会建立 WebSocket 连接。
-
如果为初始状态或者正在准备,则返回 IllegalChatStateError。
-
如果已准备好,则检查聊天模式:
-
如果实时聊天且实时聊天状态为离线,则将聊天状态设置为 offline。
-
否则,建立 WebSocket 连接。
-
OAuth 处理取决于它已启用还是禁用。
-
-
OAuth 处理:
-
如果启用了 OAuth:
-
SDK 重新与 reconnectCustomerEventData(accessToken:) 进行连接。
-
如果出现服务器错误,则会处理该错误。
-
否则,接收 CustomerReconnectedEvent。
-
-
如果禁用了 OAuth:
-
SDK 通过 authorizeCustomerEventData(authorizationCode:codeVerifier:) 进行授权。
-
如果出现服务器错误,则会处理该错误。
-
否则,接收 CustomerAuthorizedEvent,并存储访问令牌和客户身份。
-
聊天已连接状态:
-
将聊天状态设置为 connected。
-
通过 onChatUpdated() 通知 UI。
-
根据聊天是单线程 在单线程应用程序中,每个联系人只能有一个聊天线程。 他们与您的组织的任何交互都发生在一个聊天线程中。还是多线程 在多线程应用程序中,联系人可以创建任意数量的线程来讨论新话题。 这些线程可以同时处于活动状态。,显示相关的聊天视图。
单线程
此序列图捕获用户与单线程 在单线程应用程序中,每个联系人只能有一个聊天线程。 他们与您的组织的任何交互都发生在一个聊天线程中。聊天交互、处理线程恢复以及与后端服务进行通信时的流程。如果发生任何错误,则会适当地处理这些错误。
应用程序激活参考:
-
该图引用了打开聊天事件。
线程恢复:
-
SDK 从本地存储加载线程 ID。
-
如果本地存储了来自外部平台的任何线程 ID,则 SDK 将使用 RecoverMessagingThreadEvent(threadId:) 恢复消息传送线程。
-
如果没有可用的 UUID,则 SDK 会尝试使用 RecoverMessagingThreadEvent(nil) 进行恢复。
线程存在检查:
-
如果线程存在,则接收 ThreadRecoveredEvent。
-
将聊天和线程状态设置为 ready。
-
通过 onThreadUpdated() 通知 UI。
-
-
如果线程不存在,则接收 ThreadRecoverFailedEvent。
-
将聊天状态设置为就绪。
-
通过 onChatUpdated() 通知 UI。
-
备注指示无需进行线程恢复。
-
聊天交互:
-
UI 显示供用户与坐席交互的聊天窗口。
多线程
此序列图捕获用户与多线程 在多线程应用程序中,联系人可以创建任意数量的线程来讨论新话题。 这些线程可以同时处于活动状态。聊天交互、处理线程检索以及与后端服务进行通信时的流程。如果发生任何错误,则会适当地处理这些错误。
应用程序激活参考:
-
该图引用了打开聊天事件。
线程列表检索:
-
SDK 使用 FetchThreadListEvent 从后端获取线程列表。
-
如果出现服务器错误,则会处理该错误。
-
否则,获取线程列表。
线程处理:
-
如果线程存在:
-
SDK 将每个线程的状态设置为 received 并加载最后消息。
-
加载线程元数据并将状态设置为 loaded。
-
将聊天状态设置为 ready,并通知 UI。
-
-
如果不存在线程:
-
将聊天状态设置为 ready,并通知 UI。
-
创建或打开线程:
-
如果创建一个新线程:
-
用户发起线程创建。
-
-
如果打开现有线程:
-
用户选择一个线程。
-
UI 使用 openThread(thread:) 打开此线程。
-
此线程从后端恢复。
-
如果出现服务器错误,则会处理该错误。
-
否则,恢复此线程,并将状态设置为 ready。
-
聊天交互:
-
用户与坐席进行聊天。
实时聊天
此序列图展示了实时聊天交互的后端流程。“实时聊天”是实时数字聊天选项,而“聊天消息传送”是异步消息传送选项,类似于私人消息或直接消息。
创建线程
此序列图捕获用户创建新聊天线程、处理线程创建以及与 SDK 进行通信时的流程。如果发生任何错误,则会适当地处理这些错误。
用户详细信息和聊天前:
-
如果未提供客户名称,则 UI 将显示用户详细信息表单视图。
-
如果可获得聊天前信息,则 UI 将显示聊天前表单视图。
线程创建:
-
用户开始对话。
-
UI 使用 createThread(customFields:) 启动线程创建。
-
如果聊天模式不是多线程且线程已经存在:
-
返回 unsupportedChannelConfigError。
-
显示错误警报。
-
-
否则:
-
SDK 使用 UUID 本地创建线程。
-
本地存储 UUID。
-
将线程状态设置为 pending。
-
通过 onThreadUpdated() 通知 UI。
-
与坐席聊天
此序列图捕获最终用户通过聊天与坐席交互、处理欢迎消息以及与后端服务进行通信时的流程。如果发生任何错误,则会适当地处理这些错误。
聊天初始化:
-
用户使用 sendMessage(message:) 发送消息。
-
如果可获得欢迎消息:
-
SDK 使用 SendOutboundMessageEvent(welcomeMessage:) 发送呼出欢迎消息。
-
如果出现服务器错误,则会处理该错误。
-
否则,接收 MessageCreatedEvent 并更新 UI。
-
-
SDK 使用 sendMessageEvent 发送用户消息。
-
如果出现服务器错误,则会处理该错误。
-
否则,接收 MessageCreatedEvent 并更新 UI。
-
结束联系
此序列图捕获用户结束聊天、处理对话关闭以及与后端服务进行通信时的流程。如果发生任何错误,则会适当地处理这些错误。
聊天结束:
-
用户按下结束对话。
-
UI 使用 endConversation() 通知 SDK 结束对话。
-
后端接收 EndConversationEvent。
-
如果出现服务器错误,则会处理该错误。
-
否则,更改案例状态,并且将线程状态设置为 closed。
-
通过 onThreadUpdated() 通知 UI。
-
结束联系体验视图:
-
UI 显示结束联系视图。
处理大事件
AWS API 网关的一个限制是它发送一条消息的最大大小仅为 128 KB。要将较大的事件从服务器发送到客户端:
-
在服务器上,将较大的事件上传到公开可用的 S3 存储桶。
-
然后,客户端可以通过 WebSocket 仅接收该文件的 URL,并通过 REST 下载实际的事件正文。