Skip to content

Kurulum Yöntemleri

Widget'ı sitenize CDN (script etiketi) veya npm paketiyle ekleyebilirsiniz. En basit haliyle tek satır yeter; aşağıda her ortam için örnekler var.

Kurulum

npm kullanıyorsanız önce paketi ekleyin:

bash
yarn add webfon-client

Sonra widget'ı ortamınıza göre mount edin:

html
<!-- Statik site, WordPress veya herhangi bir HTML sayfası -->
<script src="https://assets.webfon.io/sdk.js" data-provider-id="PROVIDER_ID" async></script>
vue
<script setup>
import { onMounted, onUnmounted } from 'vue';
import { initWebfon } from 'webfon-client';

let widget;
onMounted(() => { widget = initWebfon({ providerId: 'PROVIDER_ID' }); });
onUnmounted(() => widget?.destroy());
</script>
jsx
import { useEffect } from 'react';
import { initWebfon } from 'webfon-client';

export function WebfonWidget() {
  useEffect(() => {
    const widget = initWebfon({ providerId: 'PROVIDER_ID' });
    return () => widget?.destroy();          // unmount'ta temizle
  }, []);

  return null; // widget kendi host elemanını Shadow DOM'a ekler
}
svelte
<script>
  import { onMount, onDestroy } from 'svelte';
  import { initWebfon } from 'webfon-client';

  let widget;
  onMount(() => { widget = initWebfon({ providerId: 'PROVIDER_ID' }); });
  onDestroy(() => widget?.destroy());
</script>

CDN bundle, DOM hazır olduğunda bir providerId bulursa widget'ı otomatik mount eder. npm'de initWebfon(config) bir örnek (instance) döndürür — tüm metodlar için bkz. Metod Referansı. Widget kendi Shadow DOM host'unu oluşturur; host Vue/React/Svelte uygulamanızdan bağımsızdır.

CDN data-* öznitelikleri

data-* yalnızca metin (string) taşıyabilir:

ÖznitelikZorunluAçıklama
data-provider-idSağlayıcı kimliği
data-api-urlAPI kök adresini ezer (varsayılan: https://api.webfon.io)

getToken gibi fonksiyon taşıyan ayarlar data-* ile verilemez; bunun için script'ten öncewindow.WebfonConfig tanımlayın (aşağıdaki tam örneğe bakın). Manuel kontrol (otomatik mount yerine) için window.Webfon.init() kullanılabilir.

Tam örnek

Üye girişi (getToken), kendi "Sohbet" butonunuz, olay callback'i ve temizleme ile eksiksiz kurulum. getToken, widget'ın bağlantı anahtarı parmak izini (jkt) alır ve backend'inize iletir; backend soket token'ını imzalar (bkz. Kimlik Doğrulama).

html
<script>
  window.WebfonConfig = {
    providerId: 'PROVIDER_ID',
    apiUrl: 'https://api.webfon.io',            // opsiyonel (varsayılan bu)
    getToken: async ({ jkt }) => {              // üye değilse null → ziyaretçi
      const res = await fetch('/api/webfon-token', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        credentials: 'include',
        body: JSON.stringify({ jkt }),
      });
      return res.ok ? (await res.json()).token : null;
    },
    onMessage: (m) => console.log('yeni mesaj', m),
  };
</script>
<script src="https://assets.webfon.io/sdk.js" async></script>
<button onclick="window.Webfon.open()">Canlı Destek</button>
vue
<script setup>
import { onMounted, onUnmounted } from 'vue';
import { initWebfon, toggleApp } from 'webfon-client';

let widget;
onMounted(() => {
  widget = initWebfon({
    providerId: 'PROVIDER_ID',
    getToken: async ({ jkt }) => {              // üye değilse null → ziyaretçi
      const res = await fetch('/api/webfon-token', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        credentials: 'include',
        body: JSON.stringify({ jkt }),
      });
      return res.ok ? (await res.json()).token : null;
    },
    onMessage: (m) => console.log('yeni mesaj', m),
  });
});
onUnmounted(() => widget?.destroy());
</script>

<template>
  <button @click="toggleApp(true)">Canlı Destek</button>
</template>
jsx
import { useEffect } from 'react';
import { initWebfon, toggleApp } from 'webfon-client';

export function WebfonWidget() {
  useEffect(() => {
    const widget = initWebfon({
      providerId: 'PROVIDER_ID',
      getToken: async ({ jkt }) => {            // üye değilse null → ziyaretçi
        const res = await fetch('/api/webfon-token', {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          credentials: 'include',
          body: JSON.stringify({ jkt }),
        });
        return res.ok ? (await res.json()).token : null;
      },
      onMessage: (m) => console.log('yeni mesaj', m),
    });
    return () => widget?.destroy();
  }, []);

  return <button onClick={() => toggleApp(true)}>Canlı Destek</button>;
}
svelte
<script>
  import { onMount, onDestroy } from 'svelte';
  import { initWebfon, toggleApp } from 'webfon-client';

  let widget;
  onMount(() => {
    widget = initWebfon({
      providerId: 'PROVIDER_ID',
      getToken: async ({ jkt }) => {            // üye değilse null → ziyaretçi
        const res = await fetch('/api/webfon-token', {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          credentials: 'include',
          body: JSON.stringify({ jkt }),
        });
        return res.ok ? (await res.json()).token : null;
      },
      onMessage: (m) => console.log('yeni mesaj', m),
    });
  });
  onDestroy(() => widget?.destroy());
</script>

<button on:click={() => toggleApp(true)}>Canlı Destek</button>

TIP

Verilebilecek tüm parametreler için Yapılandırma, üye girişi ve token imzalama örnekleri için Kimlik Doğrulama sayfasına bakın.

Webfon canlı destek widget dokümantasyonu