Zalo Personal(非公式)

ステータス:実験的。この統合は個人のZaloアカウントをOpenClaw内のネイティブzca-jsで自動化します。

警告: これは非公式の統合であり、アカウントの停止やBANにつながる可能性があります。ご自身の責任でご使用ください。

プラグインが必要

Zalo Personalはプラグインとして提供され、コアインストールには含まれていません。

  • CLI経由でインストール:openclaw plugins install @openclaw/zalouser
  • ソースチェックアウトから:openclaw plugins install ./extensions/zalouser
  • 詳細:プラグイン

外部のzca/openzca CLIバイナリは不要です。

クイックセットアップ(初心者向け)

  1. プラグインをインストール(上記参照)。
  2. ログイン(QR、Gatewayマシン上で):
    • openclaw channels login --channel zalouser
    • Zaloモバイルアプリでスキャン。
  3. チャンネルを有効化:
{
  channels: {
    zalouser: {
      enabled: true,
      dmPolicy: "pairing",
    },
  },
}
  1. Gatewayを再起動(またはオンボーディングを完了)。
  2. DMアクセスはデフォルトでペアリング。初回接触時にペアリングコードを承認してください。

概要

  • zca-jsを使用してプロセス内で完全に実行されます。
  • ネイティブのイベントリスナーで受信メッセージを受け取ります。
  • JS APIを通じて直接返信を送信します(テキスト/メディア/リンク)。
  • Zalo Bot APIが利用できない「個人アカウント」ユースケース向けに設計されています。

命名規則

チャンネルIDはzalouserです。これは個人のZaloユーザーアカウントを自動化する(非公式)ことを明示するためです。将来の公式Zalo API統合のためにzaloを予約しています。

IDの検索(ディレクトリ)

ディレクトリCLIを使用してピア/グループとそのIDを検索します:

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

制限事項

  • アウトバウンドテキストは約2000文字で分割されます(Zaloクライアントの制限)。
  • ストリーミングはデフォルトでブロックされています。

アクセス制御(DM)

channels.zalouser.dmPolicyは以下をサポート:pairing | allowlist | open | disabled(デフォルト:pairing)。

channels.zalouser.allowFromはユーザーIDまたは名前を受け付けます。オンボーディング中に、プラグインのプロセス内連絡先検索を使用して名前がIDに解決されます。

承認方法:

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

グループアクセス(オプション)

  • デフォルト:channels.zalouser.groupPolicy = "open"(グループ許可)。未設定時のデフォルトを上書きするにはchannels.defaults.groupPolicyを使用してください。
  • 許可リストで制限する場合:
    • channels.zalouser.groupPolicy = "allowlist"
    • channels.zalouser.groups(キーは安定したグループIDを使用。名前は起動時に可能な場合IDに解決されます)
    • channels.zalouser.groupAllowFrom(許可されたグループ内でボットをトリガーできる送信者を制御)
  • すべてのグループをブロック:channels.zalouser.groupPolicy = "disabled"
  • 設定ウィザードでグループ許可リストのプロンプトが表示されます。
  • 起動時にOpenClawは許可リスト内のグループ/ユーザー名をIDに解決し、マッピングをログに記録します。
  • グループ許可リストのマッチングはデフォルトでID限定です。未解決の名前はchannels.zalouser.dangerouslyAllowNameMatching: trueが有効でない限り認証では無視されます。
  • channels.zalouser.dangerouslyAllowNameMatching: trueは、可変グループ名マッチングを再有効化するブレークグラス互換モードです。
  • groupAllowFromが未設定の場合、ランタイムはグループ送信者チェックでallowFromにフォールバックします。
  • 送信者チェックは通常のグループメッセージとコントロールコマンド(例:/new/reset)の両方に適用されます。

例:

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

グループメンションゲーティング

  • channels.zalouser.groups.<group>.requireMentionはグループ返信にメンションが必要かどうかを制御します。
  • 解決順序:正確なグループID/名前 -> 正規化されたグループスラッグ -> * -> デフォルト(true)。
  • これは許可リストのグループとオープングループモードの両方に適用されます。
  • 認可されたコントロールコマンド(例:/new)はメンションゲーティングをバイパスできます。
  • メンションが必要なためにグループメッセージがスキップされた場合、OpenClawはそれを保留中のグループ履歴として保存し、次に処理されるグループメッセージに含めます。
  • グループ履歴制限のデフォルトはmessages.groupChat.historyLimit(フォールバック50)です。channels.zalouser.historyLimitでアカウントごとに上書きできます。

例:

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

マルチアカウント

アカウントはOpenClaw状態内のzalouserプロファイルにマップされます。例:

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

タイピング、リアクション、配信確認

  • OpenClawは返信の送信前にタイピングイベントを送信します(ベストエフォート)。
  • メッセージリアクションアクションreactはチャンネルアクションでzalouserに対応しています。
    • remove: trueで特定のリアクション絵文字をメッセージから削除します。
    • リアクションのセマンティクス:リアクション
  • イベントメタデータを含む受信メッセージに対して、OpenClawは配信済み+既読確認を送信します(ベストエフォート)。

トラブルシューティング

ログインが維持されない:

  • openclaw channels status --probe
  • 再ログイン:openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser

許可リスト/グループ名が解決されない:

  • allowFrom/groupAllowFrom/groupsには数値IDを使用するか、正確なフレンド/グループ名を使用してください。

古いCLIベースのセットアップからアップグレードした場合:

  • 古い外部zcaプロセスの前提を削除してください。
  • チャンネルは外部CLIバイナリなしでOpenClaw内で完全に実行されます。