---
title: ส่งข้อความโดยตรง API
slug: world-sdk-guide-th/xqWG-api
docTags: 
createdAt: 2024-09-02T08:34:13.135Z
---

คุณสามารถส่งข้อความตรงไปยังผู้ใช้คนอื่นภายใน ZEPETO World โดยใช้ API ส่งข้อความตรง (DM)

เมื่อใช้ API ส่งข้อความตรง (DM) ในโลกที่เปิดใช้งานแล้ว จะมีลิงก์เพื่อเข้าสู่โลกโดยอัตโนมัติที่ด้านล่างของข้อความ ทำให้เหมาะสำหรับการโปรโมตโลก

โปรดแน่ใจว่าคุณปฏิบัติตามข้อควรระวังเมื่อใช้งาน



## ติดตั้ง

Window → Package Manager → ZEPETO.World Package กรุณาติดตั้งเวอร์ชัน 1.21.14 หรือสูงกว่าก่อน

หลังจากนั้น กรุณาติดตั้งแพ็คเกจ ‘ZEPETO.Module’ ที่มีเวอร์ชัน 1.0.7 หรือสูงกว่า

ตรวจสอบให้แน่ใจว่าแอป ZEPETO กำลังทำงานในเวอร์ชัน 3.46.000 หรือสูงกว่า

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-T9TuAabUuLAT0LuugnJ06-20240904-102426.png)



## API ส่งข้อความตรง

- ในการใช้ API ส่ง DM ให้เพิ่มคำสั่งนำเข้าด้านล่างนี้

```typescript
import { SocialService } from 'ZEPETO.Module.Social';
```



### ฟังก์ชันหลักในการส่ง DM

- ประกาศ
  - public static OpenPopupDirectMessage($sendMessage: string, $userIds?: string\[], $onComplete?: System.Action$1)\:void;
- พารามิเตอร์

| **พารามิเตอร์** | **คำอธิบาย**                                                                                                                                                                                                                                            |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| sendMessage     | นี่คือพารามิเตอร์ที่จำเป็น นี่คือเนื้อหาของข้อความที่คุณต้องการส่ง หากมันว่างเปล่าหรือไม่มีเนื้อหา การส่งจะถือเป็นความล้มเหลว.                                                                                                                          |
| userIds         | นี่คือพารามิเตอร์ที่ไม่จำเป็น<br /><br />หากคุณส่ง userIds<br />- UI การเลือกจะถูกกำหนดด้วยรายการ user ID ที่เกี่ยวข้อง<br /><br />เมื่อไม่ส่ง userIds หรือส่งรายการว่าง<br />- UI การเลือกจะถูกสร้างขึ้นด้วยรายการติดตาม/ติดตามของผู้ใช้ที่ส่งข้อความ. |
| onComplete      | นี่คือ callback ที่จะถูกเรียกเมื่อการส่งข้อความเสร็จสิ้นหรือล้มเหลว.                                                                                                                                                                                    |

### สถานะป๊อปอัพข้อความตรง

| **การตอบสนอง** | **คำอธิบาย**                                    |
| -------------- | ----------------------------------------------- |
| ยกเลิก         | เมื่อป๊อปอัพถูกปิดด้วยตนเองหรือหากการส่งล้มเหลว |
| ส่งเสร็จสิ้น   | เมื่อคำขอส่งเสร็จสิ้นและมันปิดตัวลง             |



### สถานการณ์ตามรหัสข้อผิดพลาด

| **การตอบสนอง** | **คำอธิบาย**                                                                                                                              |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| 31002          | สิ่งนี้เกิดขึ้นหากมี UserID ที่ไม่ถูกต้องอย่างน้อยหนึ่งรายการ (UserID ที่ไม่มีอยู่) รวมอยู่เมื่อป้อนรายการ user ID ในพารามิเตอร์ userIds. |
| 37011          | สิ่งนี้เกิดขึ้นเมื่อคุณพยายามส่งข้อความในขณะที่อยู่ภายใต้บัญชีผู้เยี่ยมชม.                                                                |
| 8001           | สิ่งนี้เกิดขึ้นเมื่อคุณส่งข้อความเดียวกันซ้ำ ๆ ติดต่อกัน มันสามารถส่งได้ครั้งละ 10 วินาที.                                                |
| 2001           | สิ่งนี้เกิดขึ้นเมื่อเนื้อหาของข้อความในฟิลด์ ‘ส่ง’ ว่างเปล่า มีเพียงช่องว่าง หรือเกิน 1000 ตัวอักษร.                                      |
| 0              | กรณีข้อผิดพลาดการเชื่อมต่อเครือข่าย เช่น การตัดการเชื่อมต่อเครือข่าย ความไม่เสถียรของการเชื่อมต่อ และสถานการณ์ข้อผิดพลาดทั่วไปอื่น ๆ.     |
| -1             | ข้อผิดพลาดที่ไม่สามารถระบุได้.                                                                                                            |



