คู่มือนักพัฒนา

API ระบุตัวตนผู้เยี่ยมชม

ระบุตัวตนผู้ใช้ที่เข้าสู่ระบบอยู่ผ่านโค้ด เพื่อไม่ให้ผู้ใช้เห็นหน้าขออีเมล และบทสนทนาของผู้ใช้จะเชื่อมกับผู้ติดต่อโดยอัตโนมัติ

ควรใช้เมื่อใด

หากเว็บไซต์ของคุณมีผู้ใช้ที่เข้าสู่ระบบ (แอป SaaS แดชบอร์ด พอร์ทัลสมาชิก) แสดงว่าคุณรู้อยู่แล้วว่าผู้ใช้เป็นใคร ใช้คำสั่ง identify เพื่อส่งอีเมลของผู้ใช้ให้ Sonny ผู้ใช้จะได้ไม่ต้องกรอกอีเมลอีก

  • ข้ามหน้าขออีเมลไปเลยสำหรับผู้ใช้ที่เข้าสู่ระบบอยู่
  • เชื่อมบทสนทนาในแชทเข้ากับข้อมูลผู้ติดต่อของผู้ใช้โดยอัตโนมัติ
  • เห็นชื่อและอีเมลของผู้เยี่ยมชมในกล่องข้อความได้ทันที
  • ใช้ประวัติต่อเนื่องข้ามเบราว์เซอร์และอุปกรณ์ด้วยข้อมูลระบุตัวตนที่ยืนยันแล้ว

ความต่อเนื่องข้ามอุปกรณ์

ข้อมูลระบุตัวตนผู้เยี่ยมชมที่ยืนยันแล้ว

การระบุตัวตนด้วยอีเมลแบบพื้นฐานนั้นสะดวก แต่เบราว์เซอร์อ้างเป็นอีเมลใดก็ได้ ข้อมูลระบุตัวตนที่ยืนยันแล้วจะเพิ่ม JWT อายุสั้นที่ลงนามโดยเซิร์ฟเวอร์ของคุณ จากนั้น Sonny จะใช้ผู้ติดต่อของลูกค้าเป็นเจ้าของประวัติแชทบนเว็บไซต์ได้อย่างปลอดภัย บทสนทนาชุดเดียวกันจึงแสดงบนเบราว์เซอร์หรืออุปกรณ์อื่นได้

ปิด

ค่าเริ่มต้น ไม่มีอะไรเปลี่ยนแปลงสำหรับโค้ดฝังหรือผู้เยี่ยมชมที่มีอยู่ ประวัติยังผูกกับ ID ผู้เยี่ยมชมของเบราว์เซอร์

การยืนยันแบบไม่บังคับ (แนะนำ)

JWT ที่ถูกต้องจะได้รับประวัติข้ามอุปกรณ์ ผู้เยี่ยมชมที่ไม่มี JWT จะยังใช้งานแบบไม่ระบุตัวตนหรือระบุตัวตนด้วยอีเมลได้ตามเดิม

ต้องมีหลักฐานเพื่อระบุตัวตน

แชทแบบไม่ระบุตัวตนยังใช้งานได้ แต่การเรียก identify และแอตทริบิวต์ที่กำหนดเองต้องใช้ JWT ที่ลงนามถูกต้อง

โหมดการยืนยันไม่ได้ทำให้ฟิลด์ก่อนเริ่มแชทที่บังคับกรอกกลายเป็นไม่บังคับ ดูว่าแต่ละโหมดจัดการกับอีเมลที่บังคับกรอกอย่างไรได้ในรายละเอียดก่อนเริ่มแชทที่บังคับกรอก

1. สร้างคีย์ลับสำหรับลงนาม

เปิด ช่องทาง → ช่องทางของคุณ → แชทสด หา การยืนยันตัวตนของผู้เยี่ยมชมแบบปลอดภัย เลือกโหมด แล้วสร้างคีย์ลับ ข้อความต้นฉบับของคีย์จะแสดงเพียงครั้งเดียว บันทึกไว้ในระบบจัดการข้อมูลลับของแบ็กเอนด์เป็น SONNY_IDENTITY_SECRET ห้ามใส่คีย์ลับสำหรับลงนามไว้ในโค้ดฝั่งเบราว์เซอร์ สคริปต์ฝัง ตัวแปรสภาพแวดล้อมสาธารณะ หรือรีโพซิทอรีซอร์สโค้ดของคุณ

