Разбор ответов на HTTP-запросы

Сейчас мы вас приятно удивим 🙂

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

Дело в том, что до сегодняшнего дня поступающая в ПланФикс информация из других сервисов и систем приходила одним общим блоком, который можно было увидеть в комментарии к задаче. По факту ПланФикс не умел понимать эти данные, выделять из них нужную информацию, чтобы использовать её при дальнейших расчетах.

Опытные пользователи ПланФикса решали такую задачку с помощью сторонних сервисов: Integromat, ApiX-Drive, Zapier. Это временное, но не универсальное решение. В итоге мы решили сделать ПланФикс более дружелюбным по отношению к другими системам и сервисам.

Новые элементы интерфейса

Мы внесли капельку изменений: добавили новые элементы интерфейса в настройки автоматических сценариев. Теперь обо всём по порядку.

Послать HTTP-запрос

Теперь в ПланФиксе можно отправлять не только POST, но и GET-запросы. Поэтому мы переименовали действие, отвечающее за отправку запросов. Теперь в выпадающем списке его можно найти по названию «Послать HTTP-запрос»:

Новое имя для старого действия
Новое имя для старого действия.
По клику картинка откроется в новом окне и большем размере.

Блок авторизации

Добавили к настройке запросов блок с авторизацией. Он часто необходим для работы с API платежных систем. Чуть позже на примере покажу, как это работает. Мы расположили блок авторизации вот тут:

Блок авторизации для POST-запросов
Блок авторизации для POST-запросов.
По клику картинка откроется в новом окне и большем размере.

Разобрать полученный ответ

Пожалуй, это самая долгожданная доработка. Теперь с её помощью ПланФикс понимает, какую информацию ему присылают сторонние сервисы:

Галочка разбора полученного ответа
Галочка разбора полученного ответа.
По клику картинка откроется в новом окне и большем размере.

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

Блок с настройками разбора полученного ответа
Блок с настройками разбора полученного ответа.
По клику картинка откроется в новом окне и большем размере.

Примеры GET и POST запросов

Ниже приведу несколько примеров, которые продемонстрируют работу нового функционала.

GET-запрос: получение курса валют

Теперь получить информацию о курсе валют прямо в ПланФикс стало значительно проще. Рассмотрим настройки на примере ЦБ РФ. Будем использовать XML-данные, которые Центробанк отдаёт по ссылке:

http://www.cbr.ru/scripts/XML_daily.asp

Настраиваем кнопку:

Пример настройки кнопки для получения курса валют
Пример настройки кнопки для получения курса валют.
По клику картинка откроется в новом окне и большем размере.

Разбираем ответ от банка:

Разбор ответа от ЦБ РФ
Разбор ответа от ЦБ РФ.
По клику картинка откроется в новом окне и большем размере.

Обратите внимание, разбор ответа происходит так:

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

После клика по кнопке в задаче видим следующее:

Курс валют в полях задачи
Курс валют в полях задачи.
По клику картинка откроется в новом окне и большем размере.

POST-запрос: трекинг посылок

Благодаря разбору ответов на HTTP-запросы, теперь можно отслеживать посылки в транспортных компаниях. Например, давайте получим статус посылки от украинской компании «Новая Почта».

Для этого добавим в задачу два поля типа строка —  «ТТН» и «Номер телефона». Далее, используя API «Новой Почты» настраиваем кнопку:

Настройка POST-запроса для отслеживания посылки
Настройка POST-запроса для отслеживания посылки.
По клику картинка откроется в новом окне и большем размере.
{
    "modelName": "TrackingDocument",
    "calledMethod": "getStatusDocuments",
    "methodProperties": {
        "Documents": [
            {
                "DocumentNumber": "{{Задача.ТТН}}",
                "Phone":"{{Задача.Номер телефона}}"
            }
        ]
    }
}

Разбор ответа выглядит так:

Разбор ответа от транспортной компании
Разбор ответа от транспортной компании.
По клику картинка откроется в новом окне и большем размере.

В итоге в задаче видим дату и статус отправления:

Комментарий с полученным статусом посылки
Комментарий с полученным статусом посылки.
По клику картинка откроется в новом окне и большем размере.

Сложные примеры: предварительная аутентификация и авторизация

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

POST-запрос в СДЭК: получаем информацию о номере заказа через аутентификацию по токену

Например, чтобы работать с API транспортной компании СДЭК, в начале необходимо получить токен и добавить его в заголовок к основному запросу.

Схема работы такая:

Отправка предварительного POST-запроса - Получение токена в ответ - Добавление токена в заголовок основного запроса - Отправка основного запроса.

Вот как это можно настроить в ПланФиксе.