## ตัวอย่างการใช้งาน

### กรอกผู้ส่งโดยตรงและส่ง

1\) กรุณาเพิ่มปุ่มส่ง DM ลงใน Canvas.

2\) กรุณาเขียนโค้ดตัวอย่างตามด้านล่างนี้.

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { SocialService, DirectMessagePopupState } from 'ZEPETO.Module.Social';
import { Button } from "UnityEngine.UI";
import { WorldService } from 'ZEPETO.World';
 
export default class SendDirectMessage extends ZepetoScriptBehaviour {
 
    // ตัวแปรเพื่อเก็บข้อความตรง
    public message: string;
 
    // อาร์เรย์ของ ID ผู้ใช้เพื่อส่งข้อความตรงไปยัง
    public userIds: string[];
 
    // อ้างอิงไปยังส่วนประกอบ UI ปุ่ม
    public sendDMButton: Button;
 
    Start() {
 
        this.sendDMButton.onClick.AddListener(() => {
 
            // ตรวจสอบว่าหมายเลข ID ของฉันรวมอยู่ในอาร์เรย์ userIds หรือไม่และคืนค่าหากรวมอยู่
            if (this.userIds.includes(WorldService.userId)) {
                console.log("userIds มี userId ของฉัน");
                return;
            }
 
            // เปิดป๊อปอัพเพื่อส่งข้อความตรงโดยใช้ SocialService
            SocialService.OpenPopupDirectMessage(this.message, this.userIds, (popupState: DirectMessagePopupState) => {
 
                // ตรวจสอบสถานะของป๊อปอัพข้อความตรง
                if (popupState === DirectMessagePopupState.Cancel) {
                    console.log("คุณปิดป๊อปอัพหรือไม่สามารถส่งข้อความได้");
                } else if (popupState === DirectMessagePopupState.SendComplete) {
                    console.log("ข้อความ DM ถูกส่งสำเร็จและป๊อปอัพถูกปิด.");
                }
            });
        });
    }
}
```



3\) หลังจากเขียนสคริปต์เสร็จแล้ว ให้กลับไปที่ Unity editor และลากปุ่มใน inspector เพื่อตั้งค่า กรอกเนื้อหาข้อความและ UserID ของผู้ใช้เป้าหมายสำหรับข้อความ.

- แสดงได้สูงสุด 20 คนใน UI ดังนั้นกรอกข้อมูลได้สูงสุด 20 คน

4\) เมื่อคุณกดปุ่มส่ง DM UI รายชื่อเพื่อนจะปรากฏขึ้น

- เลือกผู้ใช้เป้าหมายและคลิกส่ง

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-ltxU4LpgiD3Cb_S8P-B5n-20240904-102426.png)



5\) หากการส่ง DM สำเร็จ UI Toast จะปรากฏขึ้นเพื่อแสดงความสำเร็จ และจะมีการบันทึกโดยสคริปต์ตัวอย่าง

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-3H38WwOdHHfnlwKLPpCOr-20240904-102426.jpg)



6\) นอกจากนี้ยังมี DM มาถึงสำหรับ targetUser

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-9LGy617GHDh0OR11wIcs9-20240904-102426.png "เมื่อทดสอบในโลกก่อนเปิดตัว จะส่งเฉพาะข้อความเท่านั้น")



![](https://archbee-doc-uploads.s3.amazonaws.com/BtCo2cIFh9h5Mo0EP64o_-oRNWP8wKpywlhoCB6O0Y7-20240909-101729.PNG "เมื่อใช้ API ส่ง DM ในโลกที่เปิดตัวแล้ว ลิงก์โลกจะถูกส่งไปด้วย")



- หากเกิดข้อผิดพลาด เช่น การส่งข้อความต่อเนื่องหรือเนื้อหาข้อความว่าง การส่ง DM จะถูกประมวลผลว่าเป็นความล้มเหลว

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-P34IPXnC-SFmAdr8ttnBa-20240904-102426.jpg)



### ส่งโดยใช้ UI รายชื่อผู้ติดตาม/ผู้ติดตาม

1\) กรุณาเพิ่มปุ่มลงใน Canvas.

2\) กรุณาเขียนโค้ดตัวอย่างตามด้านล่าง.

- หากคุณส่งรายการว่างไปยังพารามิเตอร์ targetUserID UI รายชื่อผู้ติดตาม/ผู้ติดตามจะปรากฏขึ้น.

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { SocialService, DirectMessagePopupState } from 'ZEPETO.Module.Social';
import { Button } from "UnityEngine.UI";
 
export default class SendDirectMessage extends ZepetoScriptBehaviour {
 
    // ตัวแปรเพื่อเก็บข้อความตรง
    public message: string;
 
    // อ้างอิงไปยังส่วนประกอบ UI ปุ่ม
    public sendDMButton: Button;
 
    // ตัวแปรส่วนตัวเพื่อเก็บอาร์เรย์ของ ID ผู้ใช้ เริ่มต้นเป็น null
    private emptyIds: string[];
 
 
    Start() {
 
        this.sendDMButton.onClick.AddListener(() => {
 
            // เปิดป๊อปอัพเพื่อส่งข้อความตรงโดยใช้ SocialService
            // ใช้เนื้อหาข้อความของคลาสและอาร์เรย์ว่างของ ID ผู้ใช้
            SocialService.OpenPopupDirectMessage(this.message, this.emptyIds, (popupState: DirectMessagePopupState) => {
 
                // ตรวจสอบสถานะที่ส่งกลับของป๊อปอัพข้อความตรง
                if (popupState === DirectMessagePopupState.Cancel) {
                    console.log("คุณปิดป๊อปอัพหรือไม่สามารถส่งข้อความได้");
                } else if (popupState === DirectMessagePopupState.SendComplete) {
                    console.log("ข้อความ DM ถูกส่งสำเร็จและป๊อปอัพถูกปิด.");
                }
            });
        });
    }
}
```



