ข้ามไปที่เนื้อหา

ส่งบันทึกการสนทนา

ระบบการเก็บบันทึกการสนทนา (CLCS)

ส่งบันทึกการสนทนา

API นี้ส่งบันทึกการสนทนาไปยัง ระบบการเก็บบันทึกการสนทนา.

  • URL ที่ร้องขอ
URL ของเซิร์ฟเวอร์เชิงพาณิชย์ https://clcs.qpyou.cn/chat/api/v1/send-chat-log
URL ของเซิร์ฟเวอร์ Sandbox https://sandbox-clcs.qpyou.cn/chat/api/v1/send-chat-log
วิธีการ HTTP POST
ประเภทเนื้อหา application/json
  • เนื้อหาคำขอ
ชื่อฟิลด์ ประเภท จำเป็น คำอธิบาย
game_key สตริง Y ค่าคีย์ (16 ตัวอักษร) ที่สร้างจากรหัสบริษัทและรหัสเกม คุณสามารถรับคีย์นี้ได้ที่ AI Service > การตรวจจับการละเมิดการแชท > การจัดการเกม > ยืนยันคีย์การเข้ารหัสใน Hive Console รหัสบริษัทและรหัสเกมสามารถรับได้ใน Hive Console AI service > การตรวจจับการละเมิดการแชท > การจัดการเกม
ตัวอย่าง) abcdefghijklmnop
chat_log อ็อบเจ็กต์ Y อาร์เรย์หรือการรวบรวมของข้อความที่เข้ารหัสและจำนวนการแชท
  • วัตถุ chat_log
ชื่อฟิลด์ ประเภท จำเป็น คำอธิบาย
chat_count int Y จำนวนข้อความใน msg_array
เช่น) 32 (chat_count และขนาดของ msg_array ที่มีข้อความเข้ารหัสต้องเท่ากัน)
msg_array array Y 1 หรือมากกว่าของวัตถุข้อความ
  • วัตถุข้อความ;
ชื่อฟิลด์ ประเภท จำเป็น คำอธิบาย
time_stamp สตริง Y แปลงเวลาที่เกิดข้อความแชทในรูปแบบ ISO8601 และส่งไป หากคุณเปลี่ยนเวลาประทับของข้อความแชทด้วยรูปแบบ ISO8601 จะมีการเพิ่ม ±hh:mm ที่ท้ายของเวลาประทับตามเขตเวลาที่ผู้ส่งข้อความอยู่
ตัวอย่างของค่า time_stamp ตามเขตเวลาของผู้ส่งและเวลาประทับข้อความแชท
  * เมื่อเขตเวลาเป็น UTC และเวลาประทับข้อความแชทคือ 2023-03-30 17:13:00
    * ใช้ 2023-03-30T17:13:00+00:00 หรือ 2023-03-30T17:13:00Z
    * +00:00 สามารถเขียนเป็น Z ได้ (YYYY-MM-DDTHH🇲🇲ss{.mmm}±hh:mm หรือ YYYY-MM-DDTHH🇲🇲ss{.mmm}Z)
  * เมื่อเขตเวลาเป็น KST (เวลาเกาหลีมาตรฐาน) และเวลาประทับข้อความแชทคือ 2023-03-30 17:13:00
    * ใช้ 2023-03-30T17:13:00+09:00
  * เมื่อเขตเวลาเป็น CST (เวลาเกณฑ์กลาง) และเวลาประทับข้อความแชทคือ 2023-03-30 17:13:00
    ใช้ 2023-03-30T17:13:00-05:00
msg สตริง Y สตริง JSON ที่เข้ารหัสด้วยกุญแจเข้ารหัสที่ออกจาก Hive คอนโซลบริการ AI > การตรวจจับการละเมิดแชท > การจัดการเกม > ยืนยันกุญแจเข้ารหัส (ขนาดสูงสุด 2KB, การเข้ารหัส AES256)
  • ข้อความ
ชื่อฟิลด์ ประเภท จำเป็น คำอธิบาย
time_stamp string Y แปลงเวลาที่เกิดเหตุการณ์ของข้อความแชทในรูปแบบ ISO8601 และส่งต่อไป หากคุณเปลี่ยนแปลงเวลาแชทด้วยรูปแบบ ISO8601 จะมีการเพิ่ม ±hh:mm ที่ท้ายของ timestamp ตามเขตเวลาที่ผู้ส่งข้อความอยู่
ตัวอย่างของค่า time_stamp ตามเขตเวลาของผู้ส่งและเวลาแชท
  * เมื่อเขตเวลาเป็น UTC และเวลาแชทคือ 2023-03-30 17:13:00
    * ใช้ 2023-03-30T17:13:00+00:00 หรือ 2023-03-30T17:13:00Z
    * +00:00 สามารถเขียนเป็น Z ได้ (YYYY-MM-DDTHH🇲🇲ss{.mmm}±hh:mm หรือ YYYY-MM-DDTHH🇲🇲ss{.mmm}Z)
  * เมื่อเขตเวลาเป็น KST (เวลาเกาหลีมาตรฐาน) และเวลาแชทคือ 2023-03-30 17:13:00
    * ใช้ 2023-03-30T17:13:00+09:00
  * เมื่อเขตเวลาเป็น CST (เวลาเกณฑ์กลาง) และเวลาแชทคือ 2023-03-30 17:13:00
    * ใช้ 2023-03-30T17:13:00-05:00
