无头 Web SDK 提供了一些事件,您可以监听这些事件,以便在应用中处理特定操作或更新。您可以使用 .on 和 .off 方法添加和移除事件监听器。
const handleReady = () => {
console.log("**** client is ready")
}
client.on("ready", handleReady)
// client.off("ready", handleReady)
一般事件
以下是 SDK 的常规事件
ready
当客户端准备好进行通信时,会发出此事件。
client.on("ready", () => {
})
authenticated
当客户端已通过用户的令牌进行身份验证时发出。
client.on("authenticated", () => {
})
Chat 事件
以下是聊天会话专用事件。
chat.ongoing
在进行中的聊天中触发。
client.on("chat.ongoing", (chat) => {
console.log(chat)
})
chat.updated
在聊天实例更新时触发。
client.on("chat.updated", (chat) => {
// the `chat` property on `client` has updated
console.log(chat)
})
chat.message
当有新消息时发出。
client.on("chat.message", message => {
console.log(message)
})
消息类型:
interface MessageResponse {
$index: number;
$sid: string;
$timestamp: Date;
$userType: string;
$userId: number;
type: string;
content?: string;
event?: string;
file?: File;
// extra parameters
[key: string]: unknown;
}
chat.memberJoined
当有新成员加入对话时发出。
client.on("chat.memberJoined", (identity) => {
console.log(identity)
})
chat.memberLeft
当成员离开对话时发出。
client.on("chat.memberLeft", (identity) => {
console.log(identity)
})
chat.connected
当聊天与对话提供方连接时发出。
client.on("chat.connected", () => {
console.log("connected")
})
在极少数情况下,可能会出现延迟时间问题,导致消息在 SDK 加入聊天之前就已在聊天中发送。发生这种情况时,您可以使用 fetchMessages 在聊天连接后获取对话中的所有现有消息。请参阅以下代码示例:
client.on("chat.connected", async () = {
const messages = await
client.fetchMessages()
})
chat.disconnected
当聊天与对话提供程序断开连接时发出。
client.on("chat.disconnected", () => {
console.log("disconnected")
})
chat.dismissed
当聊天状态更改为 dismissed 时发出。
client.on("chat.dismissed", () => {
console.log("dismissed")
})
chat.timeout
当聊天结束时发出,原因是 timeout。
client.on("chat.timeout", () => {
console.log("timeout")
})
chat.ended
在聊天结束时触发。
client.on("chat.ended", () => {
console.log("ended")
})
chat.destroyed
在调用 destroyChat 时发出。
client.on("chat.destroyed", () => {
console.log("destroyed")
})
chat.checkInRequested
当可以签入聊天时发出。
chat.checkInTimedOut
在聊天签到超时时发出。
输入事件
当代理开始输入时,聊天适配器会发送一个信号,导致 typingStarted 事件被发送到无头 Web SDK。当代理停止输入时,系统会在三秒后发送一个信号,从而导致向无头 Web SDK 发送 typingEnded 事件。3 秒的超时时间不可配置。
chat.typingStarted
当成员开始输入内容时发出。
client.on("chat.typingStarted", (identity) => {
console.log(identity)
})
chat.typingEnded
当成员停止输入时发出。
client.on("chat.typingEnded", (identity) => {
console.log(identity)
})
Chat 签到事件
以下是聊天签到活动。
checkIn
确认最终用户是否在队列中。
方法签名
checkIn(): Promise<CheckInResponse>
返回值
返回一个 CheckInResponse 对象。
接口
interface CheckInResponse {
chat_id: number;
check_in_status: CheckInStatus;
check_in_at?: string;
}
enum CheckInStatus {
CONFIRMED = 'confirmed',
EXITED = 'exited',
PENDING = 'pending',
REQUESTED = 'requested',
SKIPPED = 'skipped',
TIMED_OUT = 'timed_out',
}
示例
try {
const response = await client.checkIn()
} catch (error) {
// handle error
}
exitCheckIn
从签到队列中移除用户。
方法签名
exitCheckIn(): Promise<CheckInResponse>
返回值
返回一个 CheckInResponse 对象。
接口
interface CheckInResponse {
chat_id: number;
check_in_status: CheckInStatus;
check_in_at?: string;
}
enum CheckInStatus {
CONFIRMED = 'confirmed',
EXITED = 'exited',
PENDING = 'pending',
REQUESTED = 'requested',
SKIPPED = 'skipped',
TIMED_OUT = 'timed_out',
}
notifyCheckInState
将入住对话框的显示状态通知后端。
方法签名
notifyCheckInState(data: CheckInVisibilityStateRequest): Promise<void>
接口
interface CheckInVisibilityStateRequest {
widget_minimized?: boolean;
tab_inactive?: boolean;
}
**Example**
try {
const visibilityState = {
widget_minimized: true,
tab_inactive: false,
}
await client.notifyCheckInState(visibilityState)
} catch (error) {
// handle error
}
rejoinChat
在用户未能确认入住后,将其重新放入队列中。
方法签名
rejoinChat(): Promise<CheckInResponse>
返回值
返回一个 CheckInResponse 对象。
接口
interface CheckInResponse {
chat_id: number;
check_in_status: CheckInStatus;
check_in_at?: string;
}
enum CheckInStatus {
CONFIRMED = 'confirmed',
EXITED = 'exited',
PENDING = 'pending',
REQUESTED = 'requested',
SKIPPED = 'skipped',
TIMED_OUT = 'timed_out',
}
示例
try {
const response = await client.rejoinChat()
} catch (error) {
// handle error
trackCheckInEvent
当界面触发签到事件时,向后端发送信号。当向最终用户显示签到对话框时,系统会使用此值。
方法签名
trackCheckInEvent(): Promise<void>
示例
try {
await client.trackCheckInEvent()
} catch (error) {
// handle error
共同浏览活动
以下是共同浏览特有的事件:
cobrowse.request
当最终用户或客服人员请求开始共同浏览会话时发出。
client.on("cobrowse.request", { from } => {
console.log("request by", from)
})
cobrowse.loaded
在共同浏览会话加载时触发。
client.on("cobrowse.loaded", session => {
console.log("cobrowse session", session)
})
cobrowse.updated
在共同浏览会话更新时发出。
client.on("cobrowse.updated", session => {
console.log("cobrowse session", session)
})
cobrowse.ended
在共同浏览会话结束时触发。
client.on("cobrowse.ended", session => {
console.log("cobrowse session", session)
})