2. ออก JWT อายุสั้นบนแบ็กเอนด์ของคุณ

ลงนามด้วย HS256 Sonny ต้องการ user_id, email, iat และ exp โดย user_id ต้องเป็น ID ที่คงที่จากฐานข้อมูลของคุณเอง ไม่ใช่ที่อยู่อีเมล โทเค็นมีอายุได้สูงสุด 24 ชั่วโมง และ 15 นาทีเป็นค่าเริ่มต้นที่เหมาะสม นาฬิกาอาจคลาดเคลื่อนกันได้สูงสุด 60 วินาที

คุณยังใส่ออบเจ็กต์ traits ที่ลงนามโดยเซิร์ฟเวอร์ได้ด้วย สำหรับบริบทการดูแลลูกค้าที่เชื่อถือได้ เช่น merchantName, subdomain, plan, platform และ role ค่าของ trait ต้องเป็นสตริง ตัวเลขที่มีขอบเขตจำกัด บูลีน หรือ null Sonny จะจัดเก็บไว้ในข้อมูลระบุตัวตนของผู้ติดต่อที่ยืนยันแล้วในขอบเขตของเว็บไซต์ แอตทริบิวต์ที่ส่งมาจากเบราว์เซอร์จะยังคงเป็นแบบยังไม่ยืนยัน และจะไม่ถูกยกระดับเป็น trait ที่ลงนามเหล่านี้

Node.js
import { SignJWT } from 'jose';

export async function createSonnyIdentityToken(user) {
  const secret = new TextEncoder().encode(process.env.SONNY_IDENTITY_SECRET);

  return new SignJWT({
    user_id: String(user.id),
    email: user.email,
    traits: {
      merchantName: user.merchant.name,
      subdomain: user.merchant.subdomain,
      plan: user.merchant.plan,
      platform: user.merchant.platform,
      role: user.role
    }
  })
    .setProtectedHeader({ alg: 'HS256' })
    .setIssuedAt()
    .setExpirationTime('15m')
    .sign(secret);
}
Ruby
require 'jwt'

def sonny_identity_token(user)
  now = Time.now.to_i
  payload = {
    user_id: user.id.to_s,
    email: user.email,
    traits: {
      merchantName: user.merchant.name,
      subdomain: user.merchant.subdomain,
      plan: user.merchant.plan,
      platform: user.merchant.platform,
      role: user.role
    },
    iat: now,
    exp: now + 15 * 60
  }

  JWT.encode(payload, ENV.fetch('SONNY_IDENTITY_SECRET'), 'HS256')
end
Python
import os
from datetime import datetime, timedelta, timezone
import jwt

def sonny_identity_token(user):
    now = datetime.now(timezone.utc)
    return jwt.encode({
        "user_id": str(user.id),
        "email": user.email,
        "traits": {
            "merchantName": user.merchant.name,
            "subdomain": user.merchant.subdomain,
            "plan": user.merchant.plan,
            "platform": user.merchant.platform,
            "role": user.role,
        },
        "iat": now,
        "exp": now + timedelta(minutes=15),
    }, os.environ["SONNY_IDENTITY_SECRET"], algorithm="HS256")
PHP
use Firebase\JWT\JWT;

function sonnyIdentityToken($user): string {
    $now = time();
    return JWT::encode([
        'user_id' => (string) $user->id,
        'email' => $user->email,
        'traits' => [
            'merchantName' => $user->merchant->name,
            'subdomain' => $user->merchant->subdomain,
            'plan' => $user->merchant->plan,
            'platform' => $user->merchant->platform,
            'role' => $user->role,
        ],
        'iat' => $now,
        'exp' => $now + (15 * 60),
    ], $_ENV['SONNY_IDENTITY_SECRET'], 'HS256');
}

3. ส่งเฉพาะ JWT ให้วิดเจ็ต

ส่งคืน JWT จากเอนด์พอยต์ที่ป้องกันด้วยเซสชันปกติของแอปพลิเคชันคุณ เรียก identify ก่อนหรือหลัง init ก็ได้ วิดเจ็ตเก็บ JWT ไว้ในหน่วยความจำเท่านั้น จะไม่บันทึกลงใน localStorage คุกกี้ หรือ URL

