使用Chat SDK API提供者
使用Chat SDK API提供者
聊天SDK API提供商封装了聊天SDK的所有功能,从设置访问者信息到更高级的功能,如观察聊天过程中可能发生的某些事件。
如果您希望构建自己的UI,可以使用这些提供程序来实现代表访问者发送消息等功能。
在Chat SDK的同时使用API提供者
请注意,聊天SDK有自己的连接管理,基于统一SDK提供的活动的生命周期。如果你在使用聊天SDK的同时使用聊天API提供商,这一点很重要。聊天屏幕之外的连接生命周期的所有权掌握在您自己手中。
重要的是:在使用API提供程序之前,请确保调用连接
,并设置连接状态观察器以适当地处理连接状态。这是聊天正常工作所必需的。
connectionProvider.connect ();
连接
可以在其他API调用之前或之后调用。这是因为所有API请求都进入一个操作队列。一旦建立了连接,请求就会按顺序发送。
您可以通过以下命令观察连接状态:
connectionProvider。observeConnectionStatus(new ObservationScope(), new Observer
() { @Override
public void update(ConnectionStatus) {
if (connectionStatus == connectionStatus . connected) {
/ /你的代码
}
}
});
记住在任何将用户带回聊天屏幕的流之前调用disconnect。
connectionProvider.disconnect ();
访问提供者
提供程序可以从闲谈,聊天
单例模式:
.chatProvider Chat.INSTANCE.providers () ();
.profileProvider Chat.INSTANCE.providers () ();
观察事件
提供程序允许您观察可能发生的某些事件。这些方法需要一个ObservationToken和一个观察者.例子:
ObservationScope() = new ObservationScope();
.chatProvider Chat.INSTANCE.providers()()。observeChatState(observationScope, new Observer
() { @Override
public void update(ChatState) {
//在聊天状态下做一些事情
}
});
重要的是,如果你开始观察这些事件,你也要记得停止观察它们:
observationScope.cancel ()
获取代理的可用性
您可以查看座席和部门的可用性:
accountProvider()。getAccount(新的Ze亚博ndeskCallback
() { @Override
onSuccess(帐户帐户){
//在这里插入您的帐户处理代码
}
@Override
onError(ErrorResponse) {
//处理在这里获取Account的错误
}
});
有关账户
类,请参见参考文档.
您还可以观察到代理可用性的变化:
accountProvider()。observeAccount (ObservationScope ObservationScope,
观察者<帐户>观察者);
观察聊天设置的变化
您可以在聊天仪表板中的设置中收到任何更改的通知:
settingsProvider()。observeChatSettings(ObservationScope ObservationScope, Observer
Observer);
有关ChatSettings
类,请参见参考文档.
观察连接状态
你可以监听连接状态的变化:
connectionProvider。observeConnectionState (ObservationScope ObservationScope,
观察者< ConnectionState >观察者);
观察聊天状态
您可以观察聊天的状态,并收集有关会话的信息:
chatProvider。observeChatState (ObservationScope ObservationScope,
观察者< ChatState >观察者);
的ChatState
对象具有以下属性:
财产 | 描述 |
---|---|
代理 | 聊天中的代理列表。 |
日志 | 表示对话中的消息的ChatLog项数组。 |
queuePosition | 访问者的当前队列位置。 |
isChatting | 访问者是否已经开始与座席聊天。 |
部门 | 访客要求的部门。 |
chatSessionStatus | 当前聊天会话的阶段。看到参考文档. |
评级 | 访问者对当前会话的评分。 |
评论 | 访问者对当前会话的评价。 |
有关ChatState
类,请参见参考文档.
发送消息
chatProvider()。sendMessage(字符串消息)
您可以尝试使用以下方法重新发送或删除失败的消息,这些方法会占用chatLogId
作为论点:
failedChatLogId chatProvider () .deleteFailedMessage(字符串);
chatProvider()。resendFailedMessage (String failedChatLogId);
发送附件
可以通过提供文件
,以及FileUploadListener
将提供上传的进度。
chatProvider()。sendFile(文件文件,FileUploadListener);
下面的例子使用了提供者的sendFile ()
方法从assets文件夹中发送图像:
私有无效sendImageFromAssets(){
尝试{
文件tempFile = createTempFile(".png", context.getCacheDir());
InputStream InputStream = context.getAssets().open("zenchat.png");
OutputStream OutputStream = new FileOutputStream(tempFile.getPath());
if (inputStream != null) {
syncIoStream (inputStream, outputStream);
chatProvider()。sendFile(tempFile, new FileUploadListener() {
@Override
onProgress(String chatLogId, long bytesupload, long contentLength) {
日志。d(LOG_TAG, "Upload: id: " + chatLogId + ", " + bytesupload + "/" + contentLength + ")");
}
});
}
} catch (IOException ex) {
日志。e (LOG_TAG ex.getMessage ());
}
}
private File createTempFile(字符串扩展名,文件目录)抛出IOException {
返回文件。createTempFile("temp-" + extension.replace(".", ""),扩展名,目录);
}
private void syncIoStream(InputStream stream, OutputStream outStream)抛出IOException {
byte[] b = new byte[inStream.available()];
inStream.read (b);
outStream.write (b);
inStream.close ();
outStream.close ();
}
您可以使用以下方法重新发送或删除文件chatLogId
作为论点:
chatProvider()。resendFailedFile(String chatLogId, FileUploadListener);
failedChatLogId chatProvider () .deleteFailedMessage(字符串);
结束聊天
您可以在任何时候结束聊天,并使用回调来验证它是否成功。
chatProvider()。endChat 亚博(ZendeskCallback <空白>回调)
添加和删除标签
添加一个特定的标记:
profileProvider()。addVisitorTags(List
tags, 亚博ZendeskCallback callback);
删除已添加的标签:
profileProvider()。removeVisitorTags(List
tags, 亚博ZendeskCallback callback);
如果您需要清除已添加到聊天中的所有标记,则需要跟踪每个可能的标记。
发送聊天评分
chatProvider()。sendChatRating(ChatRating, ZendeskCall亚博back
callback);
发送聊天评论
chatProvider()。sendChatComment(String chatComment, 亚博ZendeskCallback
callback);
发送脱机消息
此方法应仅用于将脱机消息发送到离线帐户或部门每次调用此方法都会创建一个新的聊天。如果您的聊天帐户链接到支持帐户,则将为每条消息自动创建票据。
VisitorInfo = VisitorInfo.builder()
.withName(字符串名称)
.withEmail字符串(电子邮件);
OfflineForm OfflineForm = OfflineForm。builder(字符串消息)
.withVisitorInfo (visitorInfo)
.withDepartmentName (String departmentName);
chatProvider()。sendOfflineForm(OfflineForm OfflineForm, 亚博ZendeskCallback
callback);
检查正在进行的聊天的信息
在开始聊天之前,您可以检查是否已经有正在进行的对话。
请注意:该API主动连接到web套接字,用于认证用户。这种连接保持活跃。你应该打电话断开()
如果你不需要保持它打开,在ConnectionProvider上。
chatProvider()。getChatInfo 亚博(ZendeskCallback < ChatInfo >回调);