ส่งบันทึกการสนทนา
ระบบการเก็บบันทึกการสนทนา (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-DDTHHss{.mmm}±hh:mm หรือ YYYY-MM-DDTHHss{.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-DDTHHss{.mmm}±hh:mm หรือ YYYY-MM-DDTHHss{.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....." } ] } }
- ผลลัพธ์