Panduan SDK web tanpa UI

Web SDK tanpa UI memberi Anda fleksibilitas untuk memperluas dan menyesuaikan pengalaman dukungan perusahaan Anda sesuai kebutuhan. SDK ini berisi semua fitur web SDK yang biasa kami gunakan dan memberikan kemampuan untuk membuat UI dan UX untuk mendukungnya.

Menginstal dan menggunakan web SDK tanpa UI memerlukan dukungan dari tim pengembangan web organisasi Anda. Untuk melakukan integrasi yang berhasil dan mencapai performa yang optimal, Google merekomendasikan untuk melibatkan personel Anda yang memenuhi syarat.

Dalam konteks pengembangan software, "tanpa UI" mengacu pada arsitektur yang terpisah, tempat lapisan presentasi frontend ("head") dipisahkan dari logika dan kemampuan backend. Dalam arsitektur tanpa UI, backend, yang juga dikenal sebagai bagian "tanpa UI", menyediakan API yang memungkinkan Anda menggunakan fitur dan layanannya.

Contohnya adalah otomatisasi alur kerja kustom. Saat pengguna akhir memulai chat, peristiwa on("chat.message") akan dipicu. Anda dapat menentukan pemicu otomatisasi kustom berdasarkan pesan chat tertentu yang telah Anda terima. Misalnya, jika pengguna akhir mengetik "Escalate" di chat, pengendali peristiwa dapat otomatis meningkatkan sesi chat ke tim dukungan tingkat yang lebih tinggi, sehingga memberikan perhatian segera pada masalah penting.

Panduan ini membahas proses penginstalan, kemampuan integrasi, dan penggunaan SDK. Untuk mengetahui detail tentang cara menggunakan API, lihat dokumentasi API web SDK tanpa UI. Daftar peristiwa yang tersedia dapat ditemukan di halaman peristiwa.

Menginstal web SDK tanpa UI

Untuk menginstal web SDK tanpa UI, gunakan cuplikan kode berikut di project Anda:

npm install @ujet/websdk-headless --save

Menggunakan web SDK tanpa UI

Untuk menggunakan Web SDK tanpa UI, Anda dapat mengikuti contoh kode yang disediakan:

import { Client } from "@ujet/websdk-headless"
const client = new Client({ ... })

async function authenticate() {
  const resp = await fetch("/your-auth-endpoint")
  const data = await resp.json()
  return { token: data.token }
}

const client = new Client({
  companyId: "YOUR-COMPANY-ID",
  tenant: "YOUR-TENANT-NAME",
  authenticate: authenticate,
})

// const company = await client.getCompany()
// const menus = await client.getMenus()

Class Klien menerima beberapa opsi (Anda dapat menyesuaikan sesuai dengan persyaratan Anda):

interface ClientOption {
  companyId: string;
  authenticate: () => Promise<TokenResponse>;
  tenant?: string;
  host?: string;
  lang?: string;
  bridge?: string;
  cobrowse?: {
    enabled: boolean;
    messages?: CobrowseMessages;
    api?: string;
    license?: string;
    trustedOrigins?: string[];
    capabilities?: string[];
    registration?: boolean;
    redactedViews?: string[];
    unredactedViews?: string[];
  };
}

Mengaktifkan logging

Selama penerapan dan pengujian, Anda mungkin perlu mengumpulkan informasi tambahan di log konsol. Untuk mengaktifkan logging untuk SDK tanpa UI, impor Logger dan consoleLoggerHandler dengan menambahkan kode berikut ke aplikasi web Anda:

import {Logger, consoleLoggerHandler } from '@ujet/websdk-headless'
Logger.addHandler(consoleLoggerHandler)

Mengonfigurasi Berbagi Layar

Anda dapat mengaktifkan dan mengonfigurasi Berbagi Layar menggunakan web SDK tanpa UI.

Contoh kode berikut menunjukkan cara mengaktifkan Berbagi Layar:

new Client({
  // ...
  cobrowse: {
    enabled: true,
    license: 'YOUR_SCREEN_SHARE_LICENSE'
  }
})

Contoh kode berikut menunjukkan opsi untuk Berbagi Layar:

interface CobrowseOption {
  enabled: boolean
  template?: string
  confirmSessionTemplate?: string
  confirmRemoteControlTemplate?: string
  confirmFullDeviceTemplate?: string
  sessionControlsTemplate?: string
  root?: Element
  messages?: {
    confirmSessionTitle: string;
    confirmSessionContent: string;
    confirmRemoteControlTitle: string;
    confirmRemoteControlContent: string;
    confirmFullDeviceTitle: string;
    confirmFullDeviceContent: string;
    allowText: string;
    denyText: string;
    endSessionText: string;
  }
  api?: string
  license?: string
  trustedOrigins?: string[]
  capabilities?: string[]
  registration?: boolean
  redactedViews?: string[]
  unredactedViews?: string[]
}

Template kustom

Anda dapat menyesuaikan template dialog Berbagi Layar menggunakan opsi template dari contoh kode sebelumnya.

Contoh berikut menunjukkan template default:

<dialog open class="cobrowse-dialog">
  <h1>$title</h1>
  <div class="cobrowse-dialog_content">$content</div>
  <div class="cobrowse-dialog_footer">
    <button class="cobrowse-dialog_allow js-cobrowse-allow">$allow</button>
    <button class="cobrowse-dialog_deny js-cobrowse-deny">$deny</button>
  </div>