JavaScript
// Fetch a short-lived JWT from your authenticated backend.
// Your signing secret never reaches this code.
const { userJwt } = await fetch('/api/sonny-identity').then((res) => res.json());

sonny('identify', { userJwt });
sonny('init', { siteId: 'YOUR_SITE_ID' });

// Sonny asks for a fresh token after expiry or an emergency key change.
window.addEventListener('sonny:identity-required', async () => {
  const { userJwt } = await fetch('/api/sonny-identity').then((res) => res.json());
  sonny('identify', { userJwt });
});

รีเฟรช ออกจากระบบ และหมุนเวียนคีย์อย่างปลอดภัย

  • รีเฟรช: รีเฟรช JWT ก่อนหมดอายุ ประมาณ 10 นาทีสำหรับโทเค็นอายุ 15 นาที แล้วเรียก sonny('identify', { userJwt }) และรอฟัง sonny:identity-required ไว้เป็นทางสำรองเมื่อโทเค็นหมดอายุหรือคีย์ลงนามเปลี่ยน
  • ออกจากระบบ: เรียก sonny('reset') คำสั่งนี้จะทิ้ง JWT ในหน่วยความจำ ล้างเซสชันวิดเจ็ตของเบราว์เซอร์ และเริ่มผู้เยี่ยมชมแบบไม่ระบุตัวตนใหม่
  • สลับบัญชี: เรียก sonny('reset') สำหรับผู้ใช้ A ก่อนดึง JWT ของผู้ใช้ B และเรียก sonny('identify', { userJwt }) ห้ามนำโทเค็นของผู้ใช้คนหนึ่งไปใช้ในเซสชันที่เข้าสู่ระบบของผู้ใช้อีกคน
  • การหมุนเวียนตามปกติ: Sonny ยอมรับคีย์ลับก่อนหน้าเป็นเวลา 24 ชั่วโมง เพื่อให้คุณมีเวลาอัปเดตแบ็กเอนด์ทุกอินสแตนซ์ การหมุนเวียนตามปกติครั้งที่สองจะถูกบล็อกจนกว่าช่วงเวลาซ้อนทับนั้นจะสิ้นสุด
  • สงสัยว่าคีย์ลับรั่วไหล: เลือก แทนที่ทันที คีย์ลงนามเก่าทั้งสองจะหยุดยืนยันคำขอใหม่ทันที และวิดเจ็ตที่เชื่อมต่ออยู่จะขอ JWT ใหม่จากหน้าโฮสต์
  • ปิดการยืนยัน: Sonny จะทิ้งคีย์ลับสำหรับลงนามทั้งปัจจุบันและก่อนหน้า และตัดการเชื่อมต่อวิดเจ็ตที่ยืนยันแล้ว สร้างคีย์ลับใหม่ก่อนเปิดใช้การยืนยันอีกครั้ง

ข้อมูลระบุตัวตนที่ขัดแย้งกันจะไม่ถูกรวมโดยอัตโนมัติ

หาก ID ผู้ใช้ที่คงที่และอีเมลชี้ไปยังผู้ติดต่อคนละรายใน Sonny การยืนยันจะแจ้งความขัดแย้งกลับมาแทนการรวมข้อมูลลูกค้าเข้าด้วยกันแบบเงียบๆ แก้ไขโทเค็นหรือรวมผู้ติดต่อใน Sonny แล้วลองอีกครั้ง

แชทที่เชื่อมไว้ด้วยอีเมลที่ไม่ได้ลงนามก่อนหน้านี้เพียงอย่างเดียว จะไม่ถูกถือเป็นประวัติที่ยืนยันแล้วโดยอัตโนมัติ เพื่อป้องกันไม่ให้อีเมลที่ส่งมาจากเบราว์เซอร์ปลดล็อกบทสนทนาของลูกค้ารายอื่น

การเข้าสู่ระบบศูนย์ช่วยเหลือ

