npm SDK — whatsapp-data-sdk

ไคลเอ็นต์ TypeScript/JavaScript อย่างเป็นทางการสำหรับ WhatsApp Data API มีเมธอดแบบกำหนดประเภทข้อมูล ไม่มีการพึ่งพาไลบรารีภายนอกในขณะรันไทม์ ค้นหาข้อมูลโดยใช้แคชเป็นหลัก และมีการจัดหมวดหมู่ข้อผิดพลาดที่ชัดเจน

ไม่มีการพึ่งพาใดๆ
พิมพ์ครบถ้วน
อีเอสเอ็ม + ซีเจเอส
npmGitHub

ติดตั้ง

npm install whatsapp-data-sdk
# or
pnpm add whatsapp-data-sdk
# or
yarn add whatsapp-data-sdk

ใช้ฟังก์ชัน fetch ดั้งเดิม — ใช้งานได้ใน Node 18 ขึ้นไป, Bun, Deno และเบราว์เซอร์ ไม่จำเป็นต้องใช้ axios หรือ polyfills

เริ่มต้นอย่างรวดเร็ว

import { WhatsAppDataClient } from 'whatsapp-data-sdk'

const client = new WhatsAppDataClient({
  apiKey: process.env.WA_API_KEY!, // sent as x-rapidapi-key
})

const profile = await client.getProfile('59898297150')
console.log(profile.exists, profile.about, profile.profilePic)

การตรวจสอบสิทธิ์และการขนส่ง

คีย์ API ของคุณจะถูกส่งไปในส่วนหัว x-rapidapi-key เสมอ เลือกปลายทางที่จะส่งคำขอโดยใช้ transport

transportพิธีกรสดแคช / โฮสต์เฉพาะฐานข้อมูลหมายเหตุ
'proxy' (ค่าเริ่มต้น)whatsapp-proxy.checkleaked.cc/number_cache บนโฮสต์เดียวกันเรียบง่าย — มี URL พื้นฐานเพียงอันเดียว ไม่มีส่วนหัวของโฮสต์
'rapidapi'wp-data.p.rapidapi.comwp-data-db-only.p.rapidapi.comตั้งค่า x-rapidapi-host โดยอัตโนมัติ ใช้คีย์ RapidAPI ของคุณ
// RapidAPI marketplace (live + DB-only hosts)
const client = new WhatsAppDataClient({
  apiKey: process.env.RAPIDAPI_KEY!,
  transport: 'rapidapi',
})

คุณสามารถแทนที่ URL/host ใดๆ ก็ได้ผ่านทาง baseUrl, cacheBaseUrl, rapidApiHost และ rapidApiCacheHost

การค้นหาแบบแคชก่อน (ประหยัดค่าใช้จ่าย)

ฟังก์ชัน checkCached() จะอ่านข้อมูลจากแคชราคาประหยัด/ปลายทางที่ใช้ฐานข้อมูลเท่านั้นก่อน และจะเปลี่ยนไปใช้การตรวจสอบแบบเรียลไทม์ที่ต้องเสียค่าใช้จ่ายก็ต่อเมื่อหมายเลขนั้นยังไม่ได้ถูกแคชไว้เท่านั้น

// cacheFirst (default): DB first → live only on a miss
const r1 = await client.checkCached('59898297150')
console.log(r1._source) // 'cache' | 'live'

// cacheOnly: never spend on a live check
const r2 = await client.checkCached('59898297150', { mode: 'cacheOnly' })

// live: always fresh
const r3 = await client.checkCached('59898297150', { mode: 'live' })

บนระบบขนส่ง RapidAPI นี้ การอ่านแคชจะถูกส่งไปยัง wp-data-db-only.p.rapidapi.com และการสำรองข้อมูลแบบเรียลไทม์จะถูกส่งไปยัง wp-data.p.rapidapi.com ซึ่งเป็นกระบวนการประหยัดค่าใช้จ่ายโดยใช้โฮสต์สองตัว

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

ทุกเมธอดจะจับคู่แบบ 1:1 กับเอนด์พอยต์ของตลาดกลาง

