Files
bot/docs/automation/poll.md
zeekayandHanzo Dev 84e4069c2c docs name the state dir and config file the bot reads: ~/.bot/bot.json
The docs said ~/.hanzo-bot/hanzo-bot.json (and ~/.hanzo-bot-<profile>, hanzo-bot.plugin.json), which nothing reads: src/config/paths.ts resolves ~/.bot, bot.json and ~/.bot-<profile>, and plugins ship bot.plugin.json. Every such path in docs/ now names what the code opens.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-24 21:12:09 -07: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
hanzo-bot message poll --channel telegram --target 123456789 \
  --poll-question "Ship it?" --poll-option "Yes" --poll-option "No"
hanzo-bot message poll --channel telegram --target -1001234567890:topic:42 \
  --poll-question "Pick a time" --poll-option "10am" --poll-option "2pm" \
  --poll-duration-seconds 300

# WhatsApp
hanzo-bot message poll --target +15555550123 \
  --poll-question "Lunch today?" --poll-option "Yes" --poll-option "No" --poll-option "Maybe"
hanzo-bot message poll --target [email protected] \
  --poll-question "Meeting time?" --poll-option "10am" --poll-option "2pm" --poll-option "4pm" --poll-multi

# Discord
hanzo-bot message poll --channel discord --target channel:123456789 \
  --poll-question "Snack?" --poll-option "Pizza" --poll-option "Sushi"
hanzo-bot message poll --channel discord --target channel:123456789 \
  --poll-question "Plan?" --poll-option "A" --poll-option "B" --poll-duration-hours 48

# MS Teams
hanzo-bot message poll --channel msteams --target conversation:19:[email protected] \
  --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 (HanzoBot-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 ~/.bot/msteams-polls.json.