เชื่อมระบบเข้าสู่ระบบของลูกค้าที่คุณมีอยู่เข้ากับหน้าช่วยเหลือที่เราโฮสต์ให้หรือที่ใช้โดเมนที่กำหนดเอง ใช้คีย์ลับสำหรับลงนามของเว็บไซต์และ JWT อายุสั้นแบบเดียวกับวิดเจ็ต การระบุตัวตนด้วยอีเมลแบบพื้นฐานและการเข้าสู่ระบบของพนักงาน Sonny จะไม่ให้สิทธิ์เข้าถึงในฐานะผู้อ่านที่ยืนยันแล้ว

  1. ทำการตั้งค่าข้อมูลระบุตัวตนผู้เยี่ยมชมที่ยืนยันแล้วด้านบนสำหรับช่องทางนี้ให้เสร็จ เปิดใช้การยืนยันแบบไม่บังคับ หรือต้องมีหลักฐานเพื่อระบุตัวตน ในช่องทาง → ช่องทางของคุณ → แชทสด
  2. สร้างเอนด์พอยต์ที่ผ่านการยืนยันตัวตนในแอปของคุณซึ่งส่งคืน { "userJwt": "SIGNED_TOKEN" } ออกโทเค็นบนเซิร์ฟเวอร์ของคุณจากลูกค้าที่เข้าสู่ระบบอยู่และ trait ที่เชื่อถือได้ ห้ามรับแพ็กเกจหรือบทบาทที่ร้องขอมาจากเบราว์เซอร์
  3. ในช่องทาง → ช่องทางของคุณ → ศูนย์ช่วยเหลือ → การเข้าถึงศูนย์ช่วยเหลือ ให้เลือกลูกค้าที่ยืนยันแล้ว และกลุ่มผู้ชมลูกค้า (ไม่บังคับ) ใส่หน้าเข้าสู่ระบบของแอปคุณเป็น URL สำหรับเข้าสู่ระบบของลูกค้า แล้วเลือกบันทึกการเข้าถึง
  4. หลังจากลูกค้าเข้าสู่ระบบแล้ว ให้ทำการแลกเปลี่ยนด้านล่าง โดยแทนที่ YOUR_SLUG ด้วยที่อยู่ศูนย์ช่วยเหลือ URL เข้าสู่ระบบเพียงอย่างเดียวยังไม่พอ แอปของคุณต้องทำการแลกเปลี่ยนนี้ให้เสร็จ
JavaScript
// Run after your application authenticates the customer.
// This endpoint must use the server's session and trusted customer traits.
const response = await fetch('/api/sonny-identity');
if (!response.ok) throw new Error('Unable to sign in to the help center');
const { userJwt } = await response.json();
const signIn = new URL('https://www.usesonny.com/help/YOUR_SLUG/auth');
signIn.searchParams.set('token', userJwt);
signIn.searchParams.set('return', '/help/YOUR_SLUG');
window.location.assign(signIn);

สำหรับโดเมนที่กำหนดเอง ให้ตั้ง signIn เป็น https://help.example.com/auth และกลับไปที่ / หรือ /articles/getting-started พาธสำหรับกลับของหน้าที่เราโฮสต์ให้จะขึ้นต้นด้วย /help/YOUR_SLUG ปลายทางที่กลับไปต้องอยู่บนโฮสต์เดียวกัน

การแลกเปลี่ยนจะตั้งคุกกี้แบบ HTTP-only ที่ปลอดภัย และเปลี่ยนเส้นทางเพื่อนำโทเค็นออกจาก URL เซสชันผู้อ่านจะหมดอายุพร้อมกับ JWT ไม่เกิน 24 ชั่วโมง ใช้โทเค็นอายุสั้นและหลีกเลี่ยงการบันทึก URL การแลกเปลี่ยนลงในล็อก JWT ใช้สำหรับการแลกเปลี่ยนเพื่อเข้าสู่ระบบครั้งนี้เท่านั้น ไม่ใช่ใส่ในลิงก์บทความที่แชร์