โปรไฟล์และรูปภาพ

await client.getProfile(number, options?)            // Get Profile Information
await client.getProfileNoPicture(number, options?)   // Get Profile Information (No profile pic)
await client.getLastPicture(number)                  // Get Last Saved Picture (JPEG bytes)
await client.getDeviceCount(number)                  // Device count
await client.getOsintInfo(number)                    // OSINT Info

ตัวเลือกของ getProfile ประกอบด้วย telegram, google, lookup, includeCarrier, base64, geminiFaceAnalysis, reverseImageSearch, fullAiReport, includeDeviceCount, onlyCheck, useCache, forceBypassCache และอื่นๆ อีกมากมาย

const pic = await client.getLastPicture('59898297150')
// pic.bytes: Uint8Array, pic.contentType: string
htmlImg.src = pic.toDataUri()

การละเมิดข้อมูลทางโทรศัพท์

await client.getPhoneBreaches(number, { limit, offset }) // Get Phone Breaches (no external key)
await client.getPhoneBreachesExternal(number, apiKey)     // Get Phone Breaches (your checkleaked.cc key)

การค้นหาและฐานข้อมูล

await client.search({ countryCode: 'UY', isBusiness: true, limit: 20 })   // Search
await client.searchGoogleMaps({ latitude: -34.9, longitude: -56.16, radius: 2000 }) // Search in Google Maps

// Bulk downloads return a Google Drive link to the full dataset (MEGA tier only)
const leaks = await client.getLeakedNumbersInfo()   // Leaked Numbers (500M database)
console.log(leaks.driveFolder.url)

const backup = await client.downloadEntireDatabase() // Download the Entire DB
console.log(backup.driveFolder.url)

เช็คจำนวนมาก

await client.bulkCheck(numbers, { includeBusiness, noBanStatus }) // Bulk Check (live, max 50)
await client.bulkCheckDbBasic(numbers)                            // Basic Check (DB, max 1000)
await client.bulkCheckDbFull(numbers)                            // Full Check (DB, max 1000)

โทรเลขและผู้ให้บริการ

// Telegram (experimental)
await client.getTelegramProfile('59898297150')            // single
await client.getTelegramProfile(['num1', 'num2'])         // batch

// Carrier
await client.carrierLookup(number)              // Carrier Lookup
await client.carrierLookupAlt(number)           // Carrier Lookup Alternative (spam-report signals)
await client.carrierLookupAlt(number, { page: 2 }) // page through the reports (response has a `pagination` block)

ข้อความ "ไม่พบ" จะได้รับการแก้ไข — ไม่เกิดข้อผิดพลาด

หากหมายเลขดังกล่าวไม่มีอยู่ใน WhatsApp ถือเป็นเรื่องปกติ ไม่ใช่ข้อผิดพลาด ดังนั้นจึงสามารถแก้ไขได้ (ระบบจะไม่ปฏิเสธ):

getProfile / getProfileNoPicture / checkCached จะส่งคืนรายการที่มี exists:false (และรหัส: 'NUMBER_NOT_FOUND')
การค้นหาที่ไม่พบผลลัพธ์ใดๆ จะส่งคืนหน้าว่าง (success:false, data.docs:[])
การเรียกใช้ getDeviceCount สำหรับหมายเลขที่ไม่ใช่ WhatsApp จะส่งคืนค่า success:false (เนื่องจากไม่มีค่า deviceCount)
const p = await client.getProfile('14155552671')
if (!p.exists) console.log('not on WhatsApp')

ข้อผิดพลาดที่เกิดขึ้นได้แก่: หมายเลขไม่ถูกต้อง (400), การตรวจสอบสิทธิ์ล้มเหลว (401/403), การจำกัดอัตรา (429), หมดเวลา, ความล้มเหลวของเครือข่าย และ 5xx

ข้อผิดพลาด

การปฏิเสธทั้งหมดเป็นคลาสย่อยของ WhatsAppDataError ดังนั้นการใช้ catch เพียงครั้งเดียวก็จัดการได้ทั้งหมด

