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

Контекст

Контекст скрипта предоставляет следующие возможности:

  • Чтение и запись значений переменных бота/сценария.
  • Сохранение и загрузка файлов.
  • Кэширование данных.

Переменные

Входные переменные

Скрипту доступны для чтения текущие переменные бота и сценария.

Доступ для чтения осуществляется через поле context.input.variables.

Переменные доступны как по коду, так и по имени.

Пример использования:

TypeScript
const axios = require('axios');
const request = {
    method: 'post',
    url: context.input.variables.url,
    data: {
        context: {
            chto_nuzhno_sdelat: context.input.variables.whatdo,
        }
    },
    headers: {
        'X-Token': context.input.variables.xtoken
    }
}
var response = axios(request);

Выходные переменные

Скрипт также может записывать значения в текущие переменные.

Для записи новых значений в переменные бота следует использовать context.output.variables.

Переменные доступны как по коду, так и по имени.

Пример использования:

TypeScript
1
2
3
4
5
6
7
const axios = require('axios');
const host = 'api.openweathermap.org';
const app = '5bcd77753b5172d562152257e2552bb8';
const url = `https://${host}/data/2.5/weather?lat=35&lon=139&appid=${app}`;
const response = await axios.get(url);
const temperature = response.data.main.temp - 273.15;
context.output.variables["Температура"] = temperature;

Файлы

Передача в base64

Используя кодировку base64, скрипт может использовать для передачи файлов обычные строковые переменные:

TypeScript
const axios = require('axios');

const polzovatelskie_faili = context.input.variables.polzovatelskie_faili;

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

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

const response = await axios(request);
const base64Content = Buffer
    .from(response.data, 'binary')
    .toString('base64');
const base64 = `data:${file.contentType};base64,${base64Content}`;

context.output.variables.nazvanie_faila = file.name;
context.output.variables.tip_faila = file.contentType;
context.output.variables.soderzhimoe_faila = base64.substring(0, 30);

Сохранение файла

Также файл можно сохранить в локально изолированное хранилище.

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

В этом случае достаточно передать ссылку на файл.

Работать с хранилищем файлов можно через поле context.utils.files.

Пример использования:

TypeScript
const base64Content
    = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAA'
    + 'RnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAJ7SURBVDhPhVNLTxNR'
    + 'GJ3EsFB/gb/AlWhgIRsXxo0LExWCBoyaiAsSSVgYTYxRShEwigguiFofERWNic9gas'
    + 'QUWvCRIEqkFJBXEZyWmQ7ttJ2hnc7M8bt3RESNnOQmc8+dc77zfXdGACEXDiN1zQOl'
    + 'qhrS7hJEt21HZEsRpF0bkfXmwQisg9G3Abn+ApjD5bBED2AoTArBGB2DXHYQYn4hxE'
    + '0FzmLPm7dCLs5H9hWJu9fA8AnLqzsP5kgFVVYhJNz1XDS/YycSrjqkb7dDf+lFxt+L'
    + '7OB7WLEuWPIzqnoL1nQtzKG9MHrWwvCvJ/4pBOVoJTdQz1/kkVYFRc/1F/Ik1mwLBL'
    + 'XxAjdINrf+fGMVmEnkPhY5Bt8uQ7CTSaRcbqRbrvDz6aiBrk8aZNXke4aZ+RznpIRF'
    + 'BimYvxuEdKBvJoGJgRAWszbOtMewxy3iulfl4oxho/a+wrm2ThU5Q0di+BTMYCnsWC'
    + 'eEhimgbAh4EKWhmjaan8SxvzGCR4EUN2Bc6/M49jVE0NGThJax4fHGMSlm+LlQTwbl'
    + 'X4COCN9D1SyMfzd4miUw7itxOnGMP3lTxnGPjDC19pfBamAJTtyQeUsvPqQhXAo7Bq'
    + 'yVIKWeo2SKAaRphssZHLAEvkEdh5qiKK4T8XpAgxBYACqCjslhmkVlCKgeBeomASnr'
    + 'CFnV3qCOs3cVlNIsWPXqqxLmZGqBhgwffdauCeDYCHCEzA6QGTMao2sLDOk4fSeG0n'
    + 'pHyAxc9xSMzDru/GdiUXW64ihx4xowSK34JRs1DxdQck78Jawh4dvQIk+0BG7wLyTS'
    + 'FqraJF6ZfQfvSMhm8Cf+a9D0OI43n7UVFVcC+AEwdnXoIYNkcgAAAABJRU5ErkJggg'
    + '=='
const fileName = 'картинка.png';
const contentType = 'image/png';

const file = Buffer.from(base64Content, 'base64');
const fileId = await context.utils.uploadBotTemporaryFile(
    fileName,
    contentType,
    file);
const contentUrl = context.utils.getBotTemporaryFileUrl(fileId);

context.output.variables.fail_dlya_otpravki = {
    contentType: contentType,
    contentUrl: contentUrl,
    name: fileName,
};