Regional platforms

Zalo ส่วนบุคคล

สถานะ: ทดลองใช้งาน การผสานรวมนี้ทำให้ บัญชี Zalo ส่วนบุคคล ทำงานอัตโนมัติผ่าน zca-js แบบเนทีฟ ภายในโปรเซส โดยไม่ต้องใช้ไบนารี CLI ภายนอก

ติดตั้ง

Zalo Personal เป็น Plugin ภายนอกอย่างเป็นทางการ ซึ่งไม่ได้รวมอยู่ในแกนหลัก โปรดติดตั้งก่อนใช้งาน:

bash
openclaw plugins install @openclaw/zalouser
  • ตรึงเวอร์ชัน: openclaw plugins install @openclaw/zalouser@<version>
  • จากการเช็กเอาต์ซอร์ส: openclaw plugins install ./path/to/local/zalouser-plugin
  • รายละเอียด: Plugin

ตั้งค่าอย่างรวดเร็ว

  1. ติดตั้ง Plugin (ด้านบน)
  2. เข้าสู่ระบบ (ด้วย QR บนเครื่อง Gateway):
    • openclaw channels login --channel zalouser
    • สแกนโค้ด QR ด้วยแอป Zalo บนอุปกรณ์เคลื่อนที่
  3. เปิดใช้งานช่องทาง:
json5
{  channels: {    zalouser: {      enabled: true,      dmPolicy: "pairing",    },  },}
  1. รีสตาร์ต Gateway (หรือตั้งค่าให้เสร็จสิ้น)
  2. การเข้าถึง DM มีค่าเริ่มต้นเป็นการจับคู่ โปรดอนุมัติรหัสจับคู่เมื่อมีการติดต่อครั้งแรก

สิ่งนี้คืออะไร

  • ทำงานทั้งหมดภายในโปรเซสผ่านไลบรารี zca-js (ไม่มีไบนารี zca/openzca ภายนอก)
  • ใช้ตัวรับฟังเหตุการณ์แบบเนทีฟ (message, error) เพื่อรับข้อความขาเข้า
  • ส่งการตอบกลับโดยตรงผ่าน JS API (ข้อความ/สื่อ/ลิงก์)
  • ออกแบบมาสำหรับกรณีใช้งาน "บัญชีส่วนบุคคล" ซึ่งไม่สามารถใช้ Zalo Bot API ได้

การตั้งชื่อ

รหัสช่องทางคือ zalouser เพื่อระบุอย่างชัดเจนว่าสิ่งนี้ทำให้ บัญชีผู้ใช้ Zalo ส่วนบุคคล ทำงานอัตโนมัติ (ไม่เป็นทางการ) ส่วน zalo สงวนไว้สำหรับการผสานรวม Zalo API อย่างเป็นทางการที่อาจมีในอนาคต

การค้นหารหัส (ไดเรกทอรี)

bash
openclaw directory self --channel zalouseropenclaw directory peers list --channel zalouser --query "name"openclaw directory groups list --channel zalouser --query "work"

ขีดจำกัด

  • ข้อความขาออกถูกแบ่งเป็นส่วนละ 2000 อักขระ (ขีดจำกัดของไคลเอนต์ Zalo)
  • ไม่รองรับการสตรีม
  • รหัสข้อความขาเข้าที่ประมวลผลเสร็จแล้วจะถูกเก็บไว้ 30 วัน โดยจำกัดไว้ที่ 1000 รายการล่าสุดต่อบัญชี

ความทนทานของข้อความขาเข้า

OpenClaw จัดเก็บคอลแบ็กข้อความดิบ zca-js แต่ละรายการก่อนประมวลผล ข้อความที่รอดำเนินการจะทำงานต่อจากคิวของบัญชีหลังรีสตาร์ต Gateway และการประมวลผลจะยังคงเป็นแบบลำดับต่อแชตส่วนตัวหรือกลุ่ม

ตัวรับฟังซ็อกเก็ต zca-js ไม่ได้เปิดเผยการตอบรับการส่งหรือเล่นข้อความเก่าซ้ำโดยอัตโนมัติหลังเชื่อมต่อใหม่ ดังนั้นคิวที่ทนทานจึงป้องกันช่วงเวลาที่ระบบภายในขัดข้องหลังจากคอลแบ็กมาถึง OpenClaw แต่ไม่สามารถกู้คืนข้อความที่ซ็อกเก็ตไม่เคยส่งมาได้ Tombstone สำหรับการเล่นซ้ำมีไว้เป็นมาตรการป้องกันเป็นหลักในกรณีที่คอลแบ็กเดิมซ้ำด้วยรหัสข้อความ Zalo เดียวกัน

การควบคุมการเข้าถึง (DM)

