rspace-online/backlog/tasks/task-141 - SMS-text-based-p...

52 lines
2.2 KiB
Markdown

---
id: TASK-141
title: SMS/text-based poll input for rSpace (magic links + optional Twilio 2-way)
status: To Do
assignee: []
created_date: '2026-04-09 16:42'
labels:
- rChoices
- rCal
- integration
- SMS
dependencies: []
references:
- modules/rchoices/mod.ts
- modules/rcal/mod.ts
- modules/rminders/mod.ts
- server/index.ts (webhook pattern examples around line 2808)
priority: high
---
## Description
<!-- SECTION:DESCRIPTION:BEGIN -->
Enable lightweight poll/RSVP responses via text message. Users send a text or click a magic link in SMS/email to respond to polls (e.g. "1" for Yes, "0" for No).
## Phased approach:
1. **Phase 1 — Magic links (minimal infra):** Generate per-participant short token URLs for polls/RSVPs. Send via Mailcow email (free) or any SMS API. Recipient clicks link → minimal no-auth 1-tap response page → updates Automerge doc (rChoices poll or rCal RSVP).
2. **Phase 2 — Twilio 2-way SMS:** Twilio number (~$1/mo), outbound SMS with poll question + response codes, inbound webhook at `POST /api/sms/inbound` parses reply digit, phone→DID mapping table to attribute responses.
## Key integration points:
- **rChoices** (`modules/rchoices/`) — simple polls (vote/rank/spider)
- **rCal** (`modules/rcal/`) — event RSVPs (attendee fields exist but stub)
- **rMinders** (`modules/rminders/`) — could add SMS as action type for scheduled sends
- **Existing webhook pattern** — follow payment webhook style (unauthenticated POST endpoints)
## Design notes from initial discussion:
- Magic link approach gets 90% of value with minimal new infra
- Twilio costs ~$0.02/round-trip, magic links ~$0.01 outbound only
- Email-based variant is free via existing Mailcow setup
- Need phone→DID mapping if doing 2-way SMS
<!-- SECTION:DESCRIPTION:END -->
## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #1 Magic link generation for polls/RSVPs with unique per-participant tokens
- [ ] #2 Minimal no-auth response page (1-tap Yes/No) that updates Automerge doc
- [ ] #3 Email delivery of magic links via Mailcow
- [ ] #4 Optional: Twilio outbound SMS delivery
- [ ] #5 Optional: Twilio inbound webhook parsing for 2-way SMS replies
- [ ] #6 Optional: Phone-to-DID mapping table for SMS identity attribution
<!-- AC:END -->