ส่วนที่เหลือ · WebSocket · gRPC

เอพีไอ
อ้างอิง.

จุดสิ้นสุด 312, ข้อมูลจำเพาะของ OpenAPI ที่สมบูรณ์, ความไม่แน่นอนในการเปลี่ยนแปลงทุกครั้ง และสัญญาสถานะการออนไลน์สาธารณะ ไม่มีกล่องดำ.

URL ฐาน
api.rozper.com
เวอร์ชัน
เวอร์ชัน 2026.05
ขีดจำกัดอัตรา
1,000 รอบต่อนาที
โพสต์/v2/การโทร
"color:#22D3EE">curl "color:#22D3EE">-X "สี:#34D399;แบบอักษร-น้ำหนัก:600">โพสต์ https://api.rozper.com/v2/calls \
  "สี:#22D3EE">-ฮ “การอนุญาต: ผู้ถือ $ROZPER_API_KEY" \
  "สี:#22D3EE">-ฮ "ประเภทเนื้อหา: application/json" \
  "สี:#22D3EE">-d '{
    "ถึง":   "+14155551234",
    "จาก": "+12025550100",
    "URL":  "https://your.app/voice/answer"
  }'
201การตอบสนอง · 84 มิลลิวินาที
{
  "id": "call_01HXY7ZQ9V3J3X8K5N",
  "status": "queued",
  "to":     "+14155551234",
  "from":   "+12025550100",
  "created_at": "2026-05-12T14:23:01Z"
}
§01 · การรับรองความถูกต้อง

โทเค็นผู้ถือ
กำหนดขอบเขต หมุนได้

ทุกคำขอจะมีรหัสโครงการเป็นโทเค็นผู้ถือ คีย์มีการกำหนดขอบเขต (อ่าน เขียน เรียกเก็บเงิน) หมุนได้โดยไม่มีการหยุดทำงาน และสามารถปักหมุด IP ได้จากแดชบอร์ด

  • คีย์ตามสภาพแวดล้อม (ทดสอบ / ใช้งานจริง)
  • รองรับข้อมูลประจำตัวไคลเอ็นต์ OAuth 2.0
  • TLS รวมมีอยู่ใน Enterprise
ส่วนหัวของการอนุญาต
ม้วนผมโหนดหลามไป
# .env  →  never commit me
ROZPER_API_KEY=sk_live_8FzqQ...XW7p

# request
curl https://api.rozper.com/v2/account \
  -H "Authorization: Bearer $ROZPER_API_KEY"

# 200 OK
{
  "id": "acct_01HXY7ZQ9V3J3X8K5N",
  "scopes": ["calls.write", "messages.write", "numbers.read"],
  "rate_limit": { "limit": 1000, "remaining": 998, "reset": 1715520000 }
}
§02 · ข้อมูลอ้างอิง

สำรวจทุกจุดสิ้นสุด

โทรสร้างการโทร

สร้างการโทร

เริ่มต้นการโทร PSTN ขาออก กลับมาทันทีพร้อมกับออบเจ็กต์การโทรที่อยู่ในคิว - ฟัง webhooks สำหรับการเปลี่ยนแปลงสถานะ

โพสต์/v2/การโทร
พารามิเตอร์
toเชือกที่จำเป็น

จ.164 หมายเลขปลายทาง

fromเชือกที่จำเป็น

หมายเลข Rozper ที่ตรวจสอบแล้วหรือเช่าแล้ว

urlเชือก

ตำแหน่งข้อมูล HTTPS ที่ส่งคืนคำสั่งเสียงเมื่อมีการเชื่อมต่อสาย

recordบูลีน

บันทึกขาทั้งสองข้างลงที่เก็บของคุณ ค่าเริ่มต้นเป็นเท็จ

timeoutจำนวนเต็ม

หมดเวลาเสียงเรียกเข้าในไม่กี่วินาที ค่าเริ่มต้น 60

ขอ · โหนด● ถ่ายทอดสด
const call = await rozper.calls.create({
  to:   "+14155551234",
  from: "+12025550100",
  url:  "https://your.app/voice/answer",
})
ตอบกลับ · สร้าง 201 รายการแล้ว84 มิลลิวินาที
{
  "id": "call_01HXY7ZQ9V3J3X8K5N",
  "object": "call",
  "created_at": "2026-05-12T14:23:01Z"
}
§03 · ข้อผิดพลาด

ข้อผิดพลาดที่คาดเดาได้และเครื่องอ่านได้

ทุก ๆ 4xx และ 5xx จะส่งกลับรูปร่างเดียวกัน: มีเสถียรภาพ codeข้อความที่มนุษย์สามารถอ่านได้ และรหัสคำขอที่คุณสามารถวางเพื่อรองรับได้

