# เผยแพร่เกมจากแอป AI ของคุณด้วย PlayDrop MCP

วิธีที่เอเจนต์ AI เผยแพร่ไปยัง PlayDrop ผ่าน MCP: เส้นทางแบบง่ายและแบบแพ็กเกจ การทดสอบแบบส่วนตัว publish_game_version การอัปเดต ขีดจำกัด และการกู้คืน

Source: https://www.playdrop.ai/th/create/learn/mcp-publishing

เซิร์ฟเวอร์ MCP ของ PlayDrop ให้แอป AI เผยแพร่เกมไปยังบัญชี PlayDrop ของผู้ใช้ แล้วส่งลิงก์กลับมา ซึ่งยังใช้ได้ต่อไปแม้เกมจะอัปเดต คู่มือนี้คือลำดับขั้นตอน แต่ละขั้นตอนมีลิงก์ไปยังคู่มือที่มีรายละเอียด

## ก่อนเริ่มสร้าง

1. เรียก `get_documentation({topic:"index"})` และอ่านคู่มือของฟีเจอร์ที่เกมจะใช้ก่อนเขียนโค้ด การวางแผนเลย์เอาต์เต็มหน้าจอ การบันทึก และการควบคุมตั้งแต่แรกช่วยให้ไม่ต้องเขียนเกมใหม่ภายหลัง สำหรับซิกเนเจอร์ของเมธอดที่แน่ชัด ให้อ่านหัวข้อ `sdk-types`, `server-sdk-types` และ `shared-types`
2. เรียก `list_games` หากเกมมีอยู่แล้ว คุณจะอัปเดตเกมนั้นและคง `name` ไว้ เพื่อให้เกมคงลิงก์และผู้เล่นไว้
3. เลือกเส้นทาง ไฟล์ HTML ไฟล์เดียวที่ครบในตัวและไม่ใช้ PlayDrop SDK ใช้[เส้นทางแบบง่าย](https://www.playdrop.ai/th/create/learn/html-games) กรณีอื่นทั้งหมด รวมถึงฟีเจอร์ใดๆ ของ SDK สื่อของหน้าเกม หรือเซิร์ฟเวอร์ ใช้[แพ็กเกจ](https://www.playdrop.ai/th/create/learn/packaging)

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

## เส้นทางแบบง่าย: upload_game

ส่ง `requestId` HTML ฉบับสมบูรณ์ (ไม่เกิน 10 MiB หรือ 10,485,760 ไบต์ UTF-8) และแคตตาล็อกขนาดย่อ ส่ง `gameId` เพื่ออัปเดตเกมที่มีอยู่ หมายเลขเวอร์ชันจะเพิ่มขึ้นอัตโนมัติ ดูฟิลด์ต่างๆ ได้ใน[เกม HTML แบบง่าย](https://www.playdrop.ai/th/create/learn/html-games)

## เส้นทางแพ็กเกจ: เตรียม อัปโหลด ทำให้เสร็จ

เรียก `prepare_catalogue_upload` ด้วย `requestId`, `expectedCurrentVersion` และรูปแบบอินพุตหนึ่งแบบ:

- **โฟลเดอร์:** `catalogue` (เนื้อหาของ catalogue.json) พร้อม `files` ซึ่งมีตัวอธิบายหนึ่งรายการต่อไฟล์พร้อมพาธแบบสัมพัทธ์ ตัวอธิบายมี `text` แบบอินไลน์ คำอธิบายการอัปโหลดแบบมีลายเซ็น การผูกไฟล์แนบ หรือ `reuse` ของไฟล์จากเวอร์ชันที่เก็บไว้
- **ZIP หรือ .play ในเครื่อง:** แตกไฟล์ในเครื่อง แล้วส่งแคตตาล็อกที่รากและตัวอธิบายแบบโฟลเดอร์ ห้ามใส่ไบต์ของไฟล์บีบอัดแบบ base64 ในการเรียกเครื่องมือเด็ดขาด
- **ไฟล์แนบใน ChatGPT:** ส่ง ZIP หรือ .play ที่โฮสต์ระบุไว้เป็น `archive` พร้อม `download_url` และ `file_id` จริง ไฟล์มีขนาดได้สูงสุด 20 MiB เมื่อบีบอัด และต้องมี catalogue.json ที่ราก

สำหรับการอัปโหลดแบบมีลายเซ็น ตัวอธิบายแต่ละรายการระบุ `path`, `contentType`, `sizeBytes`, `sha256` (เลขฐานสิบหกตัวพิมพ์เล็ก 64 ตัว) และ `md5Base64` ซึ่งคำนวณในเครื่องจากไบต์ที่ตรงกันทุกประการ PUT ไบต์เหล่านั้นไปยัง URL ที่ได้รับแต่ละรายการพร้อมทุกเฮดเดอร์ที่ได้รับ แล้วเรียก `complete_catalogue_upload` ด้วย `requestId` เดิม

ใน ChatGPT ไฟล์ในโฟลเดอร์มาจากไฟล์แนบที่ผูกตามลำดับตำแหน่งได้:

```
attachments: [htmlFile, iconFile]
files: [{path:"index.html", attachmentIndex:0}, {path:"listing/icon.png", attachmentIndex:1, role:"LISTING", app:"my-game"}]
```

ทุกแอปต้องมี `version` ที่ประกาศไว้ การมองเห็น (ในคำขอหรือในแอป) และรายการใน `expectedCurrentVersion` ที่ใช้ชื่อแอปเป็นคีย์: `null` เพื่อสร้างใหม่ หรือเวอร์ชันที่เผยแพร่ปัจจุบันจาก `list_games` เพื่ออัปเดต ค่าที่ล้าสมัยจะถูกปฏิเสธ จึงไม่มีการเขียนทับการอัปโหลดอื่นโดยไม่ตั้งใจ

## ทดสอบแบบส่วนตัว แล้วค่อยปล่อย

อัปโหลดด้วย `visibility: "private"` เมื่อเกมใช้ SDK หรือเซิร์ฟเวอร์ หรือเมื่อผู้ใช้ของคุณอยากลองก่อน เปิด `url` ในใบยืนยันเพื่อเล่นเวอร์ชันนั้นภายใน PlayDrop พร้อมโฮสต์ SDK จริง ฟังก์ชันของเซิร์ฟเวอร์ที่โฮสต์ให้ทำงานเฉพาะกับเวอร์ชันที่อัปโหลดแล้ว จึงต้องทดสอบด้วยวิธีนี้

เมื่อใช้งานได้แล้ว ให้ปล่อยเวอร์ชันนั้นด้วย `publish_game_version` โดยส่ง `gameId`, `version`, `expectedCurrentVersion` และ `visibility` (`public` หรือ `unlisted`) หากผู้ใช้ของคุณเลือกไว้ การปล่อยจะใช้ไฟล์ หน้าเกม และรีวิวที่ทดสอบแล้ว ไม่ต้องอัปโหลดเกมอีกครั้งเพื่อปล่อย

หากต้องการลองบิลด์ในเครื่องในเฟรม PlayDrop ก่อนอัปโหลด ให้เปิด `https://www.playdrop.ai/@<username>/<slug>/dev?url=<URL-encoded local address>` ในเบราว์เซอร์ปกติบนเครื่องที่รันเซิร์ฟเวอร์ในเครื่อง

## เลือกว่าใครเล่นได้

`visibility` รับ `public`, `unlisted` และ `private` สำหรับเกมใหม่ที่ไม่ได้เลือกไว้ ให้ใช้การตั้งค่าที่ครีเอเตอร์บันทึกไว้: `upload_game` ใช้ค่านี้เมื่อคุณไม่ใส่การมองเห็น และ `get_account` แสดงค่านี้เป็น `publishing.defaultVisibility` สำหรับการอัปเดต ให้คง `gameVisibility` ของเกมจาก `list_games` ไว้ เว้นแต่ผู้ใช้ของคุณจะเปลี่ยน `upload_game` ทำเช่นนี้ให้เมื่อคุณไม่ใส่การมองเห็น ส่วนแพ็กเกจต้องระบุค่านี้เอง ไม่แสดงในรายการหมายถึงทุกคนที่มีลิงก์เล่นได้ ไม่ใช่รายชื่อเพื่อน ห้ามทำให้เกมมองเห็นได้กว้างกว่าที่ผู้ใช้ของคุณตั้งใจเด็ดขาด รายละเอียด: [ใครเล่นได้บ้าง](https://www.playdrop.ai/th/create/learn/distribution)

## ส่งลิงก์ที่ถูกต้องกลับไป

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

## อัปเดตเกม

อ่าน `list_games` และเวอร์ชันปัจจุบัน คง `name` ไว้ และส่งสแนปช็อตเต็ม: ทุกไฟล์และข้อมูลเมตาทั้งหมดที่ต้องการ เพราะฟิลด์ที่ไม่ได้ใส่จะไม่มีในเวอร์ชันใหม่ รายการแคตตาล็อกที่ไม่ได้ใส่จะไม่ถูกลบ ใช้ `get_game_version` เพื่ออ่านแคตตาล็อกของเวอร์ชันที่คุณกำลังเปลี่ยนแบบตรงทุกประการ รวมถึงสถานะของ Tweaks (ค่าที่ครีเอเตอร์ปรับได้)

## ขีดจำกัด

- เส้นทางแบบง่าย: ไฟล์ HTML หนึ่งไฟล์ขนาดไม่เกิน 10 MiB
- แพ็กเกจ: ตัวอธิบายไฟล์ในโฟลเดอร์ 512 รายการ หรือรายการในไฟล์บีบอัด 512 รายการ (รวม catalogue.json และไดเรกทอรี) 50 MiB ต่อไฟล์ รวม 200 MiB เมื่อแตกไฟล์ และ JSON ของแคตตาล็อก 1 MiB
- ไฟล์บีบอัด: ใช้ได้เฉพาะพาธแบบสัมพัทธ์ที่ปลอดภัย พาธซ้ำ ลิงก์สัญลักษณ์ ไฟล์บีบอัดที่เข้ารหัส แบบหลายส่วน และ ZIP64 จะถูกปฏิเสธ
- การอัปโหลดที่เตรียมไว้จะหมดอายุหลัง 30 นาที

## ข้อผิดพลาดและการลองใหม่

ข้อผิดพลาดมี `error`, `message`, `retryable`, `nextAction`, `docsUrl` และ `documentationTopic` ทำตาม `nextAction` หลังจากไม่ได้รับคำตอบ ให้ลองส่งเนื้อหาเดิมทุกประการด้วย `requestId` เดิม เนื้อหาที่เปลี่ยนแล้วต้องใช้ค่าใหม่ ดู[ข้อผิดพลาดและการกู้คืน](https://www.playdrop.ai/th/create/learn/errors)

ใช้ `send_feedback` เพื่อรายงานปัญหาที่ทำซ้ำได้หรือขั้นตอนที่สับสน โดยไม่ใส่โทเค็นหรือ URL แบบมีลายเซ็น

## คู่มือที่เกี่ยวข้อง

- [เกม HTML แบบง่าย](https://www.playdrop.ai/th/create/learn/html-games): เผยแพร่ไฟล์ HTML ไฟล์เดียวที่ครบในตัวขนาดไม่เกิน 10 MiB ด้วย upload_game: อะไรใช้ได้ แคตตาล็อกขนาดย่อ การมองเห็น การอัปเดต และเมื่อไรควรเปลี่ยนเป็นแพ็กเกจ
- [การจัดแพ็กเกจและ .play](https://www.playdrop.ai/th/create/learn/packaging): จัดโฟลเดอร์เกมที่บิลด์แล้ว ZIP หรือ .play ให้มี catalogue.json ที่ราก ประกาศสื่อของหน้าเกมและเซิร์ฟเวอร์ แล้วอัปโหลดด้วย prepare_catalogue_upload
- [การมองเห็นและการเข้าถึงผู้เล่น](https://www.playdrop.ai/th/create/learn/distribution): เลือกว่าใครเปิดเกม PlayDrop ได้ ค่าเริ่มต้นของบัญชีและการเผยแพร่เวอร์ชันทำงานอย่างไร และบูสต์ แลกกันเล่น Instant และการค้นหาพาผู้เล่นใหม่มาได้อย่างไร
- [ข้อผิดพลาดและการกู้คืน](https://www.playdrop.ai/th/create/learn/errors): รูปแบบข้อผิดพลาดที่เครื่องมือ MCP ของ PlayDrop ส่งคืน เมื่อไรควรลองใหม่ด้วย requestId เดิม และวิธีแก้รหัสข้อผิดพลาดที่พบบ่อย
