Создание задачи

Вы можете поручить Мистеру Баффетту одну или несколько задач, каждая из которых будет включать свой список шагов. В настоящее время принимаются инструкции только в JSON-формате, но это очень просто, давайте создадим новую задачу.

# 1. Откройте текстовый редактор

Откройте любой удобный вам текстовый редактор, например, Блокнот или онлайн-сервис для редактирования JSON. Здесь будем подготавливать описание задачи. Добавьте пустые фигурные скобки в новый документ:

{

}

# 2. Откройте свою Google-таблицу

В настройках задачи достаточно указать только идентификатор таблицы. Например, для таблицы по ссылке https://docs.google.com/spreadsheets/d/ABCDE получится следующий формат:

{
  "spreadsheetId": "ABCDE"
}

# 3. Выберите имя для задачи

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

{
  "spreadsheetId": "ABCDE",
  "name": "Моя задача"
}

# 4. Определите список шагов

Добавьте поле "steps", для будущего списка шагов этой задачи:

{
  "spreadsheetId": "ABCDE",
  "name": "Моя задача",
  "steps": [
    ...
  ]
}

# Установка значения в ячейку

Данный шаг изменяет значение одной заданной ячейки таблицы.

Шаг, устанавливающий простой текст:

{
  "cell": "A1",
  "set": { "value": "Поехали!" }
}

В ячейку A1 запишет текст «Поехали!».

Шаг, устанавливающий текущую дату и время по маске в формате Moment.js:

{
  "cell": "B1",
  "set": { "time": "DD/MM/YYYY HH:mm:ss" }
}

В ячейку B1 запишет время на момент запуска задачи в формате 01/12/2020 14:00:00, где 01 – дата, 12 — месяц, 2020 — год, 14 — час, а 00 — это минуты и секунды.

Обязательно укажите ваш часовой пояс.

Для корректной работы и отображения даты не забудьте указать формат ячейки в самой Google-таблице.

Шаг, устанавливающий курс валюты от ЦБ РФ:

{
  "cell": "C1",
  "set": { "cbr": "USD" }
}

В ячейку C1 запишет курс доллара на сегодняшний день.

Шаг, устанавливающий котировку с московской биржи:

{
  "cell": "D1",
  "set": { "moex": "YNDX" }
}

В ячейку D1 запишет курс акций Яндекса на момент запуска задачи.

Шаг, устанавливающий котировку с Yahoo Finance:

{
  "cell": "E1",
  "set": { "yahoo": "GOOG" }
}

В ячейку E1 запишет курс акций Google на момент запуска задачи.

Шаг, устанавливающий котировку линии ICN Holding:

{
  "cell": "F1",
  "set": { "icn": "GE50" }
}

В ячейку F1 запишет курс линии Gold Elephants на момент запуска задачи.

Шаг, копирующий значения из одних ячеек в другие. Копируются чистые значения без форматирования. Копирование внутри шага на добавление строки значений позволяет сохранять исторические данные ваших расчётов.

Для одновременного копирования значений нескольких ячеек используется следующая запись:

{
  "copy": {
    "G1": "H1",
    "I1": "J1"
  }
}

Одновременно в ячейку G1 запишет чистое значение ячейки H1, а в ячейку I1 запишет значение ячейки J1.

Если копирование одной ячейки зависит от расчётов таблицы после копирование другой ячейки, то потребуется выполнить эти действия последовательно:

{
  "copy": {
    "G1": "H1"
  }
},
{
  "copy": {
    "I1": "J1"
  }
}

Сначала в ячейку G1 запишет значение ячейки H1, а потом в ячейку I1 запишет значение ячейки J1.

# Добавление строки со значениями

Данный шаг добавляет в конец таблицы строку с заданными значениями для каждого столбца. Обратите внимание, что при определении места добавления новой строки Google-таблицы руководствуются понятием «таблицы» на основании уже имеющихся значений в ячейках.

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

Обратите внимание, что формат операции копирования отличен от представленного в шаге установки значений ячейкам.

Шаг, добавляющий строку со значениями:

{
  "cell": "A2",
  "append": [
    { "time": "DD/MM/YYYY" },
    { "cbr": "USD" },
    { "moex": "YNDX" },
    { "yahoo": "GOOG" },
    { "copy": "H1" }
  ]
}

После всех заполненных строк под ячейкой A2 добавит строку с четырьмя столбцами: курсом доллара, курсом акций Яндекса, акций Google и значением ячейки H1.

# Отправка сообщения