ซองจดหมายข้อผิดพลาด
{
  "error": {
    "code": "invalid_param",
    "message": "to: must be E.164",
    "request_id": "req_01HXY7…",
    "param_errors": [
      { "param": "to", "reason": "format" }
    ]
  }
}
400
bad_request

เนื้อหาคำขอมีรูปแบบไม่ถูกต้องหรือช่องที่ต้องกรอกหายไป

401
unauthorized

คีย์ API หายไป หมดอายุ หรือถูกเพิกถอน

403
forbidden

คีย์ไม่มีขอบเขตที่จำเป็นสำหรับทรัพยากรนี้

404
not_found

ไม่มีรหัสทรัพยากรสำหรับบัญชีนี้

409
conflict

คีย์ Idempotency ขัดแย้งกับเพย์โหลดอื่น

422
invalid_param

พารามิเตอร์ไม่ผ่านการตรวจสอบ ตรวจสอบ param_errors[]

429
rate_limited

Backoff โดยใช้ส่วนหัว Retry-After

500
server_error

เราได้รับแจ้ง ลองเรียก idempotent อีกครั้ง

§04 · เว็บฮุค

ลงนาม ลองใหม่ ป้องกันการเล่นซ้ำ

ทุกเหตุการณ์จะถูกส่งพร้อมกับลายเซ็น HMAC, รหัสเหตุการณ์ที่ไม่ซ้ำกัน และการประทับเวลา UTC เราลองอีกครั้งโดยใช้ Exponential Backoff สูงสุด 24 ชั่วโมง

ลายเซ็น HMAC-SHA256 ใน Rozper-Signature
ลองใหม่สูงสุด 8 ครั้ง · หน้าต่าง 24 ชม
ส่งไปยังปลายทางหลายแห่งพร้อมกัน
ยืนยัน webhook · โหนด✓ การเปรียบเทียบเวลาคงที่
import { verify } from "@rozper/sdk/webhooks"

app.post("/webhooks/rozper", (req, res) => {
  const ok = verify({
    payload:   req.rawBody,
    signature: req.header("Rozper-Signature"),
    secret:    process.env.ROZPER_WEBHOOK_SECRET,
  })
  if (!ok) return res.status(401).end()

  const event = JSON.parse(req.rawBody)
  switch (event.type) {
    case "call.completed": /* … */
    case "recording.ready": /* … */
  }
  res.json({ received: true })
})
แคตตาล็อกกิจกรรม · ทั้งหมด 32 รายการ
call.initiated

ผู้ให้บริการรับสายโทรออกแล้ว

call.ringing

เสียงไกลสุดกำลังดังขึ้น

call.answered

คำตอบจากระยะไกล (หรือ AMD ตรวจพบว่าเป็นมนุษย์)

call.completed

การโทรสิ้นสุดลง รวมถึงระยะเวลา การเรียกเก็บเงิน ข้อมูลเมตาของขา

recording.ready

มีการบันทึกเนื้อหาที่อัปโหลดและลงนาม URL แล้ว

message.delivered

ใบเสร็จรับเงินการจัดส่งของผู้ให้บริการ (หากรองรับ)

agent.handoff

เจ้าหน้าที่ AI เลื่อนระดับเป็นคิวมนุษย์

number.purchased

การได้มาซึ่งหมายเลขเสร็จสมบูรณ์

§05 · บันทึกการเปลี่ยนแปลง

ทุกการเปลี่ยนแปลงเป็นภาษาอังกฤษธรรมดา

  1. 2026-05-10
    เวอร์ชัน 2026.05
    • ความสำเร็จขณะนี้ตัวแทนเสียงรองรับการเรียกเครื่องมือพร้อมการตอบกลับแบบสตรีม
    • ความสำเร็จใหม่ /v2/numbers/port endpoint สำหรับการส่ง LNP แบบเป็นโปรแกรม
  2. 2026-04-22
    เวอร์ชัน 2026.04
    • แก้ไขขณะนี้แคช Idempotency ยอมรับ TTL 24 ชั่วโมงบน POST / การโทรอย่างถูกต้องแล้ว
    • งานบ้านนำปลายทาง v1 ที่เลิกใช้งานแล้วออก (ประกาศปี 2025-11)
  3. 2026-03-31
    เวอร์ชัน 2026.03
    • ความสำเร็จWebSocket media-streams รุ่นเบต้าพร้อมให้ใช้งานทั่วไปแล้ว
    • ความสำเร็จข้อความเทมเพลต WhatsApp ถูกเพิ่มภายใต้ /v2/messages
การอ้างอิง API · Rozper REST & เอกสาร WebSocket | รอซเปอร์วันนี้