</dialog>

Anda dapat menggunakan template ini untuk mengonfigurasi dialog yang meminta persetujuan dari pengguna akhir untuk hal berikut:

  • Memulai sesi Berbagi Layar

  • Memulai sesi Berbagi Layar kontrol jarak jauh

  • Memulai sesi Berbagi Layar perangkat lengkap

Berikut adalah opsi template:

  • confirmSessionTemplate: Untuk mengonfirmasi sesi Berbagi Layar.

  • confirmRemoteControlTemplate: Untuk mengonfirmasi sesi Berbagi Layar kontrol jarak jauh.

  • confirmFullDeviceTemplate. Untuk mengonfirmasi sesi Berbagi Layar perangkat lengkap.

  • sessionControlsTemplate: Untuk tombol kontrol sesi. Berikut template default: <button class="cobrowse-end js-cobrowse-end">$end</button>

Pesan

Variabel pesan berikut digunakan dalam template Kustom:

  • $title

  • $content

  • $allow

  • $deny

Contoh berikut menunjukkan cara menerapkan variabel ini:

{
  confirmSessionTitle: string;  // $title
  confirmSessionContent: string;  // $content
  confirmRemoteControlTitle: string;  // $title
  confirmRemoteControlContent: string;  // $content
  confirmFullDeviceTitle: string;  // $title
  confirmFullDeviceContent: string;  // $content
  allowText: string;  // $allow
  denyText: string;  // $deny
  endSessionText: string;  // $end
}

Contoh berikut menunjukkan nilai variabel bahasa Inggris default:

{
  "confirmSessionTitle": "Screen Share Session Request",
  "confirmSessionContent": "Do you want to share your current screen with the agent?",
  "endSessionText": "End Screen Share Session",
  "confirmRemoteControlTitle": "Remote Access Request",
  "confirmRemoteControlContent": "The agent would like to have access to your currently shared screen to further assist you. Do you want to allow this?",
  "confirmFullDeviceTitle": "Screen Share Request",
  "confirmFullDeviceContent": "Do you want to share your full screen with the agent? The agent will not be able to control anything on the screen.",
  "allowText": "Allow",
  "denyText": "Deny"
}

Konfigurasi data kustom

Opsi custom_data memungkinkan Anda meneruskan data pasangan nilai kunci arbitrer ke web SDK.

Penggunaan

Anda dapat memberikan data kustom sebagai objek (tidak ditandatangani) atau string (ditandatangani) saat membuat chat:

interface ChatRequest {
  lang?: string;
  trigger_id?: string;
  ticket_id?: string;
  email?: string;
  greeting?: string;
  cobrowsable?: boolean;
  custom_data?: {
    signed?: string;
    unsigned?: Record<string, any>;
  };
}

Lihat contoh berikut:

const custom_data = {
  unsigned: {
    version: {
      label: 'Version',
      value: '1.0.0'
    }
  },
  signed: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' // JWT or other signed payload
}

try {
  const chat: Chat = await client.createChat(123, { custom_data })
} catch (error) {
  // handle error
}

Transfer chatbot eksternal

Ada beberapa kasus ketika Anda mungkin ingin mempertahankan histori dan interaksi dari penyedia chat lainnya. Anda dapat melakukannya dengan menggunakan custom_data object.

Lihat contoh berikut:

const custom_data = {
  unsigned: {
    external_chat_transfer: {
      greeting_override: "Please hold while we connect you with a human agent.",
      agent: {
        name: "Agent Name",
        avatar: "https://ujet.s3.amazonaws.com/default-virtual-agent-avatar-1.png"
      },
      transcript: [
        {
          sender: "agent",
          timestamp: "2021-03-15 12:00:00Z",
          content: [
            {
              type: "text",
              text: "Hello! How can I help you today?"
            },
            {
              type: "buttons",
              buttons: [
                {
                  label: "Create New Order",
                  selected: false
                },
                {
                  label: "Check Order Status",
                  selected: true
                },
                {
                  label: "Check Account Balance",
                  selected: false
                },
              ]
            }
          ]
        },
        {
          sender: "end_user",
          timestamp: "2021-03-15 12:00:15Z",
          content: [
            {
              type: "text",
              text: "Check Order Status"
            }
          ]
        },
        {
          sender: "agent",
          timestamp: "2021-03-15 12:00:16Z",
          content: [
            {
              type: "text",
              text: "I can help you with that, what's your order number?"
            }
          ]
        },
        {
          sender: "end_user",
          timestamp: "2021-03-15 12:00:20Z",
          content: [
            {
              type: "media",
              media: {
                type: "image",
                url: "https://ujet.s3.amazonaws.com/default-virtual-agent-avatar-1.png"
              }
            }
          ]
        }
      ]
    }
  },
  signed: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...' // JWT or other signed payload
}

try {
  const chat: Chat = await client.createChat(123, { custom_data })
} catch (error) {
  // handle error
}

Penerapan referensi

Untuk penerapan referensi web SDK, lihat ccaas-web-headless-sdk-sample di GitHub.

Repositori ini berisi demonstrasi aplikasi chat yang dibuat menggunakan CCAI Platform Web Headless SDK. Repositori ini menampilkan arsitektur klien-server dasar tempat backend Node.js menangani autentikasi aman dan pengiriman konfigurasi, sementara frontend JavaScript murni menyediakan antarmuka pengguna chat.