508 lines
8.9 KiB
Markdown
508 lines
8.9 KiB
Markdown
|
|
# Tasks API
|
||
|
|
|
||
|
|
BotServer provides RESTful endpoints for creating, managing, and tracking tasks and workflows within bot conversations.
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
The Tasks API enables:
|
||
|
|
- Task creation and assignment
|
||
|
|
- Workflow management
|
||
|
|
- Task tracking and status updates
|
||
|
|
- Deadline management
|
||
|
|
- Task prioritization
|
||
|
|
- Collaboration features
|
||
|
|
|
||
|
|
## Base URL
|
||
|
|
|
||
|
|
```
|
||
|
|
http://localhost:8080/api/v1/tasks
|
||
|
|
```
|
||
|
|
|
||
|
|
## Authentication
|
||
|
|
|
||
|
|
All Tasks API requests require authentication:
|
||
|
|
|
||
|
|
```http
|
||
|
|
Authorization: Bearer <token>
|
||
|
|
```
|
||
|
|
|
||
|
|
## Endpoints
|
||
|
|
|
||
|
|
### Create Task
|
||
|
|
|
||
|
|
**POST** `/tasks`
|
||
|
|
|
||
|
|
Create a new task.
|
||
|
|
|
||
|
|
**Request Body:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"title": "Review customer complaint",
|
||
|
|
"description": "Investigate and respond to customer issue #1234",
|
||
|
|
"assignee": "user456",
|
||
|
|
"due_date": "2024-01-20T17:00:00Z",
|
||
|
|
"priority": "high",
|
||
|
|
"tags": ["support", "urgent"],
|
||
|
|
"context": {
|
||
|
|
"conversation_id": "conv_abc123",
|
||
|
|
"bot_id": "support_bot"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"task_id": "tsk_xyz789",
|
||
|
|
"title": "Review customer complaint",
|
||
|
|
"status": "pending",
|
||
|
|
"created_at": "2024-01-15T10:00:00Z",
|
||
|
|
"created_by": "user123"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Get Task
|
||
|
|
|
||
|
|
**GET** `/tasks/{task_id}`
|
||
|
|
|
||
|
|
Retrieve task details.
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"task_id": "tsk_xyz789",
|
||
|
|
"title": "Review customer complaint",
|
||
|
|
"description": "Investigate and respond to customer issue #1234",
|
||
|
|
"status": "in_progress",
|
||
|
|
"assignee": {
|
||
|
|
"user_id": "user456",
|
||
|
|
"name": "Jane Smith",
|
||
|
|
"avatar_url": "https://example.com/avatar.jpg"
|
||
|
|
},
|
||
|
|
"priority": "high",
|
||
|
|
"due_date": "2024-01-20T17:00:00Z",
|
||
|
|
"created_at": "2024-01-15T10:00:00Z",
|
||
|
|
"updated_at": "2024-01-15T14:30:00Z",
|
||
|
|
"progress": 60,
|
||
|
|
"time_spent_minutes": 45,
|
||
|
|
"comments_count": 3,
|
||
|
|
"attachments_count": 2
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Update Task
|
||
|
|
|
||
|
|
**PATCH** `/tasks/{task_id}`
|
||
|
|
|
||
|
|
Update task properties.
|
||
|
|
|
||
|
|
**Request Body:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"status": "in_progress",
|
||
|
|
"progress": 60,
|
||
|
|
"assignee": "user789"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"task_id": "tsk_xyz789",
|
||
|
|
"updated": true,
|
||
|
|
"updated_fields": ["status", "progress", "assignee"],
|
||
|
|
"updated_at": "2024-01-15T14:30:00Z"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### List Tasks
|
||
|
|
|
||
|
|
**GET** `/tasks`
|
||
|
|
|
||
|
|
List tasks with filtering and pagination.
|
||
|
|
|
||
|
|
**Query Parameters:**
|
||
|
|
- `status` - Filter by status: `pending`, `in_progress`, `completed`, `cancelled`
|
||
|
|
- `assignee` - Filter by assignee user ID
|
||
|
|
- `priority` - Filter by priority: `low`, `medium`, `high`, `critical`
|
||
|
|
- `due_before` - Tasks due before date
|
||
|
|
- `due_after` - Tasks due after date
|
||
|
|
- `tags` - Comma-separated tags
|
||
|
|
- `page` - Page number (default: 1)
|
||
|
|
- `limit` - Items per page (default: 20)
|
||
|
|
- `sort` - Sort by: `created_at`, `due_date`, `priority`, `updated_at`
|
||
|
|
- `order` - Sort order: `asc`, `desc`
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"tasks": [
|
||
|
|
{
|
||
|
|
"task_id": "tsk_xyz789",
|
||
|
|
"title": "Review customer complaint",
|
||
|
|
"status": "in_progress",
|
||
|
|
"assignee": "user456",
|
||
|
|
"priority": "high",
|
||
|
|
"due_date": "2024-01-20T17:00:00Z",
|
||
|
|
"progress": 60
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"total": 42,
|
||
|
|
"page": 1,
|
||
|
|
"limit": 20
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Complete Task
|
||
|
|
|
||
|
|
**POST** `/tasks/{task_id}/complete`
|
||
|
|
|
||
|
|
Mark a task as completed.
|
||
|
|
|
||
|
|
**Request Body:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"resolution": "Issue resolved - refund processed",
|
||
|
|
"time_spent_minutes": 90,
|
||
|
|
"outcomes": ["customer_satisfied", "refund_issued"]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"task_id": "tsk_xyz789",
|
||
|
|
"status": "completed",
|
||
|
|
"completed_at": "2024-01-15T16:00:00Z",
|
||
|
|
"completed_by": "user456"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Delete Task
|
||
|
|
|
||
|
|
**DELETE** `/tasks/{task_id}`
|
||
|
|
|
||
|
|
Delete a task.
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"deleted": true,
|
||
|
|
"task_id": "tsk_xyz789"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Task Comments
|
||
|
|
|
||
|
|
### Add Comment
|
||
|
|
|
||
|
|
**POST** `/tasks/{task_id}/comments`
|
||
|
|
|
||
|
|
Add a comment to a task.
|
||
|
|
|
||
|
|
**Request Body:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"text": "Contacted customer via email, waiting for response",
|
||
|
|
"mentions": ["user123"],
|
||
|
|
"attachments": ["file_abc123"]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"comment_id": "cmt_123",
|
||
|
|
"task_id": "tsk_xyz789",
|
||
|
|
"text": "Contacted customer via email, waiting for response",
|
||
|
|
"author": "user456",
|
||
|
|
"created_at": "2024-01-15T14:30:00Z"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### List Comments
|
||
|
|
|
||
|
|
**GET** `/tasks/{task_id}/comments`
|
||
|
|
|
||
|
|
Get task comments.
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"comments": [
|
||
|
|
{
|
||
|
|
"comment_id": "cmt_123",
|
||
|
|
"text": "Contacted customer via email",
|
||
|
|
"author": {
|
||
|
|
"user_id": "user456",
|
||
|
|
"name": "Jane Smith"
|
||
|
|
},
|
||
|
|
"created_at": "2024-01-15T14:30:00Z"
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"total": 3
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Task Attachments
|
||
|
|
|
||
|
|
### Upload Attachment
|
||
|
|
|
||
|
|
**POST** `/tasks/{task_id}/attachments`
|
||
|
|
|
||
|
|
Attach a file to a task.
|
||
|
|
|
||
|
|
**Request:**
|
||
|
|
- Method: `POST`
|
||
|
|
- Content-Type: `multipart/form-data`
|
||
|
|
- Form fields: `file` (binary)
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"attachment_id": "att_789",
|
||
|
|
"task_id": "tsk_xyz789",
|
||
|
|
"filename": "screenshot.png",
|
||
|
|
"size_bytes": 102400,
|
||
|
|
"mime_type": "image/png",
|
||
|
|
"uploaded_at": "2024-01-15T14:45:00Z"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Task Templates
|
||
|
|
|
||
|
|
### Create Template
|
||
|
|
|
||
|
|
**POST** `/templates`
|
||
|
|
|
||
|
|
Create a reusable task template.
|
||
|
|
|
||
|
|
**Request Body:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"name": "Customer Complaint",
|
||
|
|
"description_template": "Investigate issue: {{issue_id}}",
|
||
|
|
"default_priority": "high",
|
||
|
|
"default_tags": ["support"],
|
||
|
|
"checklist": [
|
||
|
|
"Review conversation history",
|
||
|
|
"Contact customer",
|
||
|
|
"Provide resolution",
|
||
|
|
"Follow up"
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Create Task from Template
|
||
|
|
|
||
|
|
**POST** `/tasks/from-template`
|
||
|
|
|
||
|
|
Create a task from a template.
|
||
|
|
|
||
|
|
**Request Body:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"template_id": "tpl_123",
|
||
|
|
"variables": {
|
||
|
|
"issue_id": "#1234"
|
||
|
|
},
|
||
|
|
"assignee": "user456",
|
||
|
|
"due_date": "2024-01-20T17:00:00Z"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Workflows
|
||
|
|
|
||
|
|
### Create Workflow
|
||
|
|
|
||
|
|
**POST** `/workflows`
|
||
|
|
|
||
|
|
Create a multi-step workflow.
|
||
|
|
|
||
|
|
**Request Body:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"name": "Customer Onboarding",
|
||
|
|
"steps": [
|
||
|
|
{
|
||
|
|
"name": "Account Setup",
|
||
|
|
"assignee": "user456",
|
||
|
|
"duration_hours": 2
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"name": "Training",
|
||
|
|
"assignee": "user789",
|
||
|
|
"duration_hours": 4,
|
||
|
|
"depends_on": ["Account Setup"]
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Get Workflow Status
|
||
|
|
|
||
|
|
**GET** `/workflows/{workflow_id}/status`
|
||
|
|
|
||
|
|
Get workflow progress.
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"workflow_id": "wf_123",
|
||
|
|
"name": "Customer Onboarding",
|
||
|
|
"status": "in_progress",
|
||
|
|
"progress": 50,
|
||
|
|
"completed_steps": 1,
|
||
|
|
"total_steps": 2,
|
||
|
|
"current_step": "Training",
|
||
|
|
"estimated_completion": "2024-01-16T12:00:00Z"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Task Automation
|
||
|
|
|
||
|
|
### Create Automation Rule
|
||
|
|
|
||
|
|
**POST** `/automations`
|
||
|
|
|
||
|
|
Create rules for automatic task creation.
|
||
|
|
|
||
|
|
**Request Body:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"name": "High Priority Support",
|
||
|
|
"trigger": {
|
||
|
|
"type": "conversation_tag",
|
||
|
|
"value": "urgent"
|
||
|
|
},
|
||
|
|
"action": {
|
||
|
|
"type": "create_task",
|
||
|
|
"template": "tpl_urgent",
|
||
|
|
"auto_assign": true,
|
||
|
|
"priority": "critical"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Notifications
|
||
|
|
|
||
|
|
### Task Notifications
|
||
|
|
|
||
|
|
Configure notifications for task events:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"events": [
|
||
|
|
"task_assigned",
|
||
|
|
"task_completed",
|
||
|
|
"task_overdue",
|
||
|
|
"comment_added"
|
||
|
|
],
|
||
|
|
"channels": ["email", "in_app"],
|
||
|
|
"recipients": ["assignee", "watchers"]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Analytics
|
||
|
|
|
||
|
|
### Task Analytics
|
||
|
|
|
||
|
|
**GET** `/tasks/analytics`
|
||
|
|
|
||
|
|
Get task performance metrics.
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"summary": {
|
||
|
|
"total_tasks": 234,
|
||
|
|
"completed": 189,
|
||
|
|
"in_progress": 35,
|
||
|
|
"overdue": 10,
|
||
|
|
"completion_rate": 0.81,
|
||
|
|
"average_completion_time_hours": 4.5
|
||
|
|
},
|
||
|
|
"by_priority": {
|
||
|
|
"critical": {"total": 10, "completed": 8},
|
||
|
|
"high": {"total": 45, "completed": 40},
|
||
|
|
"medium": {"total": 120, "completed": 100},
|
||
|
|
"low": {"total": 59, "completed": 41}
|
||
|
|
},
|
||
|
|
"by_assignee": [
|
||
|
|
{
|
||
|
|
"user_id": "user456",
|
||
|
|
"name": "Jane Smith",
|
||
|
|
"tasks_completed": 45,
|
||
|
|
"average_time_hours": 3.2
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Error Responses
|
||
|
|
|
||
|
|
### 400 Bad Request
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"error": "invalid_due_date",
|
||
|
|
"message": "Due date must be in the future"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 404 Not Found
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"error": "task_not_found",
|
||
|
|
"message": "Task tsk_xyz789 not found"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 403 Forbidden
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"error": "permission_denied",
|
||
|
|
"message": "You don't have permission to modify this task"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## Best Practices
|
||
|
|
|
||
|
|
1. **Clear Titles**: Use descriptive, action-oriented task titles
|
||
|
|
2. **Set Priorities**: Always set appropriate priority levels
|
||
|
|
3. **Add Context**: Include conversation or bot context
|
||
|
|
4. **Use Templates**: Create templates for recurring task types
|
||
|
|
5. **Track Progress**: Update progress regularly
|
||
|
|
6. **Set Realistic Deadlines**: Allow adequate time for completion
|
||
|
|
7. **Use Tags**: Categorize tasks with consistent tags
|
||
|
|
|
||
|
|
## Integration with BASIC
|
||
|
|
|
||
|
|
Tasks can be created from BASIC scripts:
|
||
|
|
|
||
|
|
```basic
|
||
|
|
' Create task from conversation
|
||
|
|
task_id = CREATE TASK "Follow up with customer", "user456"
|
||
|
|
SET TASK PRIORITY task_id, "high"
|
||
|
|
SET TASK DUE DATE task_id, NOW() + 24 * 3600
|
||
|
|
|
||
|
|
' Check task status
|
||
|
|
status = GET TASK STATUS task_id
|
||
|
|
IF status = "completed" THEN
|
||
|
|
TALK "Task has been completed"
|
||
|
|
END IF
|
||
|
|
```
|
||
|
|
|
||
|
|
## Rate Limits
|
||
|
|
|
||
|
|
| Operation | Limit | Window |
|
||
|
|
|-----------|-------|--------|
|
||
|
|
| Create Task | 100/hour | Per user |
|
||
|
|
| Update Task | 200/hour | Per user |
|
||
|
|
| List Tasks | 60/minute | Per user |
|
||
|
|
| Add Comment | 50/hour | Per user |
|
||
|
|
|
||
|
|
## Related APIs
|
||
|
|
|
||
|
|
- [Notifications API](./notifications-api.md) - Task notifications
|
||
|
|
- [Analytics API](./analytics-api.md) - Task analytics
|
||
|
|
- [User API](./user-security.md) - User management
|