Skip to main content

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.

This is the 5-minute integration walkthrough. Before you start, make sure you’ve completed Installation.

1. Install the plugin

The KontextAdsPlugin initializes a session that’s available to every component in your app via the useAds() composable.
// main.ts
import { createApp } from 'vue'
import { KontextAdsPlugin } from '@kontextso/sdk-vue'
import App from './App.vue'

const app = createApp(App)

app.use(KontextAdsPlugin, {
  publisherToken: '<your-publisher-token>',
  userId: 'user-1234',
  conversationId: 'conv-5678',
  character: {
    id: 'character-1234',
    name: 'John Doe',
    avatarUrl: 'https://example.com/avatar.png',
    greeting: 'Hello, how can I help you today?',
  },
  onEvent: ({ name, code, payload }) => {
    // process events
  },
})

app.mount('#app')
If you’d rather scope a session to part of your component tree, use <AdsProvider> instead — it accepts the same options as the plugin.
<script setup lang="ts">
import { AdsProvider } from '@kontextso/sdk-vue'

const character = {
  id: 'character-1234',
  name: 'John Doe',
  avatarUrl: 'https://example.com/avatar.png',
  greeting: 'Hello, how can I help you today?',
}
</script>

<template>
  <AdsProvider
    publisher-token="<your-publisher-token>"
    user-id="user-1234"
    conversation-id="conv-5678"
    :character="character"
  >
    <TheRestOfYourApplication />
  </AdsProvider>
</template>

2. Feed messages to the SDK

The SDK preloads ads in response to new chat messages. Call addMessage() from the useAds() composable whenever a user or assistant message is created.
<script setup lang="ts">
import { useAds } from '@kontextso/sdk-vue'

const { addMessage } = useAds()

// Call this on every user and assistant message in the conversation.
addMessage({
  id: '<unique-message-id>',
  role: '<user | assistant>',
  content: '<content of the message>',
  createdAt: new Date(),
})
</script>

3. Mount <InlineAd>

An ad slot is a designated area in your UI where an ad can be rendered. In most cases, it appears below an assistant message. Place <InlineAd /> wherever the ad should appear and pass the messageId of the assistant message it’s associated with.
<script setup lang="ts">
import { InlineAd } from '@kontextso/sdk-vue'

defineProps<{ messages: Message[] }>()
</script>

<template>
  <div>
    <div v-for="m in messages" :key="m.id">
      <Message :message="m" />
      <InlineAd v-if="m.role === 'assistant'" :messageId="m.id" />
    </div>
  </div>
</template>

Observing events

Subscribe to ad lifecycle events via the plugin or <AdsProvider> onEvent prop. Every event has a stable name and a typed payload:
app.use(KontextAdsPlugin, {
  // ...
  onEvent: (event) => {
    switch (event.name) {
      case 'ad.filled':
        console.log('filled:', event.payload.id, 'revenue=', event.payload.revenue)
        break
      case 'ad.clicked':
        console.log('clicked:', event.payload.url)
        break
      case 'ad.no-fill':
        console.log('no fill, skipCode=', event.payload.skipCode)
        break
    }
  },
})
Every placement-attributed event (ad.filled, ad.viewed, ad.clicked, ad.render-*, video.*, reward.granted) also carries a top-level code field naming the matched placement, so publishers with multiple enabledPlacementCodes can disambiguate. Session-wide events (ad.no-fill, ad.error) omit it. For SDK-internal diagnostics during integration, also pass an onDebugEvent callback — it receives (name, data?) for every internal step.