room_num int Y หมายเลขห้องแชท
ตัวอย่าง) 123342
lang_code int Y รหัสภาษา
ภาษาเกาหลี (ko) : 1, ภาษาอังกฤษ (en): 2, ภาษาญี่ปุ่น (ja): 3, ภาษาจีนแบบย่อ: 4, ภาษาจีนแบบดั้งเดิม: 5, สเปน (es): 6, รัสเซีย (ru): 7, เยอรมัน (de): 8, ฝรั่งเศส (fr): 9, โปรตุเกส (pt): 10, อิตาลี (it): 11, ภาษาไทย (th): 12, ภาษาอินโดนีเซีย (id): 13, ภาษาเตอร์กิช (tr): 14, มาเลเซีย (ms): 15, ภาษาเวียดนาม (vi): 16
chat_msg string Y เนื้อหาการแชท
eg) สวัสดี! วันนี้อากาศดีจัง
chat_mode int Y ประเภทการแชท
ตัวอย่าง)
100: แชททั่วไป
200: แชทกลุ่ม (1:1~N)
300: กระซิบ
4NN: ประเภทแชทที่กำหนดโดยสตูดิโอเกม
channel_user_id int Y ID ของผู้ใช้ (playerId) ในเกม
  • การตอบกลับ
ชื่อฟิลด์ ประเภท คำอธิบาย
result วัตถุ ตัวเก็บผลลัพธ์
result_code สตริง รหัสผลลัพธ์
result_msg สตริง ข้อความผลลัพธ์
  • รหัสผลลัพธ์
