# Task Management Integration - Implementation Plan
## 🎯 Overview
This document outlines the specific implementation plan for integrating task management capabilities into your Bitrix24 MCP server, leveraging the new **Tasks (task)** and **Tasks (tasks)** permissions.
## 📋 Current Task Implementation Status
### ✅ What's Already Available
- Basic task methods in `client.ts`:
- `createTask()` - Creates new tasks
- `getTask()` - Retrieves task by ID
- `updateTask()` - Updates existing tasks
- `listTasks()` - Lists tasks with basic filtering
### ❌ What's Missing
- Task performance monitoring
- Task-to-CRM entity linking
- Task completion rate tracking
- Overdue task identification
- Task-based user performance metrics
- Integration with existing sales monitoring tools
## 🔧 Implementation Plan
### Phase 1: Core Task Enhancement Methods
#### A. Enhanced Task Retrieval Methods
```typescript
// Add to client.ts
async getTasksByUser(userId: string, startDate?: string, endDate?: string): Promise<BitrixTask[]> {
const filter: Record<string, any> = {
RESPONSIBLE_ID: userId
};
if (startDate) filter['>=CREATED_DATE'] = startDate;
if (endDate) filter['<=CREATED_DATE'] = endDate;
return await this.listTasks({
filter,
select: ['*'],
order: { CREATED_DATE: 'DESC' }
});
}
async getOverdueTasks(userId?: string): Promise<BitrixTask[]> {
const today = new Date().toISOString().split('T')[0];
const filter: Record<string, any> = {
'<DEADLINE': today,
'STATUS': ['1', '2', '3'] // New, Pending, In Progress (exclude completed/deferred)
};
if (userId) filter['RESPONSIBLE_ID'] = userId;
return await this.listTasks({
filter,
select: ['*'],
order: { DEADLINE: 'ASC' }
});
}
async getTasksLinkedToCRM(entityType: string, entityId: string): Promise<BitrixTask[]> {
// CRM entities are linked via UF_CRM_TASK field
const crmEntityCode = `${entityType.toUpperCase()}_${entityId}`;
return await this.listTasks({
filter: {
UF_CRM_TASK: crmEntityCode
},
select: ['*'],
order: { CREATED_DATE: 'DESC' }
});
}
async getCompletedTasks(userId?: string, startDate?: string, endDate?: string): Promise<BitrixTask[]> {
const filter: Record<string, any> = {
'STATUS': '5' // Completed
};
if (userId) filter['RESPONSIBLE_ID'] = userId;
if (startDate) filter['>=CLOSED_DATE'] = startDate;
if (endDate) filter['<=CLOSED_DATE'] = endDate;
return await this.listTasks({
filter,
select: ['*'],
order: { CLOSED_DATE: 'DESC' }
});
}
```
#### B. Task Performance Analysis Methods
```typescript
// Add to client.ts
async getTaskCompletionRates(userId?: string, startDate?: string, endDate?: string): Promise<any> {
const filter: Record<string, any> = {};
if (userId) filter['RESPONSIBLE_ID'] = userId;
if (startDate) filter['>=CREATED_DATE'] = startDate;
if (endDate) filter['<=CREATED_DATE'] = endDate;
const allTasks = await this.listTasks({
filter,
select: ['ID', 'STATUS', 'RESPONSIBLE_ID', 'CREATED_DATE', 'CLOSED_DATE', 'DEADLINE']
});
const completedTasks = allTasks.filter(task => task.STATUS === '5');
const overdueTasks = allTasks.filter(task => {
const deadline = new Date(task.DEADLINE || '');
const today = new Date();
return deadline < today && ['1', '2', '3'].includes(task.STATUS || '');
});
const completionRate = allTasks.length > 0 ?
(completedTasks.length / allTasks.length * 100).toFixed(2) : '0';
return {
totalTasks: allTasks.length,
completedTasks: completedTasks.length,
overdueTasks: overdueTasks.length,
completionRate: completionRate + '%',
details: {
all: allTasks,
completed: completedTasks,
overdue: overdueTasks
}
};
}
async getTaskPerformanceMetrics(userId?: string, startDate?: string, endDate?: string): Promise<any> {
const completionData = await this.getTaskCompletionRates(userId, startDate, endDate);
const users = userId ? [{ ID: userId }] : await this.getAllUsers();
const userMetrics: any = {};
for (const user of users) {
const userTasks = await this.getTasksByUser(user.ID, startDate, endDate);
const userCompleted = await this.getCompletedTasks(user.ID, startDate, endDate);
const userOverdue = await this.getOverdueTasks(user.ID);
// Calculate average completion time
const completionTimes = userCompleted.map(task => {
const created = new Date(task.CREATED_DATE || '');
const closed = new Date(task.CLOSED_DATE || '');
return closed.getTime() - created.getTime();
});
const avgCompletionTime = completionTimes.length > 0 ?
completionTimes.reduce((sum, time) => sum + time, 0) / completionTimes.length :
0;
userMetrics[user.ID] = {
userName: `${user.NAME || ''} ${user.LAST_NAME || ''}`.trim(),
totalTasks: userTasks.length,
completedTasks: userCompleted.length,
overdueTasks: userOverdue.length,
completionRate: userTasks.length > 0 ?
(userCompleted.length / userTasks.length * 100).toFixed(2) + '%' : '0%',
avgCompletionTime: avgCompletionTime > 0 ?
(avgCompletionTime / (1000 * 60 * 60 * 24)).toFixed(1) + ' days' : 'N/A'
};
}
return {
period: { startDate, endDate },
summary: completionData,
userMetrics
};
}
```
#### C. CRM-Task Integration Methods
```typescript
// Add to client.ts
async getTasksForDeal(dealId: string): Promise<BitrixTask[]> {
return await this.getTasksLinkedToCRM('deal', dealId);
}
async getTasksForContact(contactId: string): Promise<BitrixTask[]> {
return await this.getTasksLinkedToCRM('contact', contactId);
}
async getTasksForCompany(companyId: string): Promise<BitrixTask[]> {
return await this.getTasksLinkedToCRM('company', companyId);
}
async createTaskForCRM(task: BitrixTask, entityType: string, entityId: string): Promise<string> {
// Link task to CRM entity
const crmEntityCode = `${entityType.toUpperCase()}_${entityId}`;
task.UF_CRM_TASK = [crmEntityCode];
return await this.createTask(task);
}
async analyzeTaskToCRMConversion(userId?: string, startDate?: string, endDate?: string): Promise<any> {
const users = userId ? [{ ID: userId }] : await this.getAllUsers();
const results: any = {};
for (const user of users) {
const userTasks = await this.getTasksByUser(user.ID, startDate, endDate);
const crmLinkedTasks = userTasks.filter(task => task.UF_CRM_TASK && task.UF_CRM_TASK.length > 0);
// Analyze which CRM entities have associated tasks
const dealTasks = crmLinkedTasks.filter(task =>
task.UF_CRM_TASK?.some(crm => crm.startsWith('DEAL_'))
);
const contactTasks = crmLinkedTasks.filter(task =>
task.UF_CRM_TASK?.some(crm => crm.startsWith('CONTACT_'))
);
const companyTasks = crmLinkedTasks.filter(task =>
task.UF_CRM_TASK?.some(crm => crm.startsWith('COMPANY_'))
);
results[user.ID] = {
userName: `${user.NAME || ''} ${user.LAST_NAME || ''}`.trim(),
totalTasks: userTasks.length,
crmLinkedTasks: crmLinkedTasks.length,
dealTasks: dealTasks.length,
contactTasks: contactTasks.length,
companyTasks: companyTasks.length,
crmLinkRate: userTasks.length > 0 ?
(crmLinkedTasks.length / userTasks.length * 100).toFixed(2) + '%' : '0%'
};
}
return results;
}
```
### Phase 2: Enhanced User Monitoring with Tasks
#### A. Integrated Activity Monitoring
```typescript
// Enhanced version of existing method
async monitorUserActivitiesWithTasks(
userId?: string,
startDate?: string,
endDate?: string,
options: {
includeCallVolume?: boolean;
includeEmailActivity?: boolean;
includeTimelineActivity?: boolean;
includeResponseTimes?: boolean;
includeTaskMetrics?: boolean;
includeTaskCompliance?: boolean;
} = {}
): Promise<any> {
// Call existing method
const baseResults = await this.monitorUserActivities(userId, startDate, endDate, options);
// Add task metrics if requested
if (options.includeTaskMetrics) {
const taskMetrics = await this.getTaskPerformanceMetrics(userId, startDate, endDate);
// Merge task metrics with base results
if (baseResults.metrics) {
Object.keys(baseResults.metrics).forEach(uid => {
if (taskMetrics.userMetrics[uid]) {
baseResults.metrics[uid].taskMetrics = taskMetrics.userMetrics[uid];
}
});
}
}
// Add task compliance if requested
if (options.includeTaskCompliance) {
const taskCompliance = await this.analyzeTaskToCRMConversion(userId, startDate, endDate);
if (baseResults.metrics) {
Object.keys(baseResults.metrics).forEach(uid => {
if (taskCompliance[uid]) {
baseResults.metrics[uid].taskCompliance = taskCompliance[uid];
}
});
}
}
return baseResults;
}
```
### Phase 3: New Task-Related Tools
#### A. Task Management Tools
```typescript
// Add to tools/index.ts
export const getTasksByUserTool: Tool = {
name: 'bitrix24_get_tasks_by_user',
description: 'Get tasks assigned to a specific user with optional date filtering',
inputSchema: {
type: 'object',
properties: {
userId: { type: 'string', description: 'User ID to get tasks for' },
startDate: { type: 'string', description: 'Start date in YYYY-MM-DD format (optional)' },
endDate: { type: 'string', description: 'End date in YYYY-MM-DD format (optional)' }
},
required: ['userId']
}
};
export const getOverdueTasksTool: Tool = {
name: 'bitrix24_get_overdue_tasks',
description: 'Get overdue tasks for monitoring and follow-up',
inputSchema: {
type: 'object',
properties: {
userId: { type: 'string', description: 'User ID to filter tasks (optional - if not provided, gets all overdue tasks)' }
}
}
};
export const getTaskCompletionRatesTool: Tool = {
name: 'bitrix24_get_task_completion_rates',
description: 'Get task completion rates and performance metrics',
inputSchema: {
type: 'object',
properties: {
userId: { type: 'string', description: 'User ID to analyze (optional - if not provided, analyzes all users)' },
startDate: { type: 'string', description: 'Start date in YYYY-MM-DD format (optional)' },
endDate: { type: 'string', description: 'End date in YYYY-MM-DD format (optional)' }
}
}
};
export const getTasksLinkedToCRMTool: Tool = {
name: 'bitrix24_get_tasks_linked_to_crm',
description: 'Get tasks linked to specific CRM entities (deals, contacts, companies)',
inputSchema: {
type: 'object',
properties: {
entityType: { type: 'string', enum: ['deal', 'contact', 'company'], description: 'CRM entity type' },
entityId: { type: 'string', description: 'CRM entity ID' }
},
required: ['entityType', 'entityId']
}
};
export const createTaskForCRMTool: Tool = {
name: 'bitrix24_create_task_for_crm',
description: 'Create a new task linked to a specific CRM entity',
inputSchema: {
type: 'object',
properties: {
title: { type: 'string', description: 'Task title' },
description: { type: 'string', description: 'Task description' },
responsibleId: { type: 'string', description: 'User ID responsible for the task' },
deadline: { type: 'string', description: 'Task deadline in YYYY-MM-DD format' },
priority: { type: 'string', enum: ['0', '1', '2'], description: 'Task priority (0=Low, 1=Normal, 2=High)' },
entityType: { type: 'string', enum: ['deal', 'contact', 'company'], description: 'CRM entity type to link to' },
entityId: { type: 'string', description: 'CRM entity ID to link to' }
},
required: ['title', 'responsibleId', 'entityType', 'entityId']
}
};
export const analyzeTaskToCRMConversionTool: Tool = {
name: 'bitrix24_analyze_task_to_crm_conversion',
description: 'Analyze how tasks are linked to CRM entities and conversion rates',
inputSchema: {
type: 'object',
properties: {
userId: { type: 'string', description: 'User ID to analyze (optional - if not provided, analyzes all users)' },
startDate: { type: 'string', description: 'Start date in YYYY-MM-DD format (optional)' },
endDate: { type: 'string', description: 'End date in YYYY-MM-DD format (optional)' }
}
}
};
```
#### B. Enhanced Monitoring Tools
```typescript
export const monitorUserActivitiesWithTasksTool: Tool = {
name: 'bitrix24_monitor_user_activities_with_tasks',
description: 'Monitor user activities including task completion and compliance metrics',
inputSchema: {
type: 'object',
properties: {
userId: { type: 'string', description: 'User ID to monitor (optional - if not provided, monitors all users)' },
startDate: { type: 'string', description: 'Start date in YYYY-MM-DD format' },
endDate: { type: 'string', description: 'End date in YYYY-MM-DD format (optional - defaults to today)' },
includeCallVolume: { type: 'boolean', description: 'Include call volume metrics', default: true },
includeEmailActivity: { type: 'boolean', description: 'Include email activity metrics', default: true },
includeTimelineActivity: { type: 'boolean', description: 'Include timeline interactions', default: true },
includeResponseTimes: { type: 'boolean', description: 'Calculate response times', default: true },
includeTaskMetrics: { type: 'boolean', description: 'Include task completion metrics', default: true },
includeTaskCompliance: { type: 'boolean', description: 'Include task-to-CRM compliance metrics', default: true }
},
required: ['startDate']
}
};
export const getTaskPerformanceMetricsTool: Tool = {
name: 'bitrix24_get_task_performance_metrics',
description: 'Get comprehensive task performance metrics including completion rates and timing',
inputSchema: {
type: 'object',
properties: {
userId: { type: 'string', description: 'User ID to analyze (optional - if not provided, analyzes all users)' },
startDate: { type: 'string', description: 'Start date in YYYY-MM-DD format (optional)' },
endDate: { type: 'string', description: 'End date in YYYY-MM-DD format (optional)' }
}
}
};
```
### Phase 4: Tool Execution Handlers
#### A. Add to executeToolCall function
```typescript
// Add to tools/index.ts executeToolCall function
case 'bitrix24_get_tasks_by_user':
const userTasks = await bitrix24Client.getTasksByUser(args.userId, args.startDate, args.endDate);
return { success: true, tasks: userTasks, message: `Retrieved ${userTasks.length} tasks for user ${args.userId}` };
case 'bitrix24_get_overdue_tasks':
const overdueTasks = await bitrix24Client.getOverdueTasks(args.userId);
return { success: true, tasks: overdueTasks, message: `Found ${overdueTasks.length} overdue tasks` };
case 'bitrix24_get_task_completion_rates':
const completionRates = await bitrix24Client.getTaskCompletionRates(args.userId, args.startDate, args.endDate);
return { success: true, metrics: completionRates, message: `Task completion analysis completed` };
case 'bitrix24_get_tasks_linked_to_crm':
const crmTasks = await bitrix24Client.getTasksLinkedToCRM(args.entityType, args.entityId);
return { success: true, tasks: crmTasks, message: `Found ${crmTasks.length} tasks linked to ${args.entityType} ${args.entityId}` };
case 'bitrix24_create_task_for_crm':
const newTask: BitrixTask = {
TITLE: args.title,
DESCRIPTION: args.description,
RESPONSIBLE_ID: args.responsibleId,
DEADLINE: args.deadline,
PRIORITY: args.priority || '1'
};
const newTaskId = await bitrix24Client.createTaskForCRM(newTask, args.entityType, args.entityId);
return { success: true, taskId: newTaskId, message: `Task created and linked to ${args.entityType} ${args.entityId}` };
case 'bitrix24_analyze_task_to_crm_conversion':
const taskConversion = await bitrix24Client.analyzeTaskToCRMConversion(args.userId, args.startDate, args.endDate);
return { success: true, analysis: taskConversion, message: `Task-to-CRM conversion analysis completed` };
case 'bitrix24_monitor_user_activities_with_tasks':
const activitiesWithTasks = await bitrix24Client.monitorUserActivitiesWithTasks(
args.userId,
args.startDate,
args.endDate,
{
includeCallVolume: args.includeCallVolume,
includeEmailActivity: args.includeEmailActivity,
includeTimelineActivity: args.includeTimelineActivity,
includeResponseTimes: args.includeResponseTimes,
includeTaskMetrics: args.includeTaskMetrics,
includeTaskCompliance: args.includeTaskCompliance
}
);
return { success: true, activities: activitiesWithTasks, message: `Enhanced user activity monitoring completed` };
case 'bitrix24_get_task_performance_metrics':
const taskMetrics = await bitrix24Client.getTaskPerformanceMetrics(args.userId, args.startDate, args.endDate);
return { success: true, metrics: taskMetrics, message: `Task performance metrics analysis completed` };
```
## 📊 Expected Improvements
### 1. **Complete Sales Productivity Tracking**
- Track not just calls/emails, but also follow-up tasks
- Monitor task completion rates alongside deal closure rates
- Identify bottlenecks in task-to-deal conversion
### 2. **Enhanced User Performance Metrics**
- Task completion rates
- Average task completion time
- CRM task compliance rates
- Overdue task management
### 3. **Better Customer Relationship Management**
- See all tasks associated with specific deals/contacts
- Track follow-up compliance for important accounts
- Monitor task-based customer engagement
### 4. **Improved Team Management**
- Identify users with high overdue task rates
- Balance task workload across team members
- Monitor task-based performance alongside sales metrics
## 🎯 Implementation Priority
1. **Phase 1 (Week 1)**: Core task methods - High impact, enables basic task monitoring
2. **Phase 2 (Week 2)**: Enhanced monitoring integration - Medium impact, improves existing tools
3. **Phase 3 (Week 3)**: New tools and handlers - Medium impact, adds new capabilities
4. **Phase 4 (Week 4)**: Testing and optimization - Low impact, ensures reliability
## 🔧 Next Steps
1. **Implement Phase 1 methods** in `client.ts`
2. **Test task API access** with new permissions
3. **Add Phase 3 tools** to `tools/index.ts`
4. **Update documentation** with new task capabilities
5. **Create usage examples** for common task management scenarios
This task management integration will provide a complete view of user productivity by combining CRM activities with task completion metrics, giving you unprecedented insight into your sales team's performance.