ระดับเมื่อไร
ValidationErrorอาร์กิวเมนต์ที่ไม่ถูกต้อง (ถูกส่งแบบซิงโครนัส ก่อนการร้องขอใดๆ; ไม่มี .status)
AuthError401 / 403 — คีย์หายไป ไม่ถูกต้อง หรือไม่ได้สมัครใช้งาน
RateLimitError429 — ส่งค่า retryAfterMs เมื่อเซิร์ฟเวอร์ส่ง Retry-After มา
HttpErrorโดเมนอื่นที่ไม่ใช่ 2xx (เช่น 400, 5xx) จะมีพารามิเตอร์ .status และ .body อยู่ด้วย
TimeoutErrorการร้องขอใช้เวลาเกินกำหนด (หน่วยเป็นมิลลิวินาที)
NetworkErrorความล้มเหลวในการรับส่งข้อมูล (DNS, การรีเซ็ตการเชื่อมต่อ, การยกเลิกกลางคัน)
WhatsAppDataErrorคลาสพื้นฐานสำหรับทุกสิ่งที่กล่าวมาข้างต้น
import { AuthError, RateLimitError, TimeoutError, WhatsAppDataError } from 'whatsapp-data-sdk'

try {
  await client.getProfile('59898297150')
} catch (err) {
  if (err instanceof AuthError) {/* 401/403 — bad/unsubscribed key */}
  else if (err instanceof RateLimitError) {/* 429 — err.retryAfterMs */}
  else if (err instanceof TimeoutError) {/* request timed out */}
  else if (err instanceof WhatsAppDataError) {
    console.error(err.status, err.body)
  }
}

การกำหนดค่า

new WhatsAppDataClient({
  apiKey: '...',           // required
  transport: 'proxy',      // 'proxy' | 'rapidapi'
  timeoutMs: 60000,        // request timeout (bounds headers AND body read)
  retries: 2,              // retry 5xx / 429 / network / timeout (GET only) with backoff
  retryDelayMs: 500,       // exponential base; 429 honors Retry-After when longer
  baseUrl: '...',          // override live base URL
  cacheBaseUrl: '...',     // override cache/DB-only base URL
  rapidApiHost: '...',     // override live x-rapidapi-host
  rapidApiCacheHost: '...',// override cache x-rapidapi-host
  userAgent: '...',        // custom User-Agent
  fetch: globalThis.fetch, // inject a custom fetch (tests / polyfills)
})

รูปแบบหมายเลขโทรศัพท์

ส่งค่าตัวเลขในรูปแบบใดก็ได้ — SDK จะทำการแปลงให้เป็นมาตรฐาน และส่งออกตัวช่วยเพื่อให้คุณสามารถนำการแปลงเป็นมาตรฐานเดียวกันไปใช้ซ้ำได้:

import { toDigits, toE164 } from 'whatsapp-data-sdk'
toDigits('+598 98 297 150') // '59898297150'  (path & live endpoints)
toE164('59898297150')       // '+59898297150' (bulk-DB endpoints; their validator requires it)
// both throw ValidationError on input with no digits

ตัวเลือกตามคำขอ

แต่ละเมธอดจะรับอ็อบเจ็กต์ตัวเลือกเพิ่มเติมที่รับค่าสัญญาณ, เวลาหมดอายุ (หน่วยเป็นมิลลิวินาที) และการลองใหม่ (retries) สำหรับการยกเลิกและการปรับแต่งต่อการเรียกใช้แต่ละครั้ง:

const controller = new AbortController()
const p = client.getProfile('59898297150', {
  telegram: true,
  signal: controller.signal, // cancel this specific request
  timeoutMs: 5000,           // override the client timeout for this call
})
controller.abort() // rejects with WhatsAppDataError

ที่เกี่ยวข้อง

สิ่งที่ผู้ใช้ของเราพูด

รีวิวจริงจากลูกค้าที่พอใจของเรา

4.5/5 (176 รีวิว)