Перейти к содержанию

Работа с файлами

Для обмена файлами в ELMA Bot предусмотрен тип переменной «Файл».

image

В переменную можно записать как один, так и несколько файлов.

В скрипте такая файловая переменная имеет следующий тип:

TypeScript
Attachment | Attachment[]

Атрибуты файла:

  • name — оригинальное имя файла.
  • contentType — тип файла в формате MIME.
  • contentUrl — URL для получения тела файла. Тело файла не передается в скрипты явно. При необходимости оно загружается с помощью axios.

Рассмотрим типовые сценарии интеграции с использованием файлов.

Пользователь отправляет файл в чат

Бот просит пользователя отправить файл, например, чтобы отправить документ в стороннюю систему.

Как это можно реализовать:

  1. Настроить файловую переменную.

  2. Добавить в сценарий элемент «Запрос файла».

  3. Добавить элемент «Скрипт» с логикой обработки файла.

image

Пример скрипта:

TypeScript
const axios = require('axios');

// Переменная с именем «Файл»
const fail = context.input.variables.fail;

// В этом примере загружаем только один файл
const file = Array.isArray(fail) ? fail[0] : fail;

const request = {
    method: 'get',
    url: file.contentUrl,
    responseType: 'arraybuffer',
};

const response = await axios(request);
// Загружаем тело в файла в формате base64
const base64Content = Buffer.from(response.data, 'binary').toString('base64');

// ...

Бот отправляет файл в чат

Бот загружает файл из сторонней системы и отправляет в чат.

Как это можно реализовать:

  1. Настроить файловую переменную.

  2. Добавить скрипт, который записывает в переменную файл.

  3. Добавить элемент «Сообщение чат-бота», который отправляет в чат сообщение с файлом.

Пример скрипта, который записывает значение в файловую переменную:

TypeScript
const content = 'some text';
const fileName = 'sample.txt';
const contentType = 'text/plain';

const file = Buffer.from(content);
// Запись тела файла в хранилище
const fileId = await context.utils.uploadBotTemporaryFile(fileName, contentType, file);
// Получение URL для файла
const contentUrl = context.utils.getBotTemporaryFileUrl(fileId);

// Запись в файловую переменную
context.output.variables.fail_dlya_otpravki = {
    contentType: contentType,
    contentUrl: contentUrl,
    name: fileName,
};