Zalo (Bot API)
ステータス: 実験的。DMはサポートされています。以下の機能セクションには、現在のMarketplaceボットの挙動が反映されています。バンドル済みプラグイン
Zaloは現在のOpenClawリリースにバンドル済みプラグインとして含まれているため、通常のパッケージ済み ビルドでは別途インストールは不要です。 古いビルドまたはZaloを含まないカスタムインストールを使用している場合は、 手動でインストールしてください。- CLIでインストール:
openclaw plugins install @openclaw/zalo - またはソースチェックアウトから:
openclaw plugins install ./path/to/local/zalo-plugin - 詳細: Plugins
クイックセットアップ(初級者向け)
- Zaloプラグインが利用可能であることを確認します。
- 現在のパッケージ版OpenClawリリースには、すでにバンドルされています。
- 古い/カスタムインストールでは、上記のコマンドで手動追加できます。
- トークンを設定します。
- 環境変数:
ZALO_BOT_TOKEN=... - または設定:
channels.zalo.accounts.default.botToken: "..."。
- 環境変数:
- Gatewayを再起動します(またはセットアップを完了します)。
- DMアクセスはデフォルトでペアリングです。初回接触時にペアリングコードを承認してください。
これは何か
Zaloはベトナムで広く使われているメッセージングアプリです。そのBot APIにより、Gatewayは1対1の会話用ボットを実行できます。 Zaloへの決定論的な返信ルーティングが必要なサポートや通知に適しています。 このページは、Zalo Bot Creator / Marketplace botsに対する現在のOpenClawの挙動を反映しています。 Zalo Official Account (OA) botsは別のZalo製品サーフェスであり、挙動が異なる場合があります。- Gatewayが所有するZalo Bot APIチャンネル。
- 決定論的ルーティング: 返信はZaloに戻り、モデルがチャンネルを選ぶことはありません。
- DMはエージェントのメインセッションを共有します。
- 以下の機能セクションに、現在のMarketplaceボットのサポート状況を示しています。
セットアップ(短縮手順)
1) ボットトークンを作成する(Zalo Bot Platform)
- https://bot.zaloplatforms.comにアクセスしてサインインします。
- 新しいボットを作成し、その設定を行います。
- 完全なボットトークン(通常は
numeric_id:secret)をコピーします。Marketplaceボットでは、利用可能なランタイムトークンが作成後のボット歓迎メッセージ内に表示されることがあります。
2) トークンを設定する(環境変数または設定)
例:groupPolicyやgroupAllowFromのようなグループ固有設定を明示的に追加できます。現在のMarketplaceボットの挙動については、機能を参照してください。
環境変数オプション: ZALO_BOT_TOKEN=...(デフォルトアカウントでのみ動作)。
複数アカウント対応: channels.zalo.accountsを使用し、アカウントごとのトークンと任意のnameを設定します。
- Gatewayを再起動します。Zaloはトークンが解決されると起動します(環境変数または設定)。
- DMアクセスはデフォルトでペアリングです。ボットに初めて接触したときにコードを承認してください。
仕組み(動作)
- 受信メッセージは、メディアプレースホルダー付きの共有チャンネルエンベロープに正規化されます。
- 返信は常に同じZaloチャットにルーティングされます。
- デフォルトはlong-pollingで、
channels.zalo.webhookUrlを使うとwebhookモードも利用できます。
制限
- 送信テキストは2000文字単位に分割されます(Zalo API制限)。
- メディアのダウンロード/アップロードは
channels.zalo.mediaMaxMbで制限されます(デフォルト5)。 - 2000文字制限によりストリーミングの有用性が低いため、デフォルトでストリーミングはブロックされます。
アクセス制御(DM)
DMアクセス
- デフォルト:
channels.zalo.dmPolicy = "pairing"。不明な送信者にはペアリングコードが返され、承認されるまでメッセージは無視されます(コードは1時間で期限切れ)。 - 承認方法:
openclaw pairing list zaloopenclaw pairing approve zalo <CODE>
- ペアリングがデフォルトのトークン交換です。詳細: Pairing
channels.zalo.allowFromは数値のユーザーIDを受け付けます(ユーザー名参照は利用不可)。
アクセス制御(グループ)
Zalo Bot Creator / Marketplace botsでは、実際にはボットをグループに追加できなかったため、グループサポートは利用できませんでした。 つまり、以下のグループ関連設定キーはスキーマには存在しますが、Marketplaceボットでは使用できませんでした。channels.zalo.groupPolicyは、グループ受信処理を制御します:open | allowlist | disabled。channels.zalo.groupAllowFromは、グループ内でどの送信者IDがボットをトリガーできるかを制限します。groupAllowFromが未設定の場合、Zaloは送信者チェックにallowFromへフォールバックします。- ランタイム注記:
channels.zalo自体が完全に欠落している場合でも、安全のためランタイムは引き続きgroupPolicy="allowlist"へフォールバックします。
groupPolicy: "disabled"— すべてのグループメッセージをブロックします。groupPolicy: "open"— 任意のグループメンバーを許可します(メンション制御あり)。groupPolicy: "allowlist"— fail-closedのデフォルトで、許可された送信者のみ受け付けます。
Long-polling と webhook
- デフォルト: long-polling(公開URL不要)。
- webhookモード:
channels.zalo.webhookUrlとchannels.zalo.webhookSecretを設定します。- webhookシークレットは8~256文字である必要があります。
- webhook URLはHTTPSを使用する必要があります。
- Zaloは検証用に
X-Bot-Api-Secret-Tokenヘッダー付きでイベントを送信します。 - Gateway HTTPは
channels.zalo.webhookPathでwebhookリクエストを処理します(デフォルトはwebhook URLのパス)。 - リクエストは
Content-Type: application/json(または+jsonメディアタイプ)を使用する必要があります。 - 重複イベント(
event_name + message_id)は短いリプレイウィンドウの間、無視されます。 - バーストトラフィックはパス/送信元ごとにレート制限され、HTTP 429が返る場合があります。
サポートされるメッセージタイプ
簡単なサポート状況は機能を参照してください。以下の注記では、追加の文脈が必要な挙動を補足しています。- テキストメッセージ: 2000文字分割付きで完全サポート。
- テキスト内のプレーンURL: 通常のテキスト入力と同様に動作します。
- リンクプレビュー / リッチリンクカード: 機能のMarketplaceボット状況を参照してください。安定して返信をトリガーしませんでした。
- 画像メッセージ: 機能のMarketplaceボット状況を参照してください。受信画像処理は不安定でした(入力中表示は出るが最終返信なし)。
- ステッカー: 機能のMarketplaceボット状況を参照してください。
- ボイスノート / 音声ファイル / 動画 / 汎用ファイル添付: 機能のMarketplaceボット状況を参照してください。
- 未対応タイプ: ログ出力されます(例: 保護されたユーザーからのメッセージ)。
機能
この表は、OpenClawにおける現在のZalo Bot Creator / Marketplace botの挙動をまとめたものです。| 機能 | ステータス |
|---|---|
| ダイレクトメッセージ | ✅ サポート |
| グループ | ❌ Marketplaceボットでは利用不可 |
| メディア(受信画像) | ⚠️ 限定的 / 環境で要確認 |
| メディア(送信画像) | ⚠️ Marketplaceボットでは未再検証 |
| テキスト内のプレーンURL | ✅ サポート |
| リンクプレビュー | ⚠️ Marketplaceボットでは不安定 |
| リアクション | ❌ 未サポート |
| ステッカー | ⚠️ Marketplaceボットではエージェント返信なし |
| ボイスノート / 音声 / 動画 | ⚠️ Marketplaceボットではエージェント返信なし |
| ファイル添付 | ⚠️ Marketplaceボットではエージェント返信なし |
| スレッド | ❌ 未サポート |
| Polls | ❌ 未サポート |
| ネイティブコマンド | ❌ 未サポート |
| ストリーミング | ⚠️ ブロック済み(2000文字制限) |
配信先ターゲット(CLI/cron)
- ターゲットにはchat idを使用します。
- 例:
openclaw message send --channel zalo --target 123456789 --message "hi"。
トラブルシューティング
ボットが応答しない:- トークンが有効か確認する:
openclaw channels status --probe - 送信者が承認済みであることを確認する(ペアリングまたはallowFrom)
- Gatewayログを確認する:
openclaw logs --follow
- webhook URLがHTTPSを使用していることを確認する
- シークレットトークンが8~256文字であることを確認する
- 設定されたパスでGateway HTTPエンドポイントに到達できることを確認する
- getUpdates pollingが実行中でないことを確認する(相互排他的です)
設定リファレンス(Zalo)
完全な設定: Configuration フラットなトップレベルキー(channels.zalo.botToken、channels.zalo.dmPolicyなど)は、レガシーな単一アカウント用ショートハンドです。新しい設定ではchannels.zalo.accounts.<id>.*を推奨します。両方の形式はスキーマ内に存在するため、ここでも引き続き文書化しています。
プロバイダーオプション:
channels.zalo.enabled: チャンネル起動を有効化/無効化します。channels.zalo.botToken: Zalo Bot Platformのボットトークン。channels.zalo.tokenFile: 通常のファイルパスからトークンを読み取ります。symlinkは拒否されます。channels.zalo.dmPolicy:pairing | allowlist | open | disabled(デフォルト: pairing)。channels.zalo.allowFrom: DM許可リスト(ユーザーID)。openには"*"が必要です。ウィザードでは数値IDを尋ねます。channels.zalo.groupPolicy:open | allowlist | disabled(デフォルト: allowlist)。設定には存在します。現在のMarketplaceボットの挙動については、機能およびアクセス制御(グループ)を参照してください。channels.zalo.groupAllowFrom: グループ送信者許可リスト(ユーザーID)。未設定時はallowFromへフォールバックします。channels.zalo.mediaMaxMb: 受信/送信メディア上限(MB、デフォルト5)。channels.zalo.webhookUrl: webhookモードを有効化します(HTTPS必須)。channels.zalo.webhookSecret: webhookシークレット(8~256文字)。channels.zalo.webhookPath: Gateway HTTPサーバー上のwebhookパス。channels.zalo.proxy: APIリクエスト用プロキシURL。
channels.zalo.accounts.<id>.botToken: アカウントごとのトークン。channels.zalo.accounts.<id>.tokenFile: アカウントごとの通常のトークンファイル。symlinkは拒否されます。channels.zalo.accounts.<id>.name: 表示名。channels.zalo.accounts.<id>.enabled: アカウントを有効化/無効化します。channels.zalo.accounts.<id>.dmPolicy: アカウントごとのDMポリシー。channels.zalo.accounts.<id>.allowFrom: アカウントごとの許可リスト。channels.zalo.accounts.<id>.groupPolicy: アカウントごとのグループポリシー。設定には存在します。現在のMarketplaceボットの挙動については、機能およびアクセス制御(グループ)を参照してください。channels.zalo.accounts.<id>.groupAllowFrom: アカウントごとのグループ送信者許可リスト。channels.zalo.accounts.<id>.webhookUrl: アカウントごとのwebhook URL。channels.zalo.accounts.<id>.webhookSecret: アカウントごとのwebhookシークレット。channels.zalo.accounts.<id>.webhookPath: アカウントごとのwebhookパス。channels.zalo.accounts.<id>.proxy: アカウントごとのプロキシURL。
関連
- Channels Overview — サポートされるすべてのチャンネル
- Pairing — DM認証とペアリングフロー
- Groups — グループチャットの挙動とメンション制御
- Channel Routing — メッセージのセッションルーティング
- Security — アクセスモデルとハードニング