3\) หลังจากเขียนสคริปต์เสร็จ ให้กลับไปที่ Unity editor และลากปุ่มใน inspector เพื่อตั้งค่า จากนั้นกรุณาใส่เนื้อหาของข้อความ.

4\) เมื่อคุณกดปุ่มส่ง DM UI ของผู้ติดตาม/ผู้ติดตามจะปรากฏขึ้น.

- เลือกผู้ใช้เป้าหมายและคลิกส่ง (สามารถเลือกได้สูงสุด 5 คน)

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-XbkJOIi0aM9bSFITPZT8g-20240904-102426.png)



:::hint{type="danger"}
- คุณสามารถส่ง DM ได้สูงสุด 5 คนในครั้งเดียว.
- คุณไม่สามารถส่ง DM ไปหาตัวเองได้.
- จำนวนผู้ติดตาม/ผู้ติดตามจริงอาจแตกต่างจากจำนวนผู้ใช้ที่แสดงในป๊อปอัพส่ง DM.
  - นี่เป็นเพราะผู้ใช้ที่สามารถเลือกได้จะถูกกรองและแสดงผล.
- หากคุณเลือกผู้ใช้ที่บล็อกการรับ DM จะถือว่าเป็นความล้มเหลวและ DM จะไม่ถูกส่ง.
- หากคุณเรียกใช้ API ส่ง DM บ่อยเกินไป จะมีการจำกัดและการส่งจะล้มเหลว.
  - คุณสามารถส่งได้ครั้งละ 10 วินาที กรุณาอย่าส่ง DM โดยไม่เลือก.
- หากข้อความที่คุณส่งมี URL จะไม่ทำงานอย่างถูกต้อง ดังนั้นการส่งข้อความที่มี URL จึงถูกห้าม.
- หากข้อความที่ส่งเป็นค่าว่างหรือว่างเปล่า จะถือว่าเป็นความล้มเหลว กรุณาเขียนเนื้อหาของข้อความให้ชัดเจน.
:::

