> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kontext.so/llms.txt
> Use this file to discover all available pages before exploring further.

# API 参考

> Vue SDK 暴露的插件选项、composable、组件与事件。

## 插件 / `AdsProvider` 选项

<ParamField path="publisherToken" type="string" required>
  你的 publisher token。
</ParamField>

<ParamField path="userId" type="string" required>
  在用户整个生命周期内保持不变的唯一标识（用于再营销与奖励广告）。
</ParamField>

<ParamField path="userEmail" type="string" optional>
  用户邮箱。
</ParamField>

<ParamField path="conversationId" type="string" required>
  对话的唯一 ID。
</ParamField>

<ParamField path="enabledPlacementCodes" type="array" optional>
  本次对话启用的 placement code。默认为 `['inlineAd']`。
</ParamField>

<ParamField path="character" type="object" optional>
  本次对话使用的 character 对象。

  <Expandable title="字段">
    <ParamField path="id" type="string" required>角色的唯一 ID。</ParamField>
    <ParamField path="name" type="string" required>角色名称。</ParamField>
    <ParamField path="avatarUrl" type="string" required>角色头像 URL。</ParamField>
    <ParamField path="isNsfw" type="boolean" optional>标识该角色是否面向成人受众。</ParamField>
    <ParamField path="greeting" type="string" optional>角色的问候语。</ParamField>
    <ParamField path="persona" type="string" optional>角色性格的简要描述。</ParamField>
    <ParamField path="tags" type="array" optional>描述角色的标签。</ParamField>
  </Expandable>
</ParamField>

<ParamField path="regulatory" type="object" optional>
  本次对话的合规对象。

  <Expandable title="字段">
    <ParamField path="gdpr" type="integer" optional>请求是否受 GDPR 约束。（0 = 否，1 = 是，null = 未知）</ParamField>
    <ParamField path="gdprConsent" type="string" optional>IAB 透明度与同意框架（TCF）的 consent 字符串。</ParamField>
    <ParamField path="coppa" type="integer" optional>请求是否受 COPPA 约束。（0 = 否，1 = 是，null = 未知）</ParamField>
    <ParamField path="gpp" type="string" optional>Global Privacy Platform (GPP) consent 字符串。</ParamField>
    <ParamField path="gppSid" type="array" optional>本次请求适用的 GPP section ID 列表。</ParamField>
    <ParamField path="usPrivacy" type="string" optional>美国隐私法规（如 CCPA、LSPA）相关的消费者信号。</ParamField>
  </Expandable>
</ParamField>

<ParamField path="variantId" type="string" optional>
  发布方提供的用户分群标识（用于 A/B 测试）。
</ParamField>

<ParamField path="onEvent" type="function" optional>
  事件发生时的回调。详见下方"支持的事件"章节。
</ParamField>

<ParamField path="onDebugEvent" type="function" optional>
  SDK 内部诊断事件的回调。接收 `(name, data?)`——在接入期间排查 preload / session 行为时很有用。默认关闭。
</ParamField>

## `useAds()` composable

返回 `addMessage`，一个总是路由到当前会话的转发函数。如果 `<AdsProvider>` 切换了会话（例如 `publisherToken` 改变），下一次调用会自动指向新的会话。

<ParamField path="addMessage" type="function" required>
  `(message: Message, options?: AddMessageOptions) => void` —— 向 SDK 注册一条新消息。下一次预加载会被自动安排。

  `AddMessageOptions` 目前提供一个开关：

  <Expandable title="AddMessageOptions">
    <ParamField path="trackOnly" type="boolean" optional>
      当为 `true` 时，preload 请求仍会发出（用于分析），但本条消息不会展示广告。可用于在不丢失追踪数据的前提下抑制广告。
    </ParamField>
  </Expandable>
</ParamField>

## `Message` 结构

<ParamField path="id" type="string" required>消息的唯一 ID。</ParamField>
<ParamField path="role" type="string" required>消息角色（`user` 或 `assistant`）。</ParamField>
<ParamField path="content" type="string" required>消息文本。</ParamField>
<ParamField path="createdAt" type="Date" required>消息创建时间戳。</ParamField>

## `InlineAd` 属性

<ParamField path="messageId" type="string" required>本广告所属消息的唯一 ID。</ParamField>
<ParamField path="code" type="string" optional>Onboarding 时提供的 placement code。默认为 `'inlineAd'`。</ParamField>
<ParamField path="theme" type="string" optional>广告主题，例如 `light` 或 `dark`。</ParamField>

### Slots

<ParamField path="wrapper" type="slot" optional>
  render-prop 形式的具名插槽，允许你用自己的 DOM 结构包裹广告 iframe。插槽接收已渲染的广告作为 `ad`：

  ```vue theme={null}
  <InlineAd :messageId="m.id">
    <template #wrapper="{ ad }">
      <div class="my-ad-card">{{ ad }}</div>
    </template>
  </InlineAd>
  ```
</ParamField>

## 支持的事件

### `ad.clicked`

用户点击了广告。

<Expandable title="Payload">
  <ParamField path="id" type="string">广告 ID。</ParamField>
  <ParamField path="content" type="string">生成的广告内容。</ParamField>
  <ParamField path="messageId" type="string">消息 ID。</ParamField>
  <ParamField path="url" type="string">点击跳转的 URL。</ParamField>
  <ParamField path="format" type="string">广告形式。</ParamField>
  <ParamField path="area" type="string">用户点击的素材区域（例如 `'cta'`、`'banner'`）。</ParamField>
</Expandable>

### `ad.viewed`

用户已查看广告。

<Expandable title="Payload">
  <ParamField path="id" type="string">广告 ID。</ParamField>
  <ParamField path="content" type="string">生成的广告内容。</ParamField>
  <ParamField path="messageId" type="string">消息 ID。</ParamField>
  <ParamField path="format" type="string">广告形式。</ParamField>
  <ParamField path="revenue" type="number" optional>广告收入（美元计的 eCPM）。</ParamField>
</Expandable>

### `ad.filled`

有可投放的广告。

<Expandable title="Payload">
  <ParamField path="id" type="string">广告 ID。</ParamField>
  <ParamField path="code" type="string">与该广告匹配的 placement code。</ParamField>
  <ParamField path="revenue" type="number" optional>广告收入（美元计的 eCPM）。</ParamField>
</Expandable>

### `ad.no-fill`

没有可投放的广告。

<Expandable title="Payload">
  <ParamField path="skipCode" type="string">指示广告被跳过原因的代码。</ParamField>
</Expandable>

### `ad.render-started`

在第一个 token 到达之前触发。

<Expandable title="Payload">
  <ParamField path="id" type="string">广告 ID。</ParamField>
</Expandable>

### `ad.render-completed`

在最后一个 token 到达之后触发。

<Expandable title="Payload">
  <ParamField path="id" type="string">广告 ID。</ParamField>
</Expandable>

### `ad.error`

出现错误时触发。

<Expandable title="Payload">
  <ParamField path="message" type="string">错误信息。</ParamField>
  <ParamField path="errCode" type="string">错误代码。</ParamField>
</Expandable>

### `video.started`

视频开始播放时触发。

<Expandable title="Payload">
  <ParamField path="id" type="string">广告 ID。</ParamField>
</Expandable>

### `video.completed`

视频播放完成时触发。

<Expandable title="Payload">
  <ParamField path="id" type="string">广告 ID。</ParamField>
</Expandable>

### `reward.granted`

激励广告向用户发放奖励时触发。

<Expandable title="Payload">
  <ParamField path="id" type="string">广告 ID。</ParamField>
</Expandable>