ทดสอบการเข้าสู่ระบบและสิทธิ์เข้าถึง

  1. เปิดศูนย์ช่วยเหลือแบบส่วนตัวขณะที่ยังไม่ได้เข้าสู่ระบบ กดปุ่มเข้าสู่ระบบ เข้าสู่ระบบในแอปของคุณ และตรวจสอบว่าคุณกลับมาที่ศูนย์ช่วยเหลือบนโดเมนที่เราโฮสต์ให้หรือโดเมนที่กำหนดเองเดิม
  2. ตรวจสอบบทความที่อนุญาตหนึ่งบทความและบทความที่ไม่อนุญาตหนึ่งบทความ ทั้งในการเรียกดู การค้นหา และการเปิดจาก URL โดยตรง ลูกค้าที่อยู่นอกกลุ่มผู้ชมของศูนย์ช่วยเหลือจะเห็นข้อความแจ้งเรื่องสิทธิ์เข้าถึง ส่วนบทความที่ไม่อนุญาตจะแสดงว่าไม่พบ
  3. ใช้ปุ่มออกจากระบบในศูนย์ช่วยเหลือ และตรวจสอบว่าเนื้อหาส่วนตัวหายไป ทำซ้ำกับลูกค้าที่มี trait ต่างกัน

รีเฟรชและออกจากระบบ

วิดเจ็ตจะส่ง JWT ปัจจุบันโดยอัตโนมัติ รีเฟรช JWT เมื่อ Sonny ร้องขอ และเรียก sonny('reset') เมื่อลูกค้าของคุณออกจากระบบ ข้อมูลระบุตัวตนของวิดเจ็ตและคุกกี้ของศูนย์ช่วยเหลือแยกจากกัน การรีเซ็ตวิดเจ็ตไม่ได้ทำให้ออกจากระบบเซสชันศูนย์ช่วยเหลือที่เราโฮสต์ให้

หากต้องการออกจากระบบหน้าที่เราโฮสต์ให้ ให้ไปที่ /help/YOUR_SLUG/auth/logout ส่วนบนโดเมนที่กำหนดเองของคุณ ให้ใช้ /auth/logout เชื่อมการดำเนินการนี้เข้ากับขั้นตอนออกจากระบบของแอปคุณหากต้องการปิดทั้งสองเซสชัน ข้อมูลเข้าสู่ระบบที่ไม่ถูกต้องหรือหมดอายุจะได้รับสิทธิ์เข้าถึงแบบผู้เยี่ยมชม เมื่อปิดการยืนยันตัวตน ผู้อ่านทุกคนจะได้รับสิทธิ์เข้าถึงแบบผู้เยี่ยมชม

เมื่อ trait ของลูกค้าเปลี่ยน ให้ออก JWT ใหม่และระบุตัวตนอีกครั้งในวิดเจ็ต และทำการแลกเปลี่ยนเพื่อเข้าสู่ระบบซ้ำสำหรับหน้าที่เราโฮสต์ให้ คุกกี้ผู้อ่านที่มีอยู่จะยังใช้ trait ที่ลงนามไว้ก่อนหน้าจนกว่าจะหมดอายุ การเปลี่ยนแปลงกฎของกลุ่มผู้ชมจะมีผลในคำขอถัดไป

สร้างกลุ่มผู้ชม ดูตัวอย่างสิทธิ์เข้าถึง และแก้ปัญหาข้อจำกัด

การระบุตัวตนด้วยอีเมลไม่ใช่การยืนยันตัวตน

การระบุด้วยอีเมลที่ส่งมาจากเบราว์เซอร์ช่วยเพิ่มบริบทในการดูแลลูกค้า แต่ไม่ได้ยืนยันตัวตนของผู้เยี่ยมชม ผู้เยี่ยมชมสามารถตรวจดูและรัน JavaScript บนหน้าของตัวเองได้ ดังนั้นอีเมล ชื่อ และแอตทริบิวต์ที่กำหนดเองจะไม่มีทางปลดล็อกประวัติใน Sonny ของลูกค้ารายอื่น ข้อมูลระบุตัวตนที่ยืนยันแล้วต้องใช้ JWT ที่ลงนามโดยเซิร์ฟเวอร์ตามที่อธิบายไว้ด้านบน ให้เก็บการอนุญาตสำหรับการดำเนินการในผลิตภัณฑ์ของคุณไว้ภายในแอปพลิเคชันที่ผู้ใช้เข้าสู่ระบบอยู่

เมื่อเปิดใช้การยืนยันผู้เยี่ยมชม ป้ายยืนยันแล้ว ในกล่องข้อความหมายความว่าบทสนทนาถูกเชื่อมด้วย JWT ที่ลงนามโดยเซิร์ฟเวอร์ ส่วน ป้ายยังไม่ยืนยัน หมายความว่าไม่มีข้อมูลระบุตัวตนที่ลงนามโดยเซิร์ฟเวอร์มายืนยันบทสนทนานั้น ชื่อหรืออีเมลที่แสดงเป็นเพียงบริบทที่ผู้เยี่ยมชมให้มา ไม่ใช่หลักฐานยืนยันตัวตน

