--- summary: "Poll sending via gateway + CLI" read_when: - Adding or modifying poll support - Debugging poll sends from the CLI or gateway title: "Polls" --- # Polls ## Supported channels - Telegram - WhatsApp (web channel) - Discord - MS Teams (Adaptive Cards) ## CLI ```bash # Telegram openclaw message poll --channel telegram --target 123456789 \ --poll-question "Ship it?" --poll-option "Yes" --poll-option "No" openclaw message poll --channel telegram --target -1001234567890:topic:42 \ --poll-question "Pick a time" --poll-option "10am" --poll-option "2pm" \ --poll-duration-seconds 300 # WhatsApp openclaw message poll --target +15555550123 \ --poll-question "Lunch today?" --poll-option "Yes" --poll-option "No" --poll-option "Maybe" openclaw message poll --target 123456789@g.us \ --poll-question "Meeting time?" --poll-option "10am" --poll-option "2pm" --poll-option "4pm" --poll-multi # Discord openclaw message poll --channel discord --target channel:123456789 \ --poll-question "Snack?" --poll-option "Pizza" --poll-option "Sushi" openclaw message poll --channel discord --target channel:123456789 \ --poll-question "Plan?" --poll-option "A" --poll-option "B" --poll-duration-hours 48 # MS Teams openclaw message poll --channel msteams --target conversation:19:abc@thread.tacv2 \ --poll-question "Lunch?" --poll-option "Pizza" --poll-option "Sushi" ``` Options: - `--channel`: `whatsapp` (default), `telegram`, `discord`, or `msteams` - `--poll-multi`: allow selecting multiple options - `--poll-duration-hours`: Discord-only (defaults to 24 when omitted) - `--poll-duration-seconds`: Telegram-only (5-600 seconds) - `--poll-anonymous` / `--poll-public`: Telegram-only poll visibility ## Gateway RPC Method: `poll` Params: - `to` (string, required) - `question` (string, required) - `options` (string[], required) - `maxSelections` (number, optional) - `durationHours` (number, optional) - `durationSeconds` (number, optional, Telegram-only) - `isAnonymous` (boolean, optional, Telegram-only) - `channel` (string, optional, default: `whatsapp`) - `idempotencyKey` (string, required) ## Channel differences - Telegram: 2-10 options. Supports forum topics via `threadId` or `:topic:` targets. Uses `durationSeconds` instead of `durationHours`, limited to 5-600 seconds. Supports anonymous and public polls. - WhatsApp: 2-12 options, `maxSelections` must be within option count, ignores `durationHours`. - Discord: 2-10 options, `durationHours` clamped to 1-768 hours (default 24). `maxSelections > 1` enables multi-select; Discord does not support a strict selection count. - MS Teams: Adaptive Card polls (OpenClaw-managed). No native poll API; `durationHours` is ignored. ## Agent tool (Message) Use the `message` tool with `poll` action (`to`, `pollQuestion`, `pollOption`, optional `pollMulti`, `pollDurationHours`, `channel`). For Telegram, the tool also accepts `pollDurationSeconds`, `pollAnonymous`, and `pollPublic`. Use `action: "poll"` for poll creation. Poll fields passed with `action: "send"` are rejected. Note: Discord has no “pick exactly N” mode; `pollMulti` maps to multi-select. Teams polls are rendered as Adaptive Cards and require the gateway to stay online to record votes in `~/.openclaw/msteams-polls.json`.