1. 创建会话
引入createSession(),为某个用户的某次对话配置会话。返回的 Session 是后续一切操作的入口——喂消息、创建广告、监听事件。
userId应在用户的整个生命周期内、跨会话与设备保持不变——它驱动个性化、频次封顶以及奖励广告。conversationId应在每个聊天线程(一个聊天室、一个工单、应用中的一次对话)内唯一。
2. 向 SDK 喂消息
SDK 会根据新的聊天消息预加载广告。无论是用户消息还是助手消息,每出现一条就调用一次addMessage()——两种角色都需要喂入,Kontext 才能完整理解对话上下文。
id必须每条消息唯一且稳定——后续创建广告时会用同一个 id 引用。
3. 挂载广告
要展示广告,先为目标助手消息创建一个Ad 实例,再将它挂载到一个 DOM 元素中。SDK 负责管理 iframe 及其生命周期。
- 渲染消息列表。
- 为每条助手消息渲染一个占位的
<div>作为广告容器。 - 当占位 DOM 存在后调用
session.createAd(messageId),再调用ad.mount(element)。 - 当消息被滚动出视野或对话结束时,调用
ad.destroy()释放 iframe。
session.render({ messageId, element, theme }) 是 createAd + mount 的便捷封装。
4. 释放资源
对话结束或页面卸载时调用session.destroy()。该方法是幂等的,且是取消进行中预加载、释放 iframe 资源的必要操作。
订阅事件
通过onEvent 回调订阅每个广告的生命周期。每个事件都有稳定的字符串 name 和类型化的 payload:
ad.filled、ad.viewed、ad.clicked、ad.render-*、video.*、reward.granted)的顶层还携带一个 code 字段,标识匹配到的广告位——配置了多个 enabledPlacementCodes 的发布方可以据此区分。会话级事件(ad.no-fill、ad.error)则不带这个字段。
接入期间若需查看 SDK 内部诊断信息,可以再传入 onDebugEvent 回调——它会对 SDK 的每一个内部步骤回调 (name, data?)。