Как загрузить файл в задачу
Scope:
disk,tasksКто может выполнять метод: пользователи с доступом к разделам диск и задачи
Выберите инструмент для разработки с AI-агентом:
- используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
- используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации
В Битрикс24 есть два типа файловых полей:
- Файл. Поле не связано с диском, в него файлы загружаются напрямую, через строку формата Base64
- Файл (диск). Поле связано с диском, в поле хранится ID объекта диска. Формат Bаse64 в поле не обрабатывается, поэтому сначала файл необходимо загрузить на диск Битрикс24
Чтобы прикрепить файл в задачу, последовательно выполните два метода:
- disk.folder.uploadfile — метод загружает файл на диск
- tasks.task.files.attach — метод прикрепляет файл диска к задаче
1. Загружаем файл на диск Битрикс24
Для загрузки файла на диск используем метод disk.folder.uploadfile с параметрами:
id— укажем значение1739— идентификатор папки диска, в которую загружаем файлdata— укажем имя файлаNAME, с этим именем файл сохранится на диске Битрикс24fileContent— передаем файл в формате ['имя_файла.расширение', 'файл в виде строки, закодированной в Base64']
Загрузка файла на диск — необходимый шаг, так как поле UF_TASK_WEBDAV_FILES в задачах принимает только ID файлов диска.
Как использовать примеры в документации
BX24.callMethod(
"disk.folder.uploadfile",
{
id: 1739,
data: {
NAME: "ava555.jpg"
},
fileContent: [
'avatar.jpg',
'/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAQDAwQDAwQEAwQ///+dAYq6YFKoAv/AFnAa6ArKv8AAtFJVppxCEAulxQ2DWgfMR//2Q=='
]
}
);
require_once('crest.php');
$result = CRest::call(
'disk.folder.uploadfile',
[
'id' => 1739,
'data' => [
'NAME' => 'ava555.jpg'
],
'fileContent' => [
'avatar.jpg',
'/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAQDAwQDAwQEAwQ///+dAYq6YFKoAv/AFnAa6ArKv8AAtFJVppxCEAulxQ2DWgfMR//2Q=='
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
from b24pysdk import BitrixWebhook, Client
client = Client(
BitrixWebhook(
domain="your-domain.bitrix24.com",
webhook_token="user_id/webhook_key",
)
)
result = client.disk.folder.uploadfile(
bitrix_id=1739,
data={
"NAME": "ava555.jpg",
},
file_content=[
"avatar.jpg",
"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAQDAwQDAwQEAwQ///+dAYq6YFKoAv/AFnAa6ArKv8AAtFJVppxCEAulxQ2DWgfMR//2Q==",
],
).response.result
В результате загрузки файла на диск получили два разных значения ID файла:
FILE_ID:28073— внутреннее значение ID файлаID:6687— ID объекта диска, это значение используем в методах для работы с полями типа «файл (диск)»
Если в запросе для изменения поля «файл (диск)» передать значениеFILE_ID, файл либо не прикрепится к задаче, поскольку нет объекта диска с таким ID, либо прикрепится не тот файл
{
"result": {
"ID": 6687,
"NAME": "ava555.jpg",
"CODE": null,
"STORAGE_ID": "1",
"TYPE": "file",
"PARENT_ID": "1739",
"DELETED_TYPE": 0,
"GLOBAL_CONTENT_VERSION": 1,
"FILE_ID": 28073,
"SIZE": "405559",
"CREATE_TIME": "2024-11-01T17:00:55+03:00",
"UPDATE_TIME": "2024-11-01T17:00:55+03:00",
"DELETE_TIME": null,
"CREATED_BY": "1",
"UPDATED_BY": "1",
"DELETED_BY": null,
"DOWNLOAD_URL": "https://your-domain.bitrix24.com/rest/download.json?sessid=9dd90ed5a58ccc41af81f5f0043739db&token=disk%7CaWQ9NjY4NyZfPTJ5ZXdvN2Fsb09SMGw1b0FHTkRMSGR5MFJkN1pLTjNS%7CImRvd25sb2FkfGRpc2t8YVdROU5qWTROeVpmUFRKNVpYZHZOMkZzYjA5U01HdzFiMEZIVGtSTVNHUjVNRkprTjFwTFRqTlN8OWRkOTBlZDVhNThjY2M0MWFmODFmNWYwMDQzNzM5ZGIi.Lup1vDbibL6twiCPfCMFnLSoDLleNX0cfMHGv5PFaJw%3D",
"DETAIL_URL": "https://your-domain.bitrix24.com/company/personal/user/1/disk/file/Созданные файлы/Новая папка для теста процесса/ava555.jpg"
}
}
2. Прикрепляем файл к задаче
Для прикрепления файла к задаче используем метод tasks.task.files.attach с параметрами:
taskId— ID задачи. Для получения значения ID используйте метод tasks.task.listfileId— укажем ID файла из результата предыдущего метода6687
BX24.callMethod(
'tasks.task.files.attach',
{
taskId: 3709,
fileId: 6687
}
);
require_once('crest.php');
$result = CRest::call(
'tasks.task.files.attach',
[
'taskId' => 3709,
'fileId' => 6687
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
result = client.tasks.task.files.attach(
task_id=3709,
file_id=6687,
).response.result
Мы загрузили файл в задачу и в ответ получили ID связи между файлом диска и задачей 423. Чтобы проверить прикрепление файла к задаче по ID связи используем метод disk.attachedObject.get.
{
"result": {
"attachmentId": 423
},
"time": {
"start": 1730795703.5871601,
"finish": 1730795703.8165951,
"duration": 0.22943496704101562,
"processing": 0.18604612350463867,
"date_start": "2024-11-05T11:35:03+03:00",
"date_finish": "2024-11-05T11:35:03+03:00",
"operating_reset_at": 1730796303,
"operating": 0.18602108955383301
}
}
Пример кода
// Функция для загрузки файла
function uploadFileToDisk() {
// ID папки, в которую вы хотите загрузить файл
var folderId = 'ваш_ID_папки';
// Имя файла и его содержимое в формате Base64
var fileName = 'ваше_имя_файла';
var fileContentBase64 = 'ваше_содержимое_файла_Base64';
// ID задачи, к которой нужно прикрепить файл
var taskId = 'ваш_ID_задачи';
// Вызываем метод disk.folder.uploadfile
BX24.callMethod(
'disk.folder.uploadfile',
{
id: folderId,
data: {
NAME: fileName
},
fileContent: [
fileName,
fileContentBase64
]
},
function(result) {
if (result.error()) {
console.error('Ошибка при загрузке файла:', result.error());
} else {
console.log('Файл успешно загружен!', result.data());
var fileId = result.data().ID; // Используем ID из результата
attachFileToTask(taskId, fileId);
}
}
);
}
// Функция для прикрепления файла к существующей задаче
function attachFileToTask(taskId, fileId) {
// Вызываем метод tasks.task.files.attach
BX24.callMethod(
'tasks.task.files.attach',
{
taskId: taskId,
fileIds: [fileId]
},
function(result) {
if (result.error()) {
console.error('Ошибка при прикреплении файла к задаче:', result.error());
} else {
console.log('Файл успешно прикреплен к задаче!', result.data());
}
}
);
}
// Вызов функции для загрузки файла и прикрепления его к задаче
uploadFileToDisk();
require_once('crest.php');
// Функция для загрузки файла
function uploadFileToDisk() {
// ID папки, в которую вы хотите загрузить файл
$folderId = 'ваш_ID_папки';
// Имя файла, который вы хотите загрузить
$fileName = 'ваше_имя_файла';
// Путь к файлу на вашей файловой системе
$filePath = '/путь/к/вашему/файлу';
// Чтение содержимого файла и его кодирование в Base64
$fileContentBase64 = base64_encode(file_get_contents($filePath));
// ID задачи, к которой нужно прикрепить файл
$taskId = 'ваш_ID_задачи';
// Вызываем метод disk.folder.uploadfile
$result = CRest::call(
'disk.folder.uploadfile',
[
'id' => $folderId,
'data' => [
'NAME' => $fileName
],
'fileContent' => [
$fileName,
$fileContentBase64
]
]
);
if (isset($result['error'])) {
echo 'Ошибка при загрузке файла: ' . $result['error'];
} else {
echo 'Файл успешно загружен!';
$fileId = $result['result']['ID']; // Используем ID из результата
attachFileToTask($taskId, $fileId);
}
}
// Функция для прикрепления файла к существующей задаче
function attachFileToTask($taskId, $fileId) {
// Вызываем метод tasks.task.files.attach
$result = CRest::call(
'tasks.task.files.attach',
[
'taskId' => $taskId,
'fileIds' => [$fileId]
]
);
if (isset($result['error'])) {
echo 'Ошибка при прикреплении файла к задаче: ' . $result['error'];
} else {
echo 'Файл успешно прикреплен к задаче!';
}
}
// Вызов функции для загрузки файла и прикрепления его к задаче
uploadFileToDisk();
from b24pysdk import BitrixWebhook, Client
from b24pysdk.errors import BitrixAPIError
def upload_file_to_disk(client):
folder_id = "ваш_ID_папки"
file_name = "ваше_имя_файла"
file_content_base64 = "ваше_содержимое_файла_Base64"
task_id = "ваш_ID_задачи"
try:
result = client.disk.folder.uploadfile(
bitrix_id=folder_id,
data={"NAME": file_name},
file_content=[file_name, file_content_base64],
).response.result
except BitrixAPIError as error:
print(f"Ошибка загрузки файла: {error}")
else:
print("Файл успешно загружен!")
file_id = result["ID"]
attach_file_to_task(client, task_id, file_id)
def attach_file_to_task(client, task_id, file_id):
try:
client.tasks.task.files.attach(
task_id=task_id,
file_id=file_id,
).response
except BitrixAPIError as error:
print(f"Ошибка прикрепления файла к задаче: {error}")
else:
print("Файл успешно прикреплен к задаче!")
client = Client(
BitrixWebhook(
domain="your-domain.bitrix24.com",
webhook_token="user_id/webhook_key",
)
)
upload_file_to_disk(client)