mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-18 23:41:22 +02:00
- List, search, and view contact details - Create, edit, and delete contacts - Toggle favorites and archive status - Number-based reference system for easy commands - German and English command aliases - Login/logout via mana-core-auth Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
186 lines
5 KiB
Markdown
186 lines
5 KiB
Markdown
# Matrix Contacts Bot - Claude Code Guidelines
|
|
|
|
## Overview
|
|
|
|
Matrix Contacts Bot provides contact management via Matrix chat. It integrates with the Contacts backend for full CRUD operations, search, favorites, and archiving.
|
|
|
|
## Tech Stack
|
|
|
|
- **Framework**: NestJS 10
|
|
- **Matrix**: matrix-bot-sdk
|
|
- **Backend**: Contacts API (port 3015)
|
|
- **Auth**: Mana Core Auth (JWT)
|
|
|
|
## 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-contacts-bot/
|
|
├── src/
|
|
│ ├── main.ts # Application entry point (port 3320)
|
|
│ ├── app.module.ts # Root module
|
|
│ ├── health.controller.ts # Health check endpoint
|
|
│ ├── config/
|
|
│ │ └── configuration.ts # Configuration & help messages
|
|
│ ├── bot/
|
|
│ │ ├── bot.module.ts
|
|
│ │ └── matrix.service.ts # Matrix client & command handlers
|
|
│ ├── contacts/
|
|
│ │ ├── contacts.module.ts
|
|
│ │ └── contacts.service.ts # Contacts Backend API client
|
|
│ └── session/
|
|
│ ├── session.module.ts
|
|
│ └── session.service.ts # User session & auth management
|
|
├── Dockerfile
|
|
└── package.json
|
|
```
|
|
|
|
## Bot Commands
|
|
|
|
| Command | Aliases | Description |
|
|
|---------|---------|-------------|
|
|
| `!help` | hilfe | Show help message |
|
|
| `!kontakte` | contacts, liste | List all contacts |
|
|
| `!suche [text]` | search | Search contacts |
|
|
| `!favoriten` | favorites | Show favorites |
|
|
| `!kontakt [nr]` | contact, details | Show contact details |
|
|
| `!neu Vorname [Nachname]` | new, add | Create new contact |
|
|
| `!edit [nr] [feld] [wert]` | bearbeiten | Edit contact field |
|
|
| `!loeschen [nr]` | delete | Delete contact |
|
|
| `!fav [nr]` | favorit | Toggle favorite |
|
|
| `!archiv [nr]` | archive | Toggle archive |
|
|
| `!login email pass` | - | Login |
|
|
| `!logout` | - | Logout |
|
|
| `!status` | - | Bot status |
|
|
|
|
## Editable Fields
|
|
|
|
| Field | Aliases | Description |
|
|
|-------|---------|-------------|
|
|
| `email` | - | Email address |
|
|
| `phone` | telefon | Phone number |
|
|
| `mobile` | mobil, handy | Mobile number |
|
|
| `company` | firma | Company name |
|
|
| `job` | jobtitle, beruf | Job title |
|
|
| `website` | web | Website URL |
|
|
| `street` | strasse | Street address |
|
|
| `city` | stadt | City |
|
|
| `zip` | plz | Postal code |
|
|
| `country` | land | Country |
|
|
| `notes` | notizen | Notes |
|
|
| `birthday` | geburtstag | Birthday (YYYY-MM-DD) |
|
|
|
|
## Example Usage
|
|
|
|
```
|
|
# Create a contact
|
|
!neu Max Mustermann
|
|
|
|
# Add email
|
|
!edit 1 email max@example.com
|
|
|
|
# Add phone
|
|
!edit 1 phone +49 123 456789
|
|
|
|
# Mark as favorite
|
|
!fav 1
|
|
|
|
# Search
|
|
!suche Muster
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
```env
|
|
# Server
|
|
PORT=3320
|
|
|
|
# Matrix
|
|
MATRIX_HOMESERVER_URL=http://localhost:8008
|
|
MATRIX_ACCESS_TOKEN=syt_xxx
|
|
MATRIX_ALLOWED_ROOMS=#contacts:matrix.mana.how
|
|
MATRIX_STORAGE_PATH=./data/bot-storage.json
|
|
|
|
# Contacts Backend
|
|
CONTACTS_BACKEND_URL=http://localhost:3015
|
|
CONTACTS_API_PREFIX=/api/v1
|
|
|
|
# Mana Core Auth
|
|
MANA_CORE_AUTH_URL=http://localhost:3001
|
|
```
|
|
|
|
## Docker
|
|
|
|
```bash
|
|
# Build locally
|
|
docker build -f services/matrix-contacts-bot/Dockerfile -t matrix-contacts-bot services/matrix-contacts-bot
|
|
|
|
# Run
|
|
docker run -p 3320:3320 \
|
|
-e MATRIX_HOMESERVER_URL=http://synapse:8008 \
|
|
-e MATRIX_ACCESS_TOKEN=syt_xxx \
|
|
-e CONTACTS_BACKEND_URL=http://contacts-backend:3015 \
|
|
-e MANA_CORE_AUTH_URL=http://mana-core-auth:3001 \
|
|
-v matrix-contacts-bot-data:/app/data \
|
|
matrix-contacts-bot
|
|
```
|
|
|
|
## Health Check
|
|
|
|
```bash
|
|
curl http://localhost:3320/health
|
|
```
|
|
|
|
## Getting a Matrix Access Token
|
|
|
|
```bash
|
|
# Create bot user first, then login
|
|
curl -X POST "https://matrix.mana.how/_matrix/client/v3/login" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"type": "m.login.password",
|
|
"user": "contacts-bot",
|
|
"password": "your-password"
|
|
}'
|
|
|
|
# Response contains: {"access_token": "syt_xxx", ...}
|
|
```
|
|
|
|
## Contacts Backend API Endpoints Used
|
|
|
|
| Endpoint | Method | Description |
|
|
|----------|--------|-------------|
|
|
| `/health` | GET | Health check |
|
|
| `/api/v1/contacts` | GET | List contacts with filters |
|
|
| `/api/v1/contacts` | POST | Create contact |
|
|
| `/api/v1/contacts/:id` | GET | Get contact details |
|
|
| `/api/v1/contacts/:id` | PATCH | Update contact |
|
|
| `/api/v1/contacts/:id` | DELETE | Delete contact |
|
|
| `/api/v1/contacts/:id/favorite` | POST | Toggle favorite |
|
|
| `/api/v1/contacts/:id/archive` | POST | Toggle archive |
|
|
|
|
## Number-Based Reference System
|
|
|
|
The bot uses a number-based reference system for ease of use:
|
|
1. User runs `!kontakte` or `!suche` to get a list
|
|
2. Bot stores the list internally for the user
|
|
3. User can reference contacts by their list number
|
|
4. Numbers are valid until the user runs a new list command
|
|
|
|
This allows simple commands like:
|
|
- `!kontakt 3` - Show details for contact #3 in the list
|
|
- `!edit 1 email new@email.com` - Edit contact #1
|
|
- `!fav 2` - Toggle favorite for contact #2
|