mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-19 23:21:25 +02:00
- Add matrix-onboarding-bot service that guides users through profile setup - Extend mana-core-auth GlobalSettings with displayName, interests, onboardingCompleted fields - Implement state machine for onboarding flow (NAME → INTERESTS → LANGUAGE → SUMMARY) - Support commands: !start, !profile, !edit, !skip, !help - Add German and English localization - Integrate with mana-core-auth Settings API for profile persistence Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
193 lines
4.9 KiB
Markdown
193 lines
4.9 KiB
Markdown
# Matrix Onboarding Bot - Claude Code Guidelines
|
|
|
|
## Overview
|
|
|
|
Matrix Onboarding Bot guides new users through a profile setup process. It collects display name, interests, and language preference, storing them in mana-core-auth's globalSettings.
|
|
|
|
## Tech Stack
|
|
|
|
- **Framework**: NestJS 10
|
|
- **Matrix**: matrix-bot-sdk via @manacore/matrix-bot-common
|
|
- **Auth**: mana-core-auth (Settings API)
|
|
- **Sessions**: Redis via @manacore/bot-services
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
# Development
|
|
pnpm install
|
|
pnpm start:dev # Start with hot reload
|
|
|
|
# Build
|
|
pnpm build # Production build
|
|
|
|
# Type check
|
|
pnpm type-check # Check TypeScript types
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
services/matrix-onboarding-bot/
|
|
├── src/
|
|
│ ├── main.ts # Application entry point (port 4020)
|
|
│ ├── app.module.ts # Root module
|
|
│ ├── config/
|
|
│ │ └── configuration.ts # Configuration & messages (de/en)
|
|
│ ├── bot/
|
|
│ │ ├── bot.module.ts
|
|
│ │ └── matrix.service.ts # Matrix client & command handlers
|
|
│ └── onboarding/
|
|
│ ├── onboarding.module.ts
|
|
│ ├── onboarding.service.ts # API client for mana-core-auth
|
|
│ └── state-machine.ts # Onboarding flow state machine
|
|
├── Dockerfile
|
|
└── package.json
|
|
```
|
|
|
|
## Bot Commands
|
|
|
|
| Command | Description |
|
|
|---------|-------------|
|
|
| `!start` | Start onboarding (or restart if completed) |
|
|
| `!profile` | Show current profile |
|
|
| `!edit name Max` | Change display name |
|
|
| `!edit interests KI, Musik` | Change interests |
|
|
| `!edit language de` | Change language (de/en) |
|
|
| `!skip` | Skip current question (if allowed) |
|
|
| `!cancel` | Cancel onboarding |
|
|
| `!help` | Show help text |
|
|
|
|
## Onboarding Flow
|
|
|
|
```
|
|
IDLE → NAME → INTERESTS → LANGUAGE → SUMMARY → COMPLETED
|
|
↓ ↓
|
|
SKIP SKIP
|
|
```
|
|
|
|
1. **NAME** (required): Ask for display name
|
|
2. **INTERESTS** (skippable): Ask for interests (comma-separated)
|
|
3. **LANGUAGE** (skippable): Ask for language preference (de/en)
|
|
4. **SUMMARY**: Show profile and ask for confirmation
|
|
5. **COMPLETED**: Save to mana-core-auth and finish
|
|
|
|
## Data Storage
|
|
|
|
Profile data is stored in mana-core-auth's `user_settings.globalSettings`:
|
|
|
|
```typescript
|
|
interface GlobalSettings {
|
|
// ... existing fields
|
|
displayName?: string; // From onboarding
|
|
interests?: string[]; // From onboarding
|
|
onboardingCompleted?: boolean;
|
|
}
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
```env
|
|
# Server
|
|
PORT=4020
|
|
|
|
# Matrix
|
|
MATRIX_HOMESERVER_URL=http://localhost:8008
|
|
MATRIX_ACCESS_TOKEN=syt_xxx
|
|
MATRIX_ALLOWED_ROOMS=#onboarding:matrix.mana.how
|
|
MATRIX_STORAGE_PATH=./data/bot-storage.json
|
|
|
|
# mana-core-auth
|
|
MANA_CORE_AUTH_URL=http://localhost:3001
|
|
MANA_CORE_SERVICE_KEY=your-service-key
|
|
|
|
# Redis (for session storage)
|
|
REDIS_HOST=localhost
|
|
REDIS_PORT=6379
|
|
REDIS_PASSWORD=redis123
|
|
```
|
|
|
|
## API Endpoints Used
|
|
|
|
| Endpoint | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `/api/v1/settings` | GET | Get user settings |
|
|
| `/api/v1/settings/global` | PATCH | Update global settings |
|
|
|
|
## Docker
|
|
|
|
```bash
|
|
# Build
|
|
docker build -f services/matrix-onboarding-bot/Dockerfile -t matrix-onboarding-bot .
|
|
|
|
# Run
|
|
docker run -p 4020:4020 \
|
|
-e MATRIX_HOMESERVER_URL=http://synapse:8008 \
|
|
-e MATRIX_ACCESS_TOKEN=syt_xxx \
|
|
-e MANA_CORE_AUTH_URL=http://mana-auth:3001 \
|
|
-e REDIS_HOST=redis \
|
|
-v matrix-bots-data:/app/data \
|
|
matrix-onboarding-bot
|
|
```
|
|
|
|
## Health Check
|
|
|
|
```bash
|
|
curl http://localhost:4020/health
|
|
```
|
|
|
|
## Authentication
|
|
|
|
The bot requires users to be logged in via Matrix-SSO-Link (shared Redis session).
|
|
|
|
1. User logs in via Matrix SSO link in another bot or web app
|
|
2. Session stored in Redis with Matrix user ID as key
|
|
3. Onboarding bot retrieves token from Redis
|
|
4. Token used to call mana-core-auth Settings API
|
|
|
|
## Example Dialog
|
|
|
|
```
|
|
Bot: Willkommen beim Onboarding!
|
|
|
|
Ich helfe dir, dein Profil einzurichten.
|
|
Wie mochtest du genannt werden?
|
|
|
|
User: Max
|
|
|
|
Bot: Hallo Max! Was sind deine Interessen?
|
|
(z.B. Programmierung, Musik - durch Komma getrennt)
|
|
Sag `!skip` zum Uberspringen.
|
|
|
|
User: KI, Gaming, Musik
|
|
|
|
Bot: Welche Sprache bevorzugst du?
|
|
Antworte mit `de` fur Deutsch oder `en` fur Englisch.
|
|
|
|
User: de
|
|
|
|
Bot: **Dein Profil:**
|
|
- Name: Max
|
|
- Interessen: KI, Gaming, Musik
|
|
- Sprache: Deutsch
|
|
|
|
Ist das korrekt? (ja/nein)
|
|
|
|
User: ja
|
|
|
|
Bot: Perfekt! Dein Profil ist eingerichtet.
|
|
Du kannst es jederzeit mit `!profile` anzeigen oder mit `!edit` andern.
|
|
```
|
|
|
|
## Localization
|
|
|
|
The bot supports German (de) and English (en). Messages are defined in `src/config/configuration.ts` under the `MESSAGES` object.
|
|
|
|
## State Machine
|
|
|
|
The `OnboardingStateMachine` class in `src/onboarding/state-machine.ts` is a pure function that:
|
|
- Takes current state + action
|
|
- Returns new state + message key
|
|
- Has no side effects
|
|
|
|
This makes it easy to test and reason about the flow.
|