Данный шаг отправляет сообщение с заданными текстом в мессенджер.

Чтобы отправить себе сообщение с результатами расчётов добавьте следующий шаг:

{
  "message": "Сумма: ${X1}"
}

При выполнении задачи бот отправит вам сообщение с текстом «Сумма: 200», где 200 — это значение ячейки X1.

Если интересующие вас ячейки находятся на разных листах таблицы, то в описании шага это обозначается следующим образом при установке значения:

"cell": "Лист2!X1"

И при отправке сообщения соответственно:

"message": "Сумма: ${Лист2!X1}"

Значение ячейки X1 будет записано и считано из листа с именем «Лист2».

Для форматирования сообщений доступна markdown-разметка: *жирный*, _курсив_ и [ссылка](https://misterbuffett.ru):

"message": "[График](https://docs.google.com/spreadsheets/d/ABCDE/edit)"

Данное сообщение представляет из себя ссылку с текстом «График» на google-таблицу.

Для обозначения переноса строки в сообщении используется метка \n:

"message": "Строка 1: ${X1}\nСтрока 2: ${X2}"

Для навигации по результатам запуска задач их можно пометить хештегом:

"message": "#мойпортфель"

# Отправка сообщения по условию

Если сообщение нужно отправлять не при каждом запуске задачи, то для этого можно указать условие. Например, это может пригодиться для уведомления о необходимости провести ребалансировку портфеля или для отправки сигнала об ожидаемом изменении цены какого-то актива. Сперва нужно настроить условную установку значения в ячейке таблицы, например, с помощью функции ЕСЛИ (IF), а затем добавить в шаг отправки сообщения условие на значение этой ячейки.

Условие на пустоту ячейки:

{
  "message": "Время ребалансировки!",
  "when": {
    "X1": { "empty": false }
  }
}

Отправит сообщение, когда во время выполнения задачи ячейка X1 будет не пустой.

Можно комбинировать несколько условий:

{
  "message": "Яндекс подешевел и рубль укрепился!",
  "when": {
    "X1": { "empty": false },
    "X2": { "empty": true }
  }
}

Отправит сообщение, когда ячейка X1 будет не пустой и ячейка X2 пустой.

# 5. Определите частоту запуска

Задача может быть ручной — для запуска такой задачи нужно отправить команду боту. Так же, задача может быть регулярной, тогда она будет запускаться автоматически по установленному расписанию или в любой момент вручную.

Для регулярной задачи нужно указать частоту запуска в формате CRON и часовой пояс:

{
  ...
  "cronTime": "0 12,18 * * 1-5",
  "timeZone": "Europe/Moscow"
}

Задаёт запуск задачи в полдень и шесть часов вечера (12,18 из примера) с понедельника по пятницу (1-5 из примера) в московском часовом поясе.

По умолчанию время обрабатывается в нулевом меридиане, что соответствует часовому поясу Europe/London.

# 6. Проверьте полный JSON задачи

Полная структура описания задачи выглядит следующим образом:

{
  "spreadsheetId": "ABCDE",
  "name": "Моя задача",
  "cronTime": "0 12,18 * * 1-5",
  "timeZone": "Europe/Moscow",
  "steps": [
    {
      "cell": "A1",
      "set": { "value": "Поехали!" }
    },
    {
      "cell": "B1",
      "set": { "time": "DD/MM/YYYY" }
    },
    {
      "cell": "C1",
      "set": { "cbr": "USD" }
    },
    {
      "cell": "D1",
      "set": { "moex": "YNDX" }
    },
    {
      "cell": "E1",
      "set": { "yahoo": "GOOG" }
    },
    {
      "cell": "F1",
      "set": { "icn": "GE50" }
    },
    {
      "cell": "G1",
      "set": { "copy": "Z1" }
    },
    {
      "message": "Сумма: ${X1}"
    }
  ]
}

# 7. Добавьте задачу

Введите в чате с Мистером Баффеттом команду /addtaskjson, а затем отправьте туда полный JSON задачи, сформированный в текстовом редакторе.

Готово, задача добавлена! Чтобы увидеть список задач достаточно отправить команду /tasklist, а чтобы удалить задачу нужно отправить команду /deletetask.

# Лимиты

В настоящее время для всех пользователей распространяются следующие лимиты:

  • не более 10 задач
  • не более 20 шагов в каждой задаче
  • запуск каждой регулярной задачи не чаще 1 раза в 3 часа

Вы можете указать любую частоту запуска регулярной задачи, но она не будет запускаться чаще обозначенного выше лимита.