Zalo
Zalo bot: support status, capabilities, and configuration.
ステータス:実験的。現在はDM(1:1)のみ対応。グループチャット対応はZaloドキュメントで「近日公開」となっています。
プラグインのインストールが必要
Zaloはプラグインとして提供されており、コアインストールには含まれていません。
- CLIインストール:openclaw plugins install @openclaw/zalo
- またはオンボーディングでZaloを選択してインストールプロンプトを確認
- Details: ''/plugin''
初心者向けクイック設定
1. Zaloプラグインをインストール:
- ソースからチェックアウト:openclaw plugins install ./extensions/zalo
- npmから(公開済みの場合):openclaw plugins install @openclaw/zalo
- またはオンボーディングでZaloを選択してインストールプロンプトを確認
2. トークンを設定:
- Env: ZALO_BOT_TOKEN=...
- または設定:channels.zalo.botToken: "..."。
3. Gatewayを再起動(またはオンボーディングを完了)。
4. DMはデフォルトでペアリング:最初の連絡でペアリングコードを受け取り、承認後にメッセージを処理。
Minimum configuration:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}これは何ですか
Zaloはベトナムで人気のあるメッセージングアプリ。Bot APIによりGatewayで1:1ボットを実行できます。サポート/通知などのシナリオに適しています(Zaloへの決定論的ルーティングが必要)。
- Gatewayが管理するZalo Bot APIチャンネル。
- 決定論的ルーティング:返信は常にZaloに戻り、モデルはチャンネルを選択しません。
- DMはエージェントのメインセッションを共有。
- グループチャットはまだ未対応(Zaloドキュメントでは「近日公開」)。
設定(クイックパス)
#
1)ボットトークンを作成(Zalo Bot Platform)
1. https://bot.zaloplatforms.comを開いてログイン。
2. 新しいボットを作成して設定を完了。
3. ボットトークンをコピー(形式:12345689:abc-xyz)。
#
2)トークンを設定(環境変数または設定)
Example:
{
channels: {
zalo: {
enabled: true,
botToken: "12345689:abc-xyz",
dmPolicy: "pairing",
},
},
}環境変数方式:ZALO_BOT_TOKEN=...(デフォルトアカウントのみ適用)。
マルチアカウント:channels.zalo.accountsを使用して各アカウントのトークンを設定(オプションのname)。
3. Gatewayを再起動。トークンが解決可能になると(環境変数または設定)Zaloが起動。
4. DMはデフォルトでペアリング:最初の連絡時にペアリングコードを承認。
動作仕組み(動作)
- 受信メッセージは汎用チャンネルエンベロープに正規化(メディアプレースホルダー付き)。
- 返信は常に同じZaloチャットに戻ります。
- デフォルトはロングポーリング。channels.zalo.webhookUrl経由でwebhookモードを有効化可能。
Limitations
- 送信テキストは2000文字ごとに分割(Zalo API制限)。
- メディアダウンロード/アップロード上限:channels.zalo.mediaMaxMb(デフォルト5MB)。
- 2000文字制限によりストリーミングの意味が薄いため、デフォルトでストリーミングを無効化。
アクセス制御(DM)
#
DMアクセス
- デフォルト:channels.zalo.dmPolicy = "pairing"。不明な送信者はペアリングコードを受け取り、承認前にメッセージは無視(ペアリングコードは1時間で期限切れ)。
- Approve:
- openclaw pairing list zalo
- openclaw pairing approve zalo <CODE>
- ペアリングはデフォルトのトークン交換。詳細:''/start/pairing''
- channels.zalo.allowFromは数値ユーザーIDのみ受け付け(ユーザー名検索なし)。
ロングポーリング vs webhook
- デフォルト:ロングポーリング(公開URL不要)。
- Webhookモード:channels.zalo.webhookUrlとchannels.zalo.webhookSecretを設定。
- シークレットは8–256文字である必要があります。
- Webhook URLはHTTPSである必要があります。
- ZaloはX-Bot-Api-Secret-Tokenヘッダーで検証。
- Gatewayはchannels.zalo.webhookPathでwebhookを処理(デフォルトはwebhook URLのパス)。
注意: Zalo APIドキュメントによると、getUpdates(ポーリング)とwebhookは相互排他的。
対応メッセージタイプ
- テキスト:完全対応(2000文字分割)。
- 画像:受信画像のダウンロード/処理に対応。送信はsendPhoto経由。
- ステッカー:ログに記録されますが、完全には処理されません(通常、エージェント返信をトリガーしません)。
- 非対応タイプ:ログのみ記録(例:保護されたユーザーからのメッセージ)。
Capabilities
| Feature | Status |
| -- |
| DM | ✅ 対応済み |
| グループチャット | ❌ Zaloドキュメント says coming soon |
| メディア(画像) | ✅ 対応済み |
| リアクション | ❌ 未対応 |
| スレッド | ❌ 未対応 |
| Polls | ❌ Not supported |
| ネイティブコマンド | ❌ 未対応 |
| ストリーミング | ⚠️ デフォルトで無効(2000文字制限) |
配信ターゲット(CLI/cron)
- ターゲットはチャットIDを使用。
- Example: openclaw message send --channel zalo --target 123456789 --message "hi".
トラブルシューティング
ボットが応答しない:
- openclaw channels status --probeでトークンが有効か確認
- 送信者が承認済みか確認(ペアリングまたはallowFrom)
- ログを確認:openclaw logs --follow
Webhookがイベントを受信しない:
- Webhook URLがHTTPSであることを確認
- シークレットの長さが8–256文字であることを確認
- GatewayのHTTPエンドポイントが設定されたパスで到達可能であることを確認
- getUpdatesポーリングが実行されていないことを確認(相互排他的)
設定リファレンス(Zalo)
完全な設定:''/gateway/configuration''
プロバイダーオプション:
- channels.zalo.enabled
- channels.zalo.botToken
- channels.zalo.tokenFile(ファイルから読み取り)
- channels.zalo.dmPolicy:pairing | allowlist | open | disabled(デフォルトpairing)
- channels.zalo.allowFrom:DM許可リスト(ユーザーID)。openには"*"が必要。ウィザードは数値IDを要求
- channels.zalo.mediaMaxMb:受信/送信メディア上限(MB、デフォルト5)
- channels.zalo.webhookUrl:webhookモードを有効化(HTTPSが必要)
- channels.zalo.webhookSecret:webhookシークレット(8–256文字)
- channels.zalo.webhookPath:Gatewayのwebhookパス
- channels.zalo.proxy:APIリクエストのプロキシURL
マルチアカウントオプション:
- channels.zalo.accounts.<id>.botToken
- channels.zalo.accounts.<id>.tokenFile
- channels.zalo.accounts.<id>.name
- channels.zalo.accounts.<id>.enabled
- channels.zalo.accounts.<id>.dmPolicy
- channels.zalo.accounts.<id>.allowFrom
- channels.zalo.accounts.<id>.webhookUrl
- channels.zalo.accounts.<id>.webhookSecret
- channels.zalo.accounts.<id>.webhookPath
- channels.zalo.accounts.<id>.proxy