Шаг № 1 — Отправляем предварительный запрос в СДЭК, проходим аутентификацию:

Проходим аутентификацию в СДЭК
Проходим аутентификацию в СДЭК.
По клику картинка откроется в новом окне и большем размере.

Шаг № 2 — разбираем ответ на предварительный запрос — получаем токен. И тут же отправляем в СДЭК основной запрос для получения информации о номере заказа:

Получаем токен и формируем основной запрос
Получаем токен и формируем основной запрос.
По клику картинка откроется в новом окне и большем размере.

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

Шаг № 3 – разбираем полученную информацию от СДЭК о номере заказа и добавляем её в нужное поле:

Разбираем ответ от СДЭК о номере заказа
Разбираем ответ от СДЭК о номере заказа.
По клику картинка откроется в новом окне и большем размере.

POST-запрос в ЮКассу: автоматическое получение ссылки на оплату через базовую авторизацию

Для общения ПланФикса и ЮКассы будем использовать базовую авторизацию, иначе нельзя. Пример, который настроим, позволит автоматически формировать ссылку на оплату и отправлять её клиенту.

Шаг № 1 — формируем запрос с платежной информацией для ЮКассы и проходим базовую авторизацию:

Отправляем данные в ЮКассу
Отправляем данные в ЮКассу.
По клику картинка откроется в новом окне и большем размере.
{
        "amount": {
          "value": "{{Задача.Возможная сумма сделки}}",
          "currency": "RUB"
        },

       "payment_method_data": {
          "type": "bank_card"
        },

        "confirmation": {
          "type": "redirect",
          "return_url": "https://mysite.ru/after_payment"
        },
        "capture": true,
        "description": "Заказ в Рога и Копыта"
}

Шаг № 2 — разбираем полученный ответ и добавляем ссылку на оплату в задачу:

Разбираем ответ ЮКассы
Разбираем ответ ЮКассы.
По клику картинка откроется в новом окне и большем размере.

Что теперь

Теперь вам будет гораздо проще получать информацию в ПланФикс из других систем: курсы валют, статусы почтовых отправлений, ссылки на оплату. Уверен, примеры выше — это всего лишь мизерная часть необъятных возможностей, которые открылись перед вами с появлением разбора ответов на HTTP-запросы.

Кстати, мы ждём от вас историй о том, как вы будете использовать новую возможность в своей работе. Поделитесь опытом, нам очень интересно 🙂



Не забывайте о наших социальных сетях: ВКонтакте, Telegram и ВК Видео. Там появляются новости о доработках и новинках. Подпишитесь, чтобы ничего не пропустить.

