botserver/docs/api/rest-endpoints.md

600 lines
8 KiB
Markdown
Raw Normal View History

# REST API Endpoints
Complete reference for all General Bots REST API endpoints.
## Sessions
### List Sessions
```http
GET /api/sessions
```
**Query Parameters:**
| Parameter | Type | Description |
|-----------|------|-------------|
| `limit` | integer | Max results (default: 50) |
| `offset` | integer | Pagination offset |
| `status` | string | Filter by status: `active`, `closed` |
**Response:**
```json
{
"sessions": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"user_id": "user@example.com",
"bot_id": "default",
"status": "active",
"created_at": "2024-01-01T10:00:00Z",
"last_activity": "2024-01-01T10:30:00Z"
}
],
"total": 1,
"limit": 50,
"offset": 0
}
```
### Create Session
```http
POST /api/sessions
```
**Request Body:**
```json
{
"bot_id": "default",
"user_id": "user@example.com",
"metadata": {
"channel": "web",
"language": "en"
}
}
```
### Get Session
```http
GET /api/sessions/:id
```
### Send Message
```http
POST /api/sessions/:id/messages
```
**Request Body:**
```json
{
"content": "Hello, I need help",
"type": "text"
}
```
**Response:**
```json
{
"id": "msg-uuid",
"session_id": "session-uuid",
"role": "assistant",
"content": "Hello! How can I assist you today?",
"timestamp": "2024-01-01T10:31:00Z"
}
```
---
## Drive (File Storage)
### List Files
```http
GET /api/drive
GET /api/drive/:path
```
**Query Parameters:**
| Parameter | Type | Description |
|-----------|------|-------------|
| `recursive` | boolean | Include subdirectories |
| `type` | string | Filter: `file`, `folder` |
### Upload File
```http
POST /api/drive/:path
Content-Type: multipart/form-data
```
### Download File
```http
GET /api/drive/:path/download
```
### Delete File
```http
DELETE /api/drive/:path
```
---
## Tasks
### List Tasks
```http
GET /api/tasks
```
**Query Parameters:**
| Parameter | Type | Description |
|-----------|------|-------------|
| `status` | string | `pending`, `completed`, `cancelled` |
| `priority` | string | `low`, `medium`, `high` |
| `due_before` | datetime | Filter by due date |
### Create Task
```http
POST /api/tasks
```
**Request Body:**
```json
{
"title": "Follow up with client",
"description": "Send proposal document",
"due_date": "2024-01-15T17:00:00Z",
"priority": "high",
"assignee": "user@example.com"
}
```
### Update Task
```http
PUT /api/tasks/:id
```
### Delete Task
```http
DELETE /api/tasks/:id
```
---
## Email
### List Emails
```http
GET /api/email
GET /api/email/:folder
```
**Folders:** `inbox`, `sent`, `drafts`, `trash`
### Send Email
```http
POST /api/email/send
```
**Request Body:**
```json
{
"to": ["recipient@example.com"],
"cc": [],
"bcc": [],
"subject": "Meeting Tomorrow",
"body": "Hi, let's meet at 3pm.",
"html": false,
"attachments": []
}
```
### Get Email
```http
GET /api/email/:id
```
### Delete Email
```http
DELETE /api/email/:id
```
---
## Calendar
### List Events
```http
GET /api/calendar/events
```
**Query Parameters:**
| Parameter | Type | Description |
|-----------|------|-------------|
| `start` | datetime | Range start |
| `end` | datetime | Range end |
| `calendar_id` | string | Specific calendar |
### Create Event
```http
POST /api/calendar/events
```
**Request Body:**
```json
{
"title": "Team Meeting",
"start_time": "2024-01-15T14:00:00Z",
"end_time": "2024-01-15T15:00:00Z",
"location": "Conference Room A",
"attendees": ["team@example.com"],
"recurrence": null
}
```
### Export Calendar (iCal)
```http
GET /api/calendar/export.ics
```
### Import Calendar
```http
POST /api/calendar/import
Content-Type: text/calendar
```
---
## Meet (Video Conferencing)
### Create Room
```http
POST /api/meet/rooms
```
**Request Body:**
```json
{
"name": "Team Standup",
"scheduled_start": "2024-01-15T09:00:00Z",
"max_participants": 10
}
```
**Response:**
```json
{
"room_id": "room-uuid",
"join_url": "https://meet.example.com/room-uuid",
"token": "participant-token"
}
```
### Join Room
```http
POST /api/meet/rooms/:id/join
```
### List Participants
```http
GET /api/meet/rooms/:id/participants
```
---
## Knowledge Base
### Search
```http
GET /api/kb/search
```
**Query Parameters:**
| Parameter | Type | Description |
|-----------|------|-------------|
| `q` | string | Search query (required) |
| `limit` | integer | Max results (default: 10) |
| `threshold` | float | Similarity threshold (0-1) |
| `collection` | string | Specific KB collection |
**Response:**
```json
{
"results": [
{
"id": "doc-uuid",
"content": "Relevant document content...",
"score": 0.95,
"metadata": {
"source": "company-docs",
"title": "Employee Handbook"
}
}
],
"query": "vacation policy",
"total": 5
}
```
### List Collections
```http
GET /api/kb/collections
```
### Reindex Collection
```http
POST /api/kb/reindex
```
---
## Analytics
### Dashboard Stats
```http
GET /api/analytics/stats
```
**Query Parameters:**
| Parameter | Type | Description |
|-----------|------|-------------|
| `time_range` | string | `day`, `week`, `month`, `year` |
**Response:**
```json
{
"total_messages": 15420,
"active_sessions": 45,
"avg_response_time_ms": 230,
"error_rate": 0.02,
"top_queries": [
{"query": "password reset", "count": 120}
]
}
```
### Message Trends
```http
GET /api/analytics/messages/trend
```
---
## Paper (Documents)
### List Documents
```http
GET /api/paper
```
### Create Document
```http
POST /api/paper
```
**Request Body:**
```json
{
"title": "Meeting Notes",
"content": "# Meeting Notes\n\n...",
"type": "note"
}
```
### Get Document
```http
GET /api/paper/:id
```
### Update Document
```http
PUT /api/paper/:id
```
### Delete Document
```http
DELETE /api/paper/:id
```
---
## Designer (Bot Builder)
### List Dialogs
```http
GET /api/designer/dialogs
```
### Create Dialog
```http
POST /api/designer/dialogs
```
**Request Body:**
```json
{
"name": "greeting",
"content": "TALK \"Hello!\"\nanswer = HEAR"
}
```
### Validate Dialog
```http
POST /api/designer/dialogs/:id/validate
```
**Response:**
```json
{
"valid": true,
"errors": [],
"warnings": ["Line 15: Consider using END IF"]
}
```
### Deploy Dialog
```http
POST /api/designer/dialogs/:id/deploy
```
---
## Sources (Templates)
### List Templates
```http
GET /api/sources/templates
```
**Query Parameters:**
| Parameter | Type | Description |
|-----------|------|-------------|
| `category` | string | Filter by category |
### Get Template
```http
GET /api/sources/templates/:id
```
### Use Template
```http
POST /api/sources/templates/:id/use
```
---
## Admin
### System Stats
```http
GET /api/admin/stats
```
**Response:**
```json
{
"uptime_seconds": 86400,
"memory_used_mb": 512,
"active_connections": 23,
"database_size_mb": 1024,
"cache_hit_rate": 0.85
}
```
### Health Check
```http
GET /api/health
```
**Response:**
```json
{
"status": "healthy",
"components": {
"database": "ok",
"cache": "ok",
"storage": "ok",
"llm": "ok"
}
}
```
---
## Error Codes
| Code | HTTP Status | Description |
|------|-------------|-------------|
| `BAD_REQUEST` | 400 | Invalid request parameters |
| `UNAUTHORIZED` | 401 | Missing or invalid auth token |
| `FORBIDDEN` | 403 | Insufficient permissions |
| `NOT_FOUND` | 404 | Resource not found |
| `CONFLICT` | 409 | Resource already exists |
| `RATE_LIMITED` | 429 | Too many requests |
| `INTERNAL_ERROR` | 500 | Server error |
---
## Pagination
List endpoints support pagination:
```http
GET /api/tasks?limit=20&offset=40
```
Response includes pagination info:
```json
{
"data": [...],
"pagination": {
"total": 150,
"limit": 20,
"offset": 40,
"has_more": true
}
}
```