---
name: feishu-task
description: |
Инструмент управления задачами для Feishu, предназначенный для создания, запроса, обновления и удаления задач и списков дел.
**Когда следует использовать этот Skill**:
(1) Необходимо создавать, запрашивать, обновлять или удалять задачи.
(2) Необходимо создавать и управлять списками дел.
(3) Необходимо просматривать задачи в списке дел или в самом списке.
(4) Пользователь упоминает "задача", "to-do", "список дел", "task".
(5) Необходимо назначать ответственного, добавлять наблюдателей и устанавливать срок выполнения.
---
# Управление задачами для Feishu
## 🚨 Важно прочитать перед использованием
- ✅ **Формат даты и времени**: ISO 8601 / RFC 3339 (с указанием часового пояса), например, `2026-02-28T17:00:00+08:00`.
- ✅ **`current_user_id` настоятельно рекомендуется**: Получите из контекста сообщения (SenderId) (ou_...), инструмент автоматически добавит пользователя в качестве наблюдателя (если его нет в списке `members`), чтобы создатель мог редактировать задачу.
- ✅ **Для `patch/get` обязательно**: `task_guid`.
- ✅ **Для `tasklist.tasks` обязательно**: `tasklist_guid`.
- ✅ **Для завершения задачи**: `completed_at = "2026-02-26 15:00:00"`.
- ✅ **Для отмены завершения (восстановления статуса "не выполнено")**: `completed_at = "0"`.
---
## 📋 Быстрый справочник: Намерение → Инструмент → Обязательные параметры
| Намерение пользователя | Инструмент | Действие | Обязательные параметры | Рекомендуется | Распространенные необязательные параметры |
|---------|------|--------|---------|---------|---------|
| Создать задачу | feishu_task_task | create | summary | current_user_id (SenderId) | members, due, description |
| Получить список незавершенных задач | feishu_task_task | list | - | completed=false | page_size |
| Получить детали задачи | feishu_task_task | get | task_guid | - | - |
| Завершить задачу | feishu_task_task | patch | task_guid, completed_at | - | - |
| Отменить завершение задачи | feishu_task_task | patch | task_guid, completed_at="0" | - | - |
| Изменить срок выполнения | feishu_task_task | patch | task_guid, due | - | - |
| Создать список дел | feishu_task_tasklist | create | name | - | members |
| Просмотреть задачи в списке дел | feishu_task_tasklist | tasks | tasklist_guid | - | completed |
| Добавить участников в список дел | feishu_task_tasklist | add_members | tasklist_guid, members[] | - | - |
---
## 🎯 Основные ограничения (знания, не указанные в схеме)
### 1. Идентификация пользователя, использующего инструмент (встроена защита)
**Инструмент использует `user_access_token` (идентификация пользователя)**
Это означает:
- ✅ При создании задачи можно указать любого участника (включая назначение задачи другому).
- ⚠️ Можно просматривать и редактировать **только задачи, в которых вы являетесь участником**.
- ⚠️ **Если вы не добавили себя в качестве участника при создании, вы не сможете редактировать эту задачу**.
**Механизм автоматической защиты**:
- Передается параметр `current_user_id` (получается из SenderId).
- Если `members` не содержит `current_user_id`, инструмент **автоматически добавляет вас в качестве наблюдателя**.
- Это гарантирует, что создатель всегда может редактировать задачу.
**Рекомендуемое использование**: Всегда передавайте `current_user_id` при создании задачи, инструмент автоматически обработает отношения между участниками.
### 2. Описание ролей участников задачи
- **assignee (ответственный)**: Несет ответственность за выполнение задачи и может редактировать задачу.
- **follower (наблюдатель)**: Следит за ходом выполнения задачи и получает уведомления.
**Пример добавления участников**:
```json
{
"members": [
{"id": "ou_xxx", "role": "assignee"}, // Ответственный
{"id": "ou_yyy", "role": "follower"} // Наблюдатель
]
}
```
**Примечание**: `id` использует `open_id` пользователя (получается из SenderId в контексте сообщения).
### 3. Конфликты ролей участников списка дел
**Проблема**: При создании списка дел (`tasklist.create`) передаются `members`, но возвращаемый `tasklist.members` пуст или не содержит участников.
**Причина**: Создатель автоматически становится **владельцем** списка дел. Если `members` содержит создателя, этот пользователь удаляется из списка `members` (один пользователь может иметь только одну роль).
**Рекомендация**: Не включайте создателя в список `members`, добавляйте только других участников.
### 4. Три способа использования `completed_at`
**1) Завершение задачи (установка времени завершения)**:
```json
{
"action": "patch",
"task_guid": "xxx",
"completed_at": "2026-02-26 15:30:00" // Строка с временем в часовом поясе
}
```
**2) Отмена завершения (восстановление статуса "не выполнено")**:
```json
{
"action": "patch",
"task_guid": "xxx",
"completed_at": "0" // Специальное значение "0" означает отмену завершения
}
```
**3) Метка времени в миллисекундах** (не рекомендуется, если верхний уровень не генерирует ее):
```json
{
"completed_at": "1740545400000" // Строка с меткой времени в миллисекундах
}
```
### 5. Роли участников списка дел
| Тип участника | Роль | Описание |
|---------|------|------|
| user (пользователь) | owner | Владелец, может передать права собственности |
| user (пользователь) | editor | Может редактировать, может изменять список дел и задачи |
| user (пользователь) | viewer | Может просматривать, только для чтения |
| chat (группа) | editor/viewer | Вся группа получает права |
**Примечание**: При создании списка дел создатель автоматически становится владельцем, и это не нужно указывать в `members`.
---
## 📌 Примеры использования
### Сценарий 1: Создание задачи и назначение ответственного
```json
{
"action": "create",
"summary": "Подготовить материалы для еженедельной встречи",
"description": "Собрать информацию о прогрессе работы на этой неделе и планы на следующую неделю",
"current_user_id": "ou_open_id_отправителя",
"due": {
"timestamp": "2026-02-28 17:00:00",
"is_all_day": false
},
"members": [
{"id": "ou_open_id_сотрудника", "role": "assignee"}
]
}
```
**Примечание**:
- `summary` - обязательный параметр.
- `current_user_id` настоятельно рекомендуется передавать (получается из SenderId), инструмент автоматически добавит вас в качестве наблюдателя.
- `members` может содержать только других участников, текущий пользователь будет автоматически добавлен.
- Время указывается строкой в формате часового пояса.
### Сценарий 2: Получение списка незавершенных задач, которые вы выполняете
```json
{
"action": "list",
"completed": false,
"page_size": 20
}
```
### Сценарий 3: Завершение задачи
```json
{
"action": "patch",
"task_guid": "GUID задачи",
"completed_at": "2026-02-26 15:30:00"
}
```
### Сценарий 4: Отмена завершения задачи (восстановление статуса "не выполнено")
```json
{
"action": "patch",
"task_guid": "GUID задачи",
"completed_at": "0"
}
```
### Сценарий 5: Создание списка дел и добавление участников
```json
{
"action": "create",
"name": "Итерация продукта v2.0",
"members": [
{"id": "ou_xxx", "role": "editor"},
{"id": "ou_yyy", "role": "viewer"}
]
}
```
### Сценарий 6: Просмотр задач в списке дел
```json
{
"action": "tasks",
"tasklist_guid": "GUID списка дел",
"completed": false
}
```
### Сценарий 7: Задача на весь день
```json
{
"action": "create",
"summary": "Годовой отчет",
"due": {
"timestamp": "2026-03-01 00:00:00",
"is_all_day": true
}
}
```
---
## 🔍 Распространенные ошибки и способы их устранения
| Ошибка | Основная причина | Решение |
|---------|---------|---------|
| **Невозможно редактировать задачу после создания** | Вы не добавили себя в список `members` при создании | При создании задачи добавьте себя (SenderId) в качестве `assignee` или `follower`. |
| **Ошибка `patch` с сообщением об отсутствии `task_guid`** | Не передан параметр `task_guid` | `patch/get` требуют обязательной передачи параметра `task_guid`. |
| **Ошибка `tasks` с сообщением об отсутствии `tasklist_guid`** | Не передан параметр `tasklist_guid` | Действие `tasklist.tasks` требует обязательной передачи параметра `tasklist_guid`. |
| **Ошибка при отмене завершения** | Неправильный формат `completed_at` | Используйте строку `"0"` (без кавычек), а не число 0. |
| **Неправильное время** | Использован Unix timestamp | Используйте формат даты и времени ISO 8601 (с указанием часового пояса): `2024-01-01T00:00:00+08:00`. |
---
## 📚 Приложение: Дополнительная информация
### A. Отношения между ресурсами
```
Список дел (Tasklist)
└─ Группа (Section, опционально)
└─ Задача (Task)
├─ Участники: ответственный (assignee), наблюдатель (follower)
├─ Подзадачи (Subtask)
├─ Срок выполнения (due), время начала (start)
└─ Вложения, комментарии
```
**Основные понятия**:
- **Задача (Task)**: Независимая задача, имеет уникальный `task_guid`.
- **Список дел (Tasklist)**: Контейнер для организации нескольких задач, имеет уникальный `tasklist_guid`.
- **Ответственный (assignee)**: Несет ответственность за выполнение задачи и может редактировать задачу.
- **Наблюдатель (follower)**: Следит за ходом выполнения задачи и получает уведомления.
- **Мои задачи (MyTasks)**: Набор задач, где вы являетесь ответственным.
### B. Как получить GUID
- **`task_guid`**: Получите из поля `task.guid` в ответе при создании задачи или через запрос `list`.
- **`tasklist_guid`**: Получите из поля `tasklist.guid` в ответе при создании списка дел или через запрос `list`.
### C. Как добавить задачу в список дел
Укажите параметр `tasklists` при создании задачи:
```json
{
"action": "create",
"summary": "Название задачи",
"tasklists": [
{
"tasklist_guid": "GUID списка дел",
"section_guid": "GUID группы (опционально)"
}
]
}
```
### D. Как создать повторяющуюся задачу
Используйте параметр `repeat_rule` в формате RRULE:
```json
{
"action": "create",
"summary": "Еженедельная встреча",
"due": {"timestamp": "2026-03-03 14:00:00", "is_all_day": false},
"repeat_rule": "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO"
}
```
**Примечание**: Повторяющиеся задачи можно создавать только для задач, у которых указан срок выполнения.
### E. Права доступа к данным
- Вы можете работать только с задачами, к которым у вас есть доступ (задачи, в которых вы являетесь участником).
- Вы можете работать только со списками дел, к которым у вас есть доступ (списки дел, в которых вы являетесь участником).
- Для добавления задачи в список дел необходимо иметь права на редактирование как задачи, так и списка дел.