Files
openclaw/docs/automation/poll.md
Gustavo Madeira Santana 6dfd39c32f Harden Telegram poll gating and schema consistency (#36547)
Merged via squash.

Prepared head SHA: f77824419e
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-03-05 19:24:43 -05:00

3.2 KiB

summary, read_when, title
summary read_when title
Poll sending via gateway + CLI
Adding or modifying poll support
Debugging poll sends from the CLI or gateway
Polls

Polls

Supported channels

  • Telegram
  • WhatsApp (web channel)
  • Discord
  • MS Teams (Adaptive Cards)

CLI

# 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.