channels.zalouser.dmPolicy: pairing | allowlist | open | disabled (ค่าเริ่มต้น: pairing)

channels.zalouser.allowFrom ควรใช้รหัสผู้ใช้ Zalo ที่คงที่ และยังสามารถอ้างอิงกลุ่มการเข้าถึงของผู้ส่งแบบคงที่ (accessGroup:<name>) ได้ ระหว่างการตั้งค่าแบบโต้ตอบ ชื่อที่ป้อนสามารถแปลงเป็นรหัสได้โดยใช้การค้นหารายชื่อติดต่อภายในโปรเซสของ Plugin

หากยังมีชื่อดิบอยู่ในการกำหนดค่า ระบบจะหาค่ารหัสให้เมื่อเริ่มต้นเฉพาะในกรณีที่เปิดใช้ channels.zalouser.dangerouslyAllowNameMatching: true เท่านั้น หากไม่ได้เลือกใช้งานนี้ การตรวจสอบผู้ส่งขณะรันไทม์จะใช้เฉพาะรหัส และชื่อดิบจะถูกละเว้นในการอนุญาต

อนุมัติผ่าน:

  • openclaw pairing list zalouser
  • openclaw pairing approve zalouser <code>

การเข้าถึงกลุ่ม (ไม่บังคับ)

  • ค่าเริ่มต้น: channels.zalouser.groupPolicy = "allowlist" (กลุ่มต้องมีรายการในรายการอนุญาตอย่างชัดเจน)
  • เปิดทุกกลุ่ม: channels.zalouser.groupPolicy = "open"
  • บล็อกทุกกลุ่ม: channels.zalouser.groupPolicy = "disabled"
  • เมื่อใช้ groupPolicy = "allowlist":
    • คีย์ channels.zalouser.groups ควรเป็นรหัสกลุ่มที่คงที่ โดยระบบจะแปลงชื่อเป็นรหัสเมื่อเริ่มต้นเฉพาะในกรณีที่เปิดใช้ channels.zalouser.dangerouslyAllowNameMatching: true
    • channels.zalouser.groupAllowFrom ควบคุมว่าผู้ส่งรายใดในกลุ่มที่อนุญาตสามารถเรียกใช้บอตได้ และสามารถอ้างอิงกลุ่มการเข้าถึงของผู้ส่งแบบคงที่ด้วย accessGroup:<name>
  • วิซาร์ดกำหนดค่าสามารถแจ้งให้ระบุรายการอนุญาตของกลุ่มได้
  • โดยค่าเริ่มต้น การจับคู่รายการอนุญาตของกลุ่มจะใช้เฉพาะรหัส ชื่อที่แปลงไม่ได้จะถูกละเว้นสำหรับการอนุญาต เว้นแต่จะเปิดใช้ channels.zalouser.dangerouslyAllowNameMatching: true
  • channels.zalouser.dangerouslyAllowNameMatching: true เป็นโหมดความเข้ากันได้สำหรับเหตุฉุกเฉิน ซึ่งเปิดใช้งานการแปลงชื่อที่เปลี่ยนแปลงได้เมื่อเริ่มต้นและการจับคู่ชื่อกลุ่มขณะรันไทม์อีกครั้ง
  • groupAllowFrom จะ ไม่ ย้อนกลับไปใช้ allowFrom สำหรับข้อความกลุ่มทั่วไป กล่าวคือ หากปล่อยว่างในกลุ่มที่อยู่ในรายการอนุญาต ผู้ส่งทุกคนจะเข้าถึงกลุ่มนั้นได้ คำสั่งควบคุมที่ได้รับอนุญาต (เช่น /new) เป็นข้อยกเว้น โดยการตรวจสอบผู้ส่งคำสั่งจะย้อนกลับไปใช้ allowFrom เมื่อ groupAllowFrom ว่างเปล่า

ตัวอย่าง:

json5
{  channels: {    zalouser: {      groupPolicy: "allowlist",      groupAllowFrom: ["1471383327500481391"],      groups: {        "123456789": { enabled: true },        "Work Chat": { enabled: true },      },    },  },}