Один комментарий

  1. Аватар

    Волшебно!
    Особенно, когда знаешь сложности всего этого добра в части программирования.

    А подскажите, регулярные выражения, как в email-парсинге нам подвезут сюда?
    И сможем ли мы когда-нибудь писать некий цикл запросов, чтобы в одном заходе получать не одну запись, а несколько списком, и уже дальше разбирать это все объекты, создавать их и прокидывать в разные места?

    1. Аватар

      Степан, регулярка там есть, посмотрите внимательно 🙂

      По второму вашему вопросу нужны подробности: какие записи, какие объекты?
      А вообще, это сценарий по одной задаче, поэтому не совсем понятен кейс, для которого надо получать сразу “пачку” данных.

      Сейчас можно, как и в почте, получить данные и сделать из этого аналитики – https://i.imgur.com/OCdElIA.png

      1. Аватар

        Увидел регулярки, спасибо!

        Ну вот пример:
        Обращаюсь к API банка и он дает мне список платежей за период.
        Мне надо теперь этот список разобрать, но я могу только создать аналитики, а мне, по сути, надо прокинуть значения в разные задачи.

        Я бы сделал инфоблок по ИНН

        Потом цикл по этому списку:

        {{системные.аккаунт}}

        for i,y in INN, SUMM:
        i

        id поля задачи
        y

        Тоесть, проверил бы данные на условия и отправил бы некий запрос дальше, скажем, к API-Планфикс, чтобы у меня получился XML- кусок с нужными мне структурами по количеству, и оно бы улетело куда мне надо.

          1. Аватар

            Пока кажется, что написать код для вашей задачи – это более простое решение, чем пытаться наладить всё через разбор ответов на http-запросы.

            Обсудим ваш кейс в команде.

  2. Аватар

    Долгожданно!)
    А можно ли сделать не только разборы POST запросов, но и обычных комментариев? Например, в сценарии с триггером “Добавлен комментарий…”

    1. Аватар

      Владимир, а покажите нам пример комментария, который вы хотите разбирать?
      Как он появляется у вас в системе?

      1. Аватар

        Ну у меня есть микро-кейс например, https://blog.planfix.ru/sobiraem-utm-dannye-klienta-vnutri-ego-kartochki-v-planfikse/ вот тут публиковал, но хочется избежать запира (глючит больно с парсингом).
        Мы прокидываем через deeplink телеграмма utm-метки, которые приходят в описание задачи: http://joxi.ru/nAyJp1lCagnDLr
        Вот их бы уметь разбирать (это правда не комментарий, а описание)

  3. Аватар

    На совсем понятно, как реализовать обычный вариант:
    1. Авторизация по логин-паролю на странице типа example.com/login.php
    2. Получении данных с другой (внутренней) страницы сайта типа example.com/page.php с полученной авторизацией

    Что надо получить в первом шаге и послать во втором шаге?

  4. Аватар

    Еще хотелось бы явно указывать тип запроса GET,PUT,POST , для некоторых api это очень важно и например изменить элемент без PUT никак не получится (
    Ну и если при отправке запроса будет подсветка синтаксиса json вместо html редактора, это было бы круто.

  5. Аватар

    Ребята, поясните момент по Шаг № 1 — Отправляем предварительный запрос в СДЭК, проходим аутентификацию:
    В примере URL оканчивается ?parameters
    GET ?api=&version=&method=
    Когда я устанавливаю
    URl=?api=&version=&method=
    Получаю верный ответ 200
    В случае
    URl= и задаю параметры
    {“success”:false,”error”:{“code”:101}}
    URl=? и задаю параметры
    {“success”:false,”error”:{“code”:101}}
    URl=?parameters и задаю параметры
    {“success”:false,”error”:{“code”:101}}
    Как должен заканчиваться URL чтобы параметры заработали?

    1. Аватар

      Ребята, поясните момент по Шаг № 1 — Отправляем предварительный запрос в СДЭК, проходим аутентификацию:
      В примере URL оканчивается ?parameters
      GET “CGI_PATH?api=API_NAME&version=VERSION&method=METHOD”
      Когда я устанавливаю
      URl=”CGI_PATH?api=API_NAME&version=VERSION&method=METHOD”
      Получаю верный ответ 200
      В случае
      URl=”CGI_PATH” и задаю параметры
      {«success»:false,»error»:{«code»:101}}
      URl=”CGI_PATH?” и задаю параметры
      {«success»:false,»error»:{«code»:101}}
      URl=”CGI_PATH?parameters” и задаю параметры
      {«success»:false,»error»:{«code»:101}}
      Как должен заканчиваться URL чтобы параметры заработали?
      UPD: при отправке вырезались переменные, изменил.

      1. Аватар

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

  6. Аватар

    Обратил внимание, что если при разборе инфоблока выбрать действие “добавить комментарий” то ответ сценария постится от имени инициатора отправки пост-запроса (у меня по кнопке), а комментарий после разбора инфоблока от имени администратора аккаунта.

      1. Аватар

        Мы так и сделали, чтобы была история курсов валют – нам часто при расчете сделок и проектов нужен курс на конкретную дату.

        У нас есть справочник с курсами валют и есть входящий вебхук, который позволяет стороннему коду (реализовали через интегромат) спросить у Планфикса, есть ли уже в системе курс на указанную дату, и, в случае отрицательного ответа, взять его у ЦБ и записать в справочник, после чего уведомить финансиста и бухгалтера о поступлении нового курса.

        Наверное элегантнее было бы как-то запрашивать курс автоматически через сервис ЦБ, возможно с этим замечательным новым функционалом мы потом как-нибудь именно так все и настроим 🙂 В любом случае очень крутое нововведение, большое спасибо вам, уважаемые разработчики!!

  7. Аватар

    Добрый день! Я так понимаю, что данный сценарий с HTTP-запросом возможно использовать и для получения данных из самого Планфикса, допустим из фильтров задач или отчётов? Если это так, подскажите как это реализовать.

    1. Аватар

      Да, вы правильно поняли. С помощью HTTP-запроса можно “вытащить” данные из ПланФикса и “положить” их в другую программу или сервис. Как это реализовать – зависит от того, что именно вы хотите сделать.

      1. Аватар

        Вот как раз и “положить” хотелось бы обратно в Планфикс. Например, собрать по фильтру задач данные о количестве задач по условиям: процесс, шаблон и статус. И далее, “положить” данные о количестве в пользовательское поле задачи, тоже, в Планфиксе. Тут конечно напрашивается сразу вопрос: почему бы не реализовать дополнительные переменные типа {{…}} для похожих ситуаций, которые могли бы работать с Планировщиками, Отчетами и Фильтрами?

Добавить комментарий