ตัวอย่างโค้ด

การเรียกแบบง่ายที่สุด แค่ส่งอีเมลของผู้ใช้:

JavaScript
// Identify a logged-in user
sonny('identify', {
  email: 'jane@example.com'
});

ส่งชื่อของผู้ใช้ไปด้วย เพื่อให้เจ้าหน้าที่เห็นในกล่องข้อความ:

JavaScript
// Identify with full name
sonny('identify', {
  email: 'jane@example.com',
  name: 'Jane Smith'
});

เพิ่มบริบทที่เป็นประโยชน์ต่อการดูแลลูกค้าระหว่างการระบุตัวตน อัปเดตภายหลัง หรือติดตามค่าที่เปลี่ยนแปลงขณะที่เปิดหน้าอยู่:

JavaScript
// Identify with support context
sonny('identify', {
  email: 'jane@example.com',
  name: 'Jane Smith',
  attributes: {
    plan: 'starter',
    seats: 5,
    trial: true
  }
});

// Update only the values that changed
sonny('setAttributes', {
  plan: 'growth',
  seats: 8,
  trial: null // Clears this property
});

// Keep a changing value in sync (checks every 10 seconds)
sonny('watchAttributes', () => ({
  monthly_usage: window.currentUsage
}), { interval: 10000 });

ตัวอย่างฉบับเต็มพร้อมสคริปต์แบบ async โปรดทราบว่าเรียก identify ได้ ก่อน init ข้อมูลระบุตัวตนจะถูกเข้าคิวไว้และส่งทันทีที่วิดเจ็ตเชื่อมต่อ:

HTML
<!-- Sonny widget snippet -->
<script>
  (function(w,d,s,o,f,js,fjs){
    w['Sonny']=o;w[o]=w[o]||function(){
    (w[o].q=w[o].q||[]).push(arguments)};
    js=d.createElement(s);fjs=d.getElementsByTagName(s)[0];
    js.id=o;js.src=f;js.async=1;fjs.parentNode.insertBefore(js,fjs);
  })(window,document,'script','sonny','https://www.usesonny.com/widget.js');

  // Identify before init — identity is queued and sent on connect
  sonny('identify', {
    email: 'jane@example.com',
    name: 'Jane Smith'
  });

  sonny('init', { siteId: 'YOUR_SITE_ID' });
</script>

เรียก reset เมื่อผู้ใช้ออกจากระบบ เพื่อล้างข้อมูลระบุตัวตนและเริ่มเซสชันใหม่:

JavaScript
// Reset on logout — clears identity and starts a fresh session
sonny('reset');

วิธีการทำงาน

  1. 01

    วิดเจ็ตโหลดและเชื่อมต่อ

    วิดเจ็ตเชื่อมต่อกับ Sonny และส่งข้อมูลระบุตัวตนที่จัดเก็บไว้ไปด้วยเมื่อเข้าร่วม

  2. 02

    ข้อมูลระบุตัวตนถูกส่งไปยังเซิร์ฟเวอร์

    Sonny จะค้นหาผู้ติดต่อที่มีอีเมลนั้นในเวิร์กสเปซของคุณ และสร้างใหม่หากยังไม่มี

  3. 03

    บทสนทนาถูกเชื่อมเข้าด้วยกัน

    บทสนทนาที่ยังไม่ได้เชื่อมในเซสชันผู้เยี่ยมชมของเบราว์เซอร์ปัจจุบันจะถูกเชื่อมกับผู้ติดต่อที่ระบุตัวตนแล้ว การระบุตัวตนไม่ได้รวมประวัติระหว่างเบราว์เซอร์หรืออุปกรณ์

  4. 04

    ข้ามหน้าขออีเมล

    เนื่องจากผู้เยี่ยมชมระบุตัวตนแล้ว หน้าขออีเมลในวิดเจ็ตจึงไม่แสดง ผู้ใช้จะไม่ถูกขัดจังหวะ