การควบคุมด้วยการกล่าวถึงในกลุ่ม

  • channels.zalouser.groups.<group>.requireMention ควบคุมว่าการตอบกลับในกลุ่มต้องมีการกล่าวถึงหรือไม่
  • ลำดับการหาค่า: รหัสกลุ่ม -> นามแฝง group:<id> -> ชื่อกลุ่ม/slug (ตัวเลือกที่อิงตามชื่อจะใช้เฉพาะเมื่อ dangerouslyAllowNameMatching: true) -> * -> ค่าเริ่มต้น (true)
  • ใช้กับทั้งกลุ่มที่อยู่ในรายการอนุญาตและโหมดเปิดกลุ่ม
  • การอ้างข้อความของบอตถือเป็นการกล่าวถึงโดยนัยเพื่อเปิดใช้งานกลุ่ม
  • คำสั่งควบคุมที่ได้รับอนุญาต (เช่น /new) สามารถข้ามการควบคุมด้วยการกล่าวถึงได้
  • เมื่อข้อความกลุ่มถูกข้ามเนื่องจากจำเป็นต้องมีการกล่าวถึง OpenClaw จะจัดเก็บข้อความนั้นเป็นประวัติกลุ่มที่รอดำเนินการ และรวมไว้กับข้อความกลุ่มถัดไปที่ประมวลผล
  • ขีดจำกัดประวัติกลุ่ม: channels.zalouser.historyLimit จากนั้น messages.groupChat.historyLimit แล้วจึงใช้ค่าสำรอง 50

ตัวอย่าง:

json5
{  channels: {    zalouser: {      groupPolicy: "allowlist",      groups: {        "*": { enabled: true, requireMention: true },        "Work Chat": { enabled: true, requireMention: false },      },    },  },}

หลายบัญชี

บัญชีจะเชื่อมโยงกับโปรไฟล์ zalouser ในสถานะ OpenClaw ตัวอย่าง:

json5
{  channels: {    zalouser: {      enabled: true,      defaultAccount: "default",      accounts: {        work: { enabled: true, profile: "work" },      },    },  },}

ตัวแปรสภาพแวดล้อม

การเลือกโปรไฟล์สามารถมาจากตัวแปรสภาพแวดล้อมได้เช่นกัน:

ตัวแปร วัตถุประสงค์
ZALOUSER_PROFILE ชื่อโปรไฟล์ที่จะใช้เมื่อไม่ได้ตั้งค่า profile ในการกำหนดค่าช่องทางหรือบัญชี
ZCA_PROFILE ค่าสำรองเดิม ซึ่งใช้เฉพาะเมื่อไม่ได้ตั้งค่า ZALOUSER_PROFILE

ชื่อโปรไฟล์ใช้เลือกข้อมูลประจำตัวสำหรับเข้าสู่ระบบ Zalo ที่บันทึกไว้ในสถานะ OpenClaw ลำดับการหาค่า:

  1. profile ที่ระบุอย่างชัดเจนในการกำหนดค่า
  2. ZALOUSER_PROFILE
  3. ZCA_PROFILE
  4. รหัสบัญชีสำหรับบัญชีที่ไม่ใช่บัญชีเริ่มต้น หรือ default สำหรับบัญชีเริ่มต้น

สำหรับการตั้งค่าหลายบัญชี ควรตั้งค่า profile ให้แต่ละบัญชีในการกำหนดค่า เพื่อป้องกันไม่ให้ตัวแปรสภาพแวดล้อมเพียงตัวเดียวทำให้หลายบัญชีใช้เซสชันเข้าสู่ระบบเดียวกันร่วมกัน

การพิมพ์ รีแอ็กชัน และการตอบรับการส่ง

  • OpenClaw ส่งเหตุการณ์การพิมพ์ก่อนส่งการตอบกลับ (ตามความสามารถ)
  • รองรับการดำเนินการรีแอ็กชันข้อความ react สำหรับ zalouser ในการดำเนินการของช่องทาง
    • ใช้ remove: true เพื่อลบอีโมจิรีแอ็กชันรายการใดรายการหนึ่งออกจากข้อความ
    • ความหมายของรีแอ็กชัน: รีแอ็กชัน
  • สำหรับข้อความขาเข้าที่มีข้อมูลเมตาของเหตุการณ์ OpenClaw จะส่งการตอบรับว่าส่งถึงแล้วและเห็นแล้ว (ตามความสามารถ)

การแก้ไขปัญหา

สถานะการเข้าสู่ระบบไม่คงอยู่:

  • openclaw channels status --probe
  • เข้าสู่ระบบอีกครั้ง: openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser

แปลงชื่อในรายการอนุญาต/ชื่อกลุ่มไม่ได้:

  • ใช้รหัสตัวเลขใน allowFrom/groupAllowFrom และใช้รหัสกลุ่มที่คงที่ใน groups หากตั้งใจใช้ชื่อเพื่อน/กลุ่มแบบตรงกันทุกประการ ให้เปิดใช้ channels.zalouser.dangerouslyAllowNameMatching: true

อัปเกรดจากการตั้งค่าภายนอกแบบ zca/CLI รุ่นเก่า:

  • นำสมมติฐานเกี่ยวกับโปรเซส zca ภายนอกออก ปัจจุบันช่องทางทำงานทั้งหมดภายในโปรเซสผ่าน zca-js โดยไม่มีไบนารี CLI ภายนอก

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page