นักพัฒนา
Sonny MCP Beta
เชื่อมต่อผู้ช่วย AI ที่รองรับ MCP — Claude และไคลเอนต์ใดก็ได้ที่ใช้ Model Context Protocol — เข้ากับเวิร์กสเปซของคุณ โดยใช้ขอบเขตสิทธิ์และข้อจำกัดเดียวกับ API สาธารณะ
อ่านคู่มือ API สาธารณะเริ่มต้นอย่างรวดเร็ว
- 01
เพิ่ม Sonny ใน Claude
ใน Claude หรือ Cowork ให้เพิ่มตัวเชื่อมต่อแบบกำหนดเองด้วย URL
https://www.usesonny.com/api/mcpSonny รองรับการลงทะเบียนไคลเอนต์อัตโนมัติ คุณจึงไม่ต้องคัดลอก client ID หรือ secret ใด ๆ - 02
อนุมัติการเข้าถึงเวิร์กสเปซ
Claude จะเปิด Sonny ในเบราว์เซอร์ของคุณ ให้เข้าสู่ระบบ ตรวจสอบสิทธิ์ที่ขอ แล้วเลือกเวิร์กสเปซที่จะเชื่อมต่อ OAuth 2.1 แบบ PKCE จะจำกัดโทเค็นการเข้าถึงและโทเค็นรีเฟรชที่ได้ให้อยู่ภายในขอบเขตของการอนุมัตินั้น
- 03
ขอให้ผู้ช่วยของคุณใช้ Sonny
เครื่องมือแต่ละตัวอธิบายตัวเองได้ คำสั่งอย่าง “แสดงบทสนทนาที่เปิดอยู่ของฉัน” ก็เพียงพอแล้ว ผู้ช่วยจะเห็นว่าเครื่องมือใดอ่านอย่างเดียวและเครื่องมือใดมีผลทำลายข้อมูล ไคลเอนต์ที่ดีจึงจะถามคุณก่อนเปลี่ยนแปลงสิ่งใด
Claude Code
claude mcp add --transport http sonny https://www.usesonny.com/api/mcpการกำหนดค่าไคลเอนต์แบบ JSON
{
"mcpServers": {
"sonny": {
"url": "https://www.usesonny.com/api/mcp"
}
}
}การใช้งานด้วยคีย์ API
หากไคลเอนต์ทำ OAuth ไม่สำเร็จ ให้สร้างคีย์ที่กำหนดขอบเขตสิทธิ์ใน การตั้งค่า → นักพัฒนา แล้วส่งเป็นส่วนหัว Authorization Bearer คีย์ API ยังคงรองรับเต็มรูปแบบสำหรับการเชื่อมต่อระหว่างเซิร์ฟเวอร์และไคลเอนต์รุ่นเก่า
"Authorization": "Bearer sonny_your_key"Sonny ดูแลความปลอดภัยของการเรียกใช้เครื่องมืออย่างไร
- เวิร์กสเปซเดียว ขอบเขตสิทธิ์ที่คุณเลือก
- ทุกการเรียกใช้ทำงานภายในเวิร์กสเปซที่เลือกไว้ตอนให้ความยินยอมผ่าน OAuth หรือเวิร์กสเปซที่เป็นเจ้าของคีย์ API เครื่องมือจะทำงานได้ก็ต่อเมื่อข้อมูลรับรองมีขอบเขตสิทธิ์ที่จำเป็น
- ระบุประเภทเครื่องมืออย่างตรงไปตรงมา
- เครื่องมือแบบอ่านอย่างเดียวจะระบุว่าอ่านอย่างเดียว ส่วนเครื่องมือที่อัปเดตและลบข้อมูลจะระบุว่ามีผลทำลายข้อมูล เพื่อให้ไคลเอนต์ของคุณยืนยันก่อนดำเนินการได้
- กฎทางธุรกิจชุดเดียวกัน
- เครื่องมือทำงานตามเวิร์กโฟลว์เดียวกับ API สาธารณะทุกประการ — ประวัติการตรวจสอบ การแจ้งเตือน และเว็บฮุกจะทำงานเหมือนสมาชิกทีมเป็นผู้เปลี่ยนแปลงเอง
จำกัดผู้ช่วยให้อยู่ในกล่องข้อความเดียว
ช่องทางที่เลือกไว้ในคีย์ API จะถูกบังคับใช้กับทุกการเรียกใช้เครื่องมือโดยอัตโนมัติ คีย์ API และการเชื่อมต่อ OAuth ยังเป็นไปตามสิทธิ์เข้าถึงช่องทางปัจจุบันของสมาชิกทีมที่เชื่อมต่อด้วย สำหรับการเชื่อมต่อ OAuth หรือคีย์ที่เข้าถึงได้ทุกช่องทาง เวิร์กสเปซมักมีหลายช่องทาง — หนึ่งช่องทางต่อหนึ่งผลิตภัณฑ์หรือแบรนด์ ให้ผู้ช่วยของคุณเรียก list_sources หนึ่งครั้งเพื่อค้นหาช่องทางเหล่านั้น แล้วส่ง sourceId ไปยัง list_conversations เพื่อให้คำถามเกี่ยวกับผลิตภัณฑ์หนึ่งได้ผลลัพธ์เป็นบทสนทนาของผลิตภัณฑ์นั้นเท่านั้น ทุกบทสนทนายังมี sourceId ของตัวเอง คุณจึงตรวจสอบผลลัพธ์ได้
รันลูปงานซัพพอร์ตแบบประหยัดต้นทุน
- ค้นหาการเปลี่ยนแปลง: เริ่มต้นด้วยฟีด
syncแบบถาวร บันทึก nextCursor หลังประมวลผลแต่ละหน้า และตัด ID อีเวนต์ที่ซ้ำกันออก หากต้องการเลือกงาน ให้เรียกlist_conversationsพร้อม sourceId, awaitingReply: true, snoozed: "false" และ compact: true โน้ตภายในจะไม่ซ่อนข้อความของลูกค้าที่ยังไม่ได้ตอบ - อ่านเฉพาะข้อความใหม่: สำหรับแต่ละบทสนทนาที่มีการเปลี่ยนแปลง ให้เรียก
list_messagesโดยใส่ ID ข้อความล่าสุดหรือเวลาแบบ ISO ในafterและตั้งค่าincludeHtml: falseเว้นแต่จำเป็นต้องใช้ HTML ของอีเมลจริง ๆ - รอรูปภาพและวิดีโอ: เมื่อ
list_messagesส่งคืนreadsInProgressให้เรียกตามที่ระบุไว้ในnextStepค่าwaitSecondsจะรอส่งผลลัพธ์จนกว่าการอ่านรูปภาพและการถอดเสียงวิดีโอจะพร้อม จึงไม่ต้องหน่วงเวลาเอง - โหลดบริบทของลูกค้า:
get_conversationจะส่งคืนidentityVerified,verifiedTraitsที่ลงนามแล้ว รวมถึงหน้าต้นทางและบริบทไคลเอนต์ของบทสนทนา เมื่อมีcontact.idให้ส่ง ID นั้นไปยังlist_conversationsเพื่อโหลดบทสนทนาก่อนหน้าของลูกค้า - ปลุกเมื่อต้องการ: ใช้เว็บฮุกที่กรองตามช่องทางสำหรับ
message.createdเพื่อปลุกเอเจนต์ทันที แล้วตามข้อมูลให้ทันด้วย sync ฟีดแบบถาวรทำงานแยกจากการส่งเว็บฮุก ใช้ข้อมูลรับรองที่เข้าถึงได้ทุกช่องทางเพื่อสร้างเว็บฮุกและจำกัด ID ช่องทางของเว็บฮุก ส่วนเอเจนต์ยังคงใช้ข้อมูลรับรองขณะทำงานที่จำกัดเฉพาะช่องทาง
แคตตาล็อกเครื่องมือ
ทุกการดำเนินการของ API สาธารณะใช้งานเป็นเครื่องมือได้ ขอบเขตสิทธิ์ที่จำเป็นจะแสดงไว้ข้างเครื่องมือแต่ละตัว
- get_connection_info
- Read connection access
conversations:read- get_conversation_context
- Read support context
conversations:read- list_conversation_checks
- Read conversation checks
conversations:read- record_conversation_check
- Record a conversation check
conversations:write- get_status
- Check Sonny status
conversations:read- create_conversation
- Create a conversation from a form
conversations:write- import_conversations
- Import conversation history
conversations:write- upload_attachment
- Upload a message attachment
attachments:write- list_properties
- List custom properties
contacts:read- get_contact_properties
- Read contact properties
contacts:read- set_contact_property
- Set a contact property
contacts:write- list_contact_memories
- Read customer memories
contact-memory:read- create_contact_memory
- Save a customer memory
contact-memory:write- delete_contact_memory
- Remove a customer memory
contact-memory:write- get_report
- Read a support report
reporting:read- sync
- Read workspace changes
conversations:read- batch_update_conversations
- Update conversations in a batch
conversations:write- list_members
- List members
members:read- list_teams
- List teams
members:read- list_tags
- List tags
tags:read- create_tag
- Create a tag
tags:write- get_tag
- Get a tag
tags:read- update_tag
- Update a tag
tags:write- delete_tag
- Delete a tag
tags:write- add_conversation_tag
- Add a conversation tag
conversations:write- remove_conversation_tag
- Remove a conversation tag
conversations:write- list_contacts
- List contacts
contacts:read- create_contact
- Create a contact
contacts:write- get_contact
- Get a contact
contacts:read- update_contact
- Update a contact
contacts:write- archive_contact
- Archive a contact
contacts:write- erase_contact
- Permanently erase a contact
contacts:write- list_channels
- List conversation channels
conversations:read- list_sources
- List sources
conversations:read- list_conversations
- List conversations
conversations:read- get_conversation
- Get a conversation
conversations:read- update_conversation
- Update a conversation
conversations:write- list_messages
- List messages
messages:read- create_internal_note
- Create an internal note
messages:write- edit_message
- Edit a sent reply
messages:send- send_message
- Send a reply to the customer
messages:send- list_webhooks
- List webhook endpoints
webhooks:read- create_webhook
- Create a webhook endpoint
webhooks:write- list_webhook_events
- List webhook event types
webhooks:read- update_webhook
- Update a webhook endpoint
webhooks:write- delete_webhook
- Delete a webhook endpoint
webhooks:write- test_webhook
- Queue a test event
webhooks:write- list_webhook_deliveries
- List webhook deliveries
webhooks:read- retry_webhook_delivery
- Retry a failed delivery
webhooks:write- list_kb_articles
- List knowledge base articles
kb:read- create_kb_article
- Create a knowledge base article
kb:write- get_kb_article
- Get a knowledge base article
kb:read- update_kb_article
- Update a knowledge base article
kb:write- delete_kb_article
- Delete a knowledge base article
kb:write- list_kb_categories
- List knowledge base categories
kb:read- create_kb_category
- Create a knowledge base category
kb:write- update_kb_category
- Update a knowledge base category
kb:write- delete_kb_category
- Delete a knowledge base category
kb:write- get_csat_summary
- Get CSAT scores
csat:read- list_csat_ratings
- List CSAT ratings
csat:read- get_conversation_csat
- Get a conversation's CSAT rating
csat:read- reorder_kb_articles
- Reorder knowledge base articles
kb:write- upsert_kb_article
- Sync a knowledge base article
kb:write- reorder_kb_categories
- Reorder knowledge base categories
kb:write- upsert_kb_category
- Sync a knowledge base category
kb:write- get_kb_category
- Get a knowledge base category
kb:read- get_help_center
- Get help center settings
kb:read- update_help_center
- Update help center settings
kb:write- upload_kb_media
- Upload a help center image
kb:write- list_kb_audiences
- List audiences
kb:read- create_kb_audience
- Create audience
kb:write- update_kb_audience
- Update audience
kb:write- delete_kb_audience
- Delete audience
kb:write
เวิร์กโฟลว์ของเอเจนต์ AI
คัดแยก ดำเนินการ และซิงค์ข้อมูลให้ตรงกันเสมอ
REST และ MCP ใช้สิทธิ์และเวิร์กโฟลว์เดียวกัน ข้อมูลรับรองทำได้เพียงจำกัดสิทธิ์เข้าถึงช่องทางปัจจุบันของคุณให้แคบลง การนำช่องทางออกจากสิทธิ์สมาชิกของคุณจะนำช่องทางนั้นออกจากการเชื่อมต่อของคุณด้วย
ค้นหาบทสนทนาที่ต้องดูแล
กรองตาม awaitingReply, unread, unassigned, assigneeId, agentGroupId, snoozed, priority หรือ tagIds การรอตอบกลับ (awaitingReply) ไม่นับโน้ตภายใน ส่วน unread เป็นข้อมูลเฉพาะของสมาชิกทีมที่ยืนยันตัวตนอยู่ unassigned หมายถึงไม่มีผู้รับผิดชอบรายบุคคล แม้จะมอบหมายให้ทีมแล้วก็ตาม แท็กจะตรงเมื่อมี ID ใดก็ได้ที่ส่งมา ส่ง propertyId (ฟิลด์ประเภท Select จาก list_properties) พร้อม propertyValues เพื่อจับคู่ผู้ติดต่อที่มีตัวเลือกใดตัวเลือกหนึ่งในนั้น สำหรับ REST ให้ใส่ propertyValues ซ้ำหนึ่งครั้งต่อหนึ่งตัวเลือก
list_conversations({ status: "open", awaitingReply: true, compact: true, sort: "waitingSince", direction: "asc" })เรียงลำดับตาม waitingSince, lastMessageAt, createdAt หรือความสำคัญทางธุรกิจ โดยกำหนดทิศทางเป็น asc หรือ desc หากค่าเท่ากันจะใช้ ID ตัดสิน ตัวกรองที่ไม่ได้ระบุจะคงค่า compact=false และ snoozed=any ไว้ tagIds ใน REST รับ ID ที่คั่นด้วยจุลภาค ส่วน MCP รับแบบอาร์เรย์ได้ด้วย waitingSince เริ่มนับที่ข้อความขาเข้าข้อความแรกหลังการตอบกลับล่าสุด ข้อความติดตามผลและโน้ตภายในจะไม่รีเซ็ตค่านี้ ให้ตั้งเวลาสแกนคิวรอนี้เป็นประจำแม้ไม่มีเว็บฮุกเข้ามา เพื่อให้เธรดเก่ากลับขึ้นมาให้เห็น
ตามทันการเปลี่ยนแปลงโดยไม่ต้องอ่านกล่องข้อความซ้ำ
ใช้ sync พร้อม conversations:read ฟีดแบบถาวรนี้มีการเปลี่ยนแปลงของบทสนทนา แท็ก ข้อความ ฟิลด์ของผู้ติดต่อ ความจำ และบันทึกการลบ payload แต่ละประเภทยังต้องใช้ขอบเขตสิทธิ์การอ่านของตนเองด้วย เนื้อหาข้อความต้องใช้ messages:read และความจำต้องใช้ contact-memory:read ข้อมูลรับรองที่ถูกจำกัดจะได้รับเฉพาะช่องทางที่ได้รับอนุญาต
- เริ่มโดยไม่ใส่เคอร์เซอร์ ทำตาม nextCursor ไปจนกว่า hasMore จะเป็น false แล้วบันทึกเคอร์เซอร์นั้นไว้
- อ่านรายการบทสนทนา/ผู้ติดต่อปัจจุบันและประวัติที่คุณต้องใช้สำหรับสถานะเริ่มต้น
- เล่นซ้ำจากเคอร์เซอร์ที่บันทึกไว้เพื่อเก็บการเปลี่ยนแปลงที่เกิดขึ้นระหว่างการอ่านนั้น ประมวลผลแต่ละหน้า แล้วบันทึก nextCursor
ตัดรายการซ้ำด้วย id ของอีเวนต์ เนื่องจากการเล่นซ้ำรับประกันแบบอย่างน้อยหนึ่งครั้ง (at least once) การดำเนินการปลายทางจึงต้องมีการป้องกันการซ้ำของตนเอง คำขอที่ไม่มีเคอร์เซอร์จะครอบคลุมเฉพาะชั่วโมงล่าสุด ไม่ใช่สแนปช็อตทั้งหมด อีเวนต์จะถูกเก็บไว้ 30 วัน HTTP 410 resync_required หมายถึงต้องโหลดสถานะเริ่มต้นใหม่ และควรโหลดสถานะเริ่มต้นใหม่หลังขยายขอบเขตสิทธิ์หรือสิทธิ์เข้าถึงช่องทางด้วย ใช้ limit ได้สูงสุด 100 และ maxBodyChars ได้สูงสุด 10,000 (ค่าเริ่มต้น 500) ตั้ง compact=true เพื่อรับฟิลด์ textPreview/textTruncated ของข้อความที่จำกัดไว้ 200 ตัวอักษรแทน body/bodyTruncated เว็บฮุกปลุกเอเจนต์ได้ ส่วนฟีดยังใช้ได้แม้ไม่ได้สมัครรับเว็บฮุก หรือเมื่อการส่งเว็บฮุกค้างอยู่
บันทึกการตรวจสอบครั้งเดียวและแชร์ผลลัพธ์
ก่อนตรวจสอบเรื่องเดิมซ้ำ ให้อ่าน list_conversation_checks (GET /api/v1/conversations/{conversationId}/checks) บันทึกผลด้วย record_conversation_check (PUT ไปยังพาธเดียวกัน) โดยระบุ key, result, checkedBy และ reference ซึ่งไม่บังคับสำหรับ ID หรือ URL ของการ์ด ตัวอย่างเช่น key=product-version, result=Shopstar Go verified, checkedBy=Engineer, reference=card-X แล้ว Sonny จะบันทึก actorId ที่ยืนยันตัวตนและเวลา checkedAt การใช้ key ซ้ำจะแทนที่เฉพาะการตรวจสอบนั้น ข้อมูลนี้เป็นสถานะปัจจุบัน ไม่ใช่บันทึกประวัติ การอ่านต้องใช้ conversations:read และการเขียนต้องใช้ conversations:write โดยทั้งสองอย่างจำกัดตามช่องทางของบทสนทนา การเรียกเหล่านี้จะไม่ส่งคำตอบหรือทำเครื่องหมายว่าตอบผู้ขายแล้ว
มอบหมายและอัปเดตงานเป็นชุด
ดูสมาชิกทีมและทีมที่ใช้งานอยู่และมอบหมายได้ด้วย list_members / list_teams (members:read) การตอบกลับมีสถานะพร้อมให้บริการและสิทธิ์เข้าถึงช่องทางที่มีผลจริง โดยไม่มีอีเมล ใช้ conversations:write เพื่อเปลี่ยน status, priority, assigneeId, agentGroupId, snoozedUntil, snoozedUntilReply, addTagIds หรือ removeTagIds
batch_update_conversations({
conversationIds: ["conversation_1", "conversation_2"],
updates: { agentGroupId: "team_1", assignment: "round_robin" }
})การกระจายงานแบบวนรอบ (round-robin) จะเลือกสมาชิกทีมที่พร้อมให้บริการและเข้าถึงช่องทางของบทสนทนาได้ หากไม่มีสมาชิกที่เข้าเกณฑ์ การอัปเดตรายการเดียวจะส่งกลับ 409 และรายการในชุดจะล้มเหลว แต่ละชุดรับ ID ที่ไม่ซ้ำกันได้สูงสุด 100 รายการ และใช้การแก้ไขหนึ่งชุดแบบ atomic ต่อบทสนทนา ตรวจสอบผลลัพธ์ { id, ok, error? } ทุกรายการ เพราะบางรายการอาจล้มเหลว ชุดคำขอใช้ขีดจำกัดอัตราตามจำนวนคำขอปัจจุบัน โดยไม่คิดน้ำหนักตามจำนวนรายการ
แชร์บริบทของลูกค้ากับ Sonny AI
แสดงรายการ บันทึก และนำความจำของผู้ติดต่อออกด้วย contact-memory:read/write ระบุทั้ง contactId และ sourceId ที่เข้าถึงได้ โดยผู้ติดต่อต้องมีบทสนทนาในช่องทางนั้น ข้อเท็จจริงที่บันทึกจะใช้การตรวจสอบ การจัดการข้อมูลซ้ำ และขีดจำกัดเดียวกับในแอป และบันทึกเป็นความจำที่เพิ่มด้วยตนเอง
อ่านคำจำกัดความของฟิลด์ที่ /api/v1/properties และอ่านหรือตั้งค่าที่ /api/v1/contacts/{contactId}/properties MCP มี list_properties, get_contact_properties และ set_contact_property ซึ่งต้องใช้ contacts:read/write และสิทธิ์เข้าถึงทุกช่องทาง ระบุ propertyId หรือ propertyName อย่างใดอย่างหนึ่งเท่านั้น พร้อมค่าสตริง หรือ null เพื่อล้างค่า ค่าข้อความ ตัวเลข URL วันที่ และตัวเลือกจะถูกตรวจสอบตามคำจำกัดความของฟิลด์
set_contact_property({ contactId: "contact_1", propertyName: "Plan", value: "Pro" })
list_contacts({ property: { Plan: "Pro" } })ตัวกรองฟิลด์จะจับคู่กับสตริงที่จัดเก็บไว้แบบตรงตัว หากใช้หลายฟิลด์ ต้องตรงทั้งหมด ค่าที่เขียนผ่าน API จะถูกระบุว่าเป็นข้อมูลจาก API ใน Co-Pilot และระบบตอบกลับอัตโนมัติ กฎเดิมเกี่ยวกับลูกค้าที่ยืนยันแล้วและช่องทางยังคงมีผล ค่าฟิลด์ภายในที่กรอกด้วยตนเองตามปกติยังคงไม่รวมอยู่ในบริบท AI นี้
อ่านรายงานชุดเดียวกับที่ทีมของคุณเห็น
เมื่อมี reporting:read ให้เรียก get_report({ kind, filters }) ประเภทรายงานได้แก่ overview, volume, response-times, agents, sources, tags, csat, ai, knowledge, leads และ online-hours โดย overview จะรวมจำนวน เวลาตอบกลับ และ CSAT ไว้ด้วยกัน ตัวกรองได้แก่ period (1–365 วัน ค่าเริ่มต้น 30), วันที่ from/to ที่ใช้คู่กัน (ไม่รวมวันที่ to), granularity (day/month), source, assigneeId และ tagId ค่า source รับ all, all-chat, all-email, website:{id} หรือ email:{id}
รายงานใช้คิวรีเดียวกับแดชบอร์ดและการตรวจสอบสิทธิ์เข้าถึงปัจจุบัน knowledge ใช้วันที่และช่องทางที่ได้รับอนุญาต โดยไม่ขึ้นกับ source ผู้รับผิดชอบ หรือแท็กที่เลือก online-hours วัดการออนไลน์ในเวิร์กสเปซของสมาชิกทีมที่เข้าถึงได้ ส่วนจำนวนบทสนทนายังคงจำกัดตามช่องทาง เอนด์พอยต์ /csat ที่มีอยู่ยังคงใช้ขอบเขตสิทธิ์ csat:read แยกต่างหาก และอาจอธิบายกลุ่มข้อมูลที่ต่างกัน
ส่งไฟล์พร้อมคำตอบหรือโน้ตภายใน
ให้สิทธิ์ attachments:write แล้วอัปโหลดไฟล์ขนาดไม่เกิน 25 MB สำหรับบทสนทนา upload_attachment รับ conversationId, fileName, contentType และ dataBase64 การตอบกลับมี id และ expiresAt ส่ง attachmentIds ได้สูงสุด 10 รายการไปกับคำตอบหรือโน้ตภายในหนึ่งชั่วโมง ไฟล์ที่อัปโหลดแต่ละไฟล์ผูกกับผู้ใช้และบทสนทนาของคุณ และใช้ได้เพียงครั้งเดียว ไฟล์ที่ไม่ได้ใช้จะถูกล้างหลังหมดอายุ
send_message({ conversationId: "conversation_1", attachmentIds: ["upload_1"] })คำตอบต้องใช้ messages:send ส่วนโน้ตภายในต้องใช้ messages:write และจะไม่ถึงลูกค้า รองรับข้อความที่มีแต่ไฟล์แนบ คำตอบทางอีเมลจะแนบไฟล์ภายในขนาดอีเมลที่กำหนด และให้ลิงก์ดาวน์โหลดสำหรับไฟล์ที่เหลือ อีเมลแชทเมื่อออฟไลน์จะมีลิงก์ไฟล์ ลิงก์ในอีเมลใช้ได้ตราบใดที่ไฟล์แนบยังอยู่ ผู้รับจึงเปิดภายหลังได้ การส่งต่ออีเมลจะเป็นการแชร์สิทธิ์เข้าถึงไฟล์เหล่านั้นด้วย ตรวจสอบ emailDeliveryStatus เพื่อดูการส่งที่ล้มเหลว
การอ่านข้อความที่ได้รับอนุญาตจะมี downloadUrl, downloadExpiresAt, aiStatus, aiDescription และ aiExtractedText รวมถึง videoTranscripts สำหรับวิดีโอที่ลิงก์ไว้ (Loom, Vimeo และอื่นๆ) ลิงก์ดาวน์โหลดมีอายุ 15 นาที อ่านข้อความอีกครั้งเพื่อรับลิงก์ใหม่ ไฟล์ที่อัปโหลดผ่าน API/MCP ใหม่จะจัดเก็บแบบส่วนตัว ไฟล์แนบเก่ายังคงเป็นแบบสาธารณะและถูกระบุเป็น access=legacy_public โดย URL เดิมจะไม่หมดอายุ การอ่านข้อความจะเริ่มอ่านรูปภาพในข้อความเมื่อเวิร์กสเปซมี Sonny AI การอ่านรูปภาพและการถอดความวิดีโอจะเสร็จในไม่ช้าหลังจากข้อความเข้ามา ระหว่างที่ยังทำงานอยู่ การตอบกลับจะขึ้นต้นด้วย readsInProgress ซึ่ง nextStep จะระบุการเรียกที่ต้องทำอย่างชัดเจน ส่ง waitSeconds (สูงสุด 30) เพื่อรอผลในคำขอเดียว ข้อความในวิดเจ็ตที่ลูกค้าเห็นและข้อความแบบเรียลไทม์จะไม่มีข้อมูลที่ดึงออกมาหรือคำถอดความ
ฐานความรู้
ซิงค์จากแหล่งข้อมูลภายนอก
ซิงค์บทความและหมวดหมู่ด้วย external ID ที่คงที่ นำเข้า Markdown หรือ HTML อัปโหลดรูปภาพ กำหนดลำดับ และจัดการกลุ่มผู้ชม การ upsert ซ้ำจะอัปเดตเนื้อหาที่มีอยู่
- เลือก sourceId ของช่องทางคุณและให้สิทธิ์ kb:read และ kb:write หากต้องการค้นหาช่องทาง
list_sourcesต้องใช้ conversations:read ด้วย - สร้างหมวดหมู่ แล้วซิงค์บทความเป็นฉบับร่าง ตรวจสอบรูปแบบและสิทธิ์เข้าถึงก่อนเผยแพร่
- กำหนดค่าสิทธิ์เข้าถึงศูนย์ช่วยเหลือ เผยแพร่ แล้วทดสอบมุมมองของผู้อ่าน ใช้การแบ่งหน้าและ external ID ที่คงที่สำหรับการอัปเดตครั้งต่อไป
จัดการกลุ่มผู้ชมที่เป็นลูกค้า
สร้างกลุ่มจากคุณลักษณะของลูกค้าที่ยืนยันแล้ว และนำไปใช้กับศูนย์ช่วยเหลือ หมวดหมู่ หรือบทความ ข้อจำกัดที่สืบทอดมาทั้งหมดต้องตรงกัน ข้อมูลรับรองของ API และ MCP จะทำงานในฐานะพนักงานภายในขอบเขตสิทธิ์ของตน ให้ดูตัวอย่างและทดสอบด้วยเซสชันของลูกค้าจริงเพื่อตรวจสอบสิทธิ์เข้าถึงของผู้อ่าน
ตั้งค่าและทดสอบกลุ่มผู้ชมของศูนย์ช่วยเหลือ