กฎของแอตทริบิวต์ที่กำหนดเอง

  • ส่งแอตทริบิวต์ได้ไม่เกิน 50 รายการต่อการเรียกหนึ่งครั้ง
  • ค่าอาจเป็นสตริง ตัวเลข บูลีน หรือ null สตริงยาวได้ไม่เกิน 1000 อักขระ ส่ง null หรือสตริงว่างเพื่อล้างค่าที่บันทึกไว้
  • คีย์ต้องขึ้นต้นด้วยตัวอักษร และมีได้เฉพาะตัวอักษร ตัวเลข และขีดล่าง ยาวได้สูงสุด 64 อักขระ
  • คีย์ต่อไปนี้สงวนไว้และจะถูกละเว้น: email, name, id, phone, createdAt, updatedAt

เอกสารอ้างอิง API

sonny('identify', { email, name?, attributes? })
ระบุตัวตนผู้เยี่ยมชมปัจจุบัน ตั้งค่าอีเมลและชื่อ (ไม่บังคับ) ข้ามหน้าขออีเมล และส่งข้อมูลระบุตัวตนไปยังเซิร์ฟเวอร์ เรียกได้ทั้งก่อนหรือหลัง init
  • emailstringที่อยู่อีเมลของผู้เยี่ยมชม
  • namestring?ชื่อที่แสดงของผู้เยี่ยมชม
  • attributesobject?แอตทริบิวต์ที่กำหนดเองที่จะแนบกับผู้ติดต่อ (ดูกฎของคีย์และค่าได้ในคู่มือการตั้งค่าวิดเจ็ต)
sonny('identify', { userJwt, name?, attributes? })
ระบุตัวตนลูกค้าปัจจุบันที่เข้าสู่ระบบอยู่อย่างปลอดภัยจาก JWT ที่สร้างโดยเซิร์ฟเวอร์ โทเค็นจะอยู่ในหน่วยความจำเท่านั้น และส่งเฉพาะในคำขอหรือเพย์โหลดของ socket ที่ผ่านการยืนยันตัวตนแล้ว
  • userJwtstringJWT แบบ HS256 ใหม่ที่ออกโดยแบ็กเอนด์ที่ผ่านการยืนยันตัวตนของคุณ
  • namestring?ชื่อที่แสดงของผู้เยี่ยมชม
  • attributesobject?แอตทริบิวต์ที่กำหนดเองที่จะแนบกับผู้ติดต่อที่ยืนยันแล้ว
sonny('setAttributes', { ... })
อัปเดตแอตทริบิวต์ที่กำหนดเองของผู้เยี่ยมชมที่ระบุตัวตนแล้ว ระบบจะส่งเฉพาะค่าที่เปลี่ยนแปลง หากผู้เยี่ยมชมยังไม่ได้ระบุตัวตน การอัปเดตจะรอและส่งหลังจาก identify ทำงาน
  • attributesobjectคู่คีย์-ค่าที่จะตั้ง ส่ง null เป็นค่าเพื่อล้างแอตทริบิวต์
sonny('watchAttributes', getter, { interval? })
เรียกฟังก์ชัน getter ของคุณตามรอบเวลา และซิงก์แอตทริบิวต์ที่เปลี่ยนแปลงโดยอัตโนมัติ มีประโยชน์เมื่อค่าอย่างแพ็กเกจหรือการใช้งานเปลี่ยนขณะที่เปิดหน้าอยู่
  • getterfunctionฟังก์ชันที่ส่งคืนออบเจ็กต์แอตทริบิวต์ปัจจุบัน
  • intervalnumber?ความถี่ในการตรวจสอบ หน่วยเป็นมิลลิวินาที ค่าเริ่มต้น 10000 ต่ำสุด 2000
sonny('reset')
ล้าง ID วิดเจ็ต อีเมล ชื่อ และประวัติบทสนทนาในเครื่องของเบราว์เซอร์ปัจจุบัน แล้วเริ่มเซสชันผู้เยี่ยมชมใหม่ คำสั่งนี้ไม่ได้ลบผู้ติดต่อหรือฟิลด์ที่บันทึกไว้ใน Sonny ใช้คำสั่งนี้เมื่อออกจากระบบ

ต้องการความช่วยเหลือ?

ดูคู่มือการตั้งค่าวิดเจ็ต หรือติดต่อทีมของเรา

เอกสารที่เกี่ยวข้อง