result_code result_msg คำอธิบาย
200 สำเร็จ การถ่ายโอนบันทึกเสร็จสมบูรณ์แล้ว
500 คำขอไม่ถูกต้อง มีข้อผิดพลาดในคำขอของคุณ โปรดตรวจสอบ URL ของคำขอและตัวแปรที่จำเป็นในคำขอให้ถูกต้อง
501 จำนวนข้อความไม่ตรงกัน จำนวนข้อความและ chat_count ไม่ตรงกัน chat_count และความยาวของ msg_array ต้องตรงกัน
502 คีย์ลับไม่ถูกต้อง ค่าคีย์ลับไม่ถูกต้อง
โปรดไปที่ Hive Console’s AI Service > การตรวจจับการละเมิดการแชท > การจัดการเกม > ยืนยันคีย์การเข้ารหัสและตรวจสอบค่าคีย์การเข้ารหัส
503 คีย์เกมที่ไม่ได้ลงทะเบียน ค่าคีย์เกมไม่ถูกต้อง
โปรดไปที่ Hive Console’s AI Service > การตรวจจับการละเมิดการแชท > การจัดการเกม > ยืนยันคีย์การเข้ารหัสและตรวจสอบค่าคีย์เกม
506 ข้อผิดพลาดของระบบ ข้อผิดพลาดนี้เกิดขึ้นเมื่อระบบการเก็บบันทึกการแชทหยุดทำงานเพื่อการบำรุงรักษา
507 ขนาดของข้อความใหญ่เกินไป ขนาดของข้อความใหญ่เกินไป ขนาดสูงสุดของ msg_array คือ 2KB
  • ตัวอย่าง

    • ไพธอน
    import requests
    import json 
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad
    import base64
    
    
    game_key = <GAME_KEY>
    secret_key = <SECRET_KEY>
    aes = AES.new(secret_key, AES.MODE_ECB)
    url = "https://clcs.qpyou.cn/chat/api/v1/send-chat-log"
    
    ## การเขารหสขอความ
    def encrypt_msg(room_num:int,lang_code:int,chat_msg:str,chat_mode:int,channel_user_id:int) -> str:
        json_data = {
            "time_stamp":"2023-02-20T10:22:10+09:00", ## datetime.now().isoformat()
            "room_num":room_num,
            "lang_code":lang_code,
            "chat_msg":chat_msg,
            "chat_mode":chat_mode,
            "channel_user_id":channel_user_id
            }
        json_str = json.dumps(json_data)
        padded_str = pad(json_str.encode("utf-8"),AES.block_size)
        encrypted_data = aes.encrypt(padded_str)
        encrypted_data_b64 = base64.b64encode(encrypted_data).decode("utf-8")
        return encrypted_data_b64
    
    ## กำหนด json payload
    json_payload = {
        "game_key":  game_key,
        "chat_log":{
            "chat_count": N, ## ขนาดของ msg_array 
            "msg_array":[
                 {
                    "time_stamp":"2023-02-20T10:22:10+09:00", 
                    "msg":encrypt_msg(room_num,lang_code,.......)
                 },
                 {
                    "time_stamp":"2023-02-20T10:22:10+09:00", 
                    "msg":encrypt_msg(room_num,lang_code,.......)
                }, ...
            ]
        }
    }
    
    def call_curl_post(url, json_payload):
        headers = {'Content-type': 'application/json'}
        response = requests.post(url, data=json.dumps(json_payload), headers=headers)
    
    
    ## การเรยกฟงก
    call_curl_post(url=url, json_payload)
    
    • จาวา
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.SecretKeySpec;
    
    import org.apache.tomcat.util.codec.binary.Base64;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.MediaType;
    import net.minidev.json.JSONObject;   
    
    public class SampleCode {
    
        private String gameKey = <GAME_KEY>;
        private String secretKey = <SECRET_KEY>;
        private String url = "https://clcs.qpyou.cn/chat/api/v1/send-chat-log"
    
        public void callCurlPost() {
            RestTemplate restTemplate = new RestTemplate();
    
            HttpHeaders headers = new HttpHeaders();
            headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON_UTF8));
            headers.setContentType(MediaType.APPLICATION_JSON);
            Map<String, Object> parameters = new HashMap<>();
    
            parameters.put("game_key",  gameKey);
            parameters.put("chat_log", "{"chat_count" : N //msg_array list size,"msg_array":[{"time_stamp":"2023-02-20T10:22:10+09 :00", "msg":encrypt_msg(,,....)},{"time_stamp":"2023-02-20T10:22:10+09:00", "msg ":encrypt_msg(,,....)}, ...]}");
    
            JSONObject jsonParam = getJsonStringFromMap(parameters);
    
            HttpEntity<JSONObject> requestEntity = new HttpEntity<>(jsonParam, headers);
    
            ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
    
            System.out.println("Response status code: " + response.getStatusCode());
            System.out.println("Response body: " + response.getBody());
        }
    
        // การเข้ารหัสข้อความ
        private String encrypt_msg(int room_num, int lang_code, String chat_msg, int chat_mode, int charnnel_user_id) throws Exception {
    
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("time_stamp", "2023-02-20T10:22:10+09:00"); //## "%Y-%m-%d %H:%M:%S",
            map.put("room_num", room_num);
            map.put("lang_code", lang_code);
            map.put("chat_msg", chat_msg);
            map.put("chat_mode", chat_mode);
            map.put("charnnel_user_id", charnnel_user_id);
            JSONObject encrypt_json = new JSONObject(map);
            String encrypt_str = encrypt_json.toJSONString();
            return encrypt(encrypt_str, secret_key);
        }
    
        // การเข้ารหัส
        private String encrypt(String plainText, String key) throws Exception {
            byte[] keyBytes = key.getBytes("UTF-8");
            SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, keySpec);
            byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8"));
            return Base64.encodeBase64String(encryptedBytes);
        }
    
        private static JSONObject getJsonStringFromMap( Map<String, Object> map)
        {
            JSONObject jsonObject = new JSONObject();
            for( Map.Entry<String, Object> entry : map.entrySet() ) {
                String key = entry. getKey();
                Object value = entry. getValue();
                jsonObject. put(key, value);
            }
    
            return jsonObject;
        }
    }
    
    • คูล
    //การทดสอบการเรียก
    curl 
    -d '{"game_key": company key,"chat_log":{"chat_count" : 1,"msg_array":[{"2023-02-20T10:22:10+09:00", "msg":"ข้อความที่เข้ารหัส"}]}}' 
    -H "Content-Type: application/json" 
    -X POST https://test-clcs.qpyou.cn/chat/api/v1/send-chat-log
    
    //HEADER
    POST https://clcs-qpyou.cn/v1/chat/send-chat-log
    Host: clcs-qpyou.cn
    User-Agent: curl/7.43.0
    Accept: */*
    Content-Type: application/json
    
    //BODY
    {
        "game_key":"abcdefghijklmnop",
        "chat_log":{
            "chat_count" : 2,
            "msg_array":[
                {                           
                    "time_stamp":"2023-02-20T10:22:10+09:00", 
                    "msg":"yBDyG1rCthbkXCSpSgGM+ZfHs/B3bZtnxq7f6BOPX2c1Bk8xRAwF6HbkDeN/9prpqeD......"
                },
                {
                    "time_stamp":"2023-02-20T10:22:10+09:00",
                    "msg":"yBDyG1rCthbkXCSpSgGM+ZfHs/B3bZtnxq7f6BOPX2c1Bk8xRAwF6HbkDeN....."
                }
            ]
        }
    }
    
    • ผลลัพธ์
    {
        "result":{
            "result_code":"100",
            "result_msg":"success"
        }
    }