обработка ответа после вызова внешнего api

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Evgeny
    Junior Member
    • Jul 2020
    • 3

    обработка ответа после вызова внешнего api

    всем привет
    нужна помощь, так как на форуме и в документации что то не нашел ответ на вопрос (может плохо искал, тогда просьба показать где почитать)

    вопрос в следующем:

    в рамках процесса, на одном из шагов необходимо вызвать внешнее api и обработать ответ
    используем "задание" и "отправить hhtp запрос"
    дальше используем метод post
    дергаем внешнее апи.

    при этом хотим обработать ответ данного api, что бі на основе этого обновить поля объекта
    а вот как его обработать так и не нашли :-(









  • Maximus
    Senior Member
    • Nov 2018
    • 2731

    #2
    Здравствуйте Евгений.

    > при этом хотим обработать ответ данного api, что бі на основе этого обновить поля объекта
    а вот как его обработать так и не нашли :-(


    Задумка верна. Для того чтобы это реализовать вам необходимо понять каким методом и с каким телом запрос передается системе. Затем необходимо отладить ваш внешний запрос в СРМ систему как надо. Для того чтоб проинспектировать как шлется запрос сделайте следующее:
    1. В браузере нажмите кнопку F12 чтобы открыть инструменты разработчика;
    2. Перейдите в вкладку Network
    3. Совершите обновление полей любой записи в EspoCRM (желательно тех полей на которые вы хотите воздействовать чтобы можно было сразу увидеть Payload по ним)
    4. Проинспектируйте запрос.

    Comment


    • Evgeny
      Evgeny commented
      Editing a comment
      Благодарю. Сейчас попробую. Вопрос как непосредственно "поймать" ответ ? есть лик акие служебные переменные которые используются для ответов вызываемых API . Например API возвращает "status" - как мне его получить и увидеть ?

      UPD попробовал, ничего особого не увидел, ведь у меня логика на процессе спрятана, она не видна при F12, так как процесс судя по всему в фоне на сервере отрабатывает....

      UPD 2: через API я вызываю внешнюю систему и получаю из нее данные, которые хочу в CRM записать
      Last edited by Evgeny; 07-23-2020, 08:11 AM.
  • Maximus
    Senior Member
    • Nov 2018
    • 2731

    #3
    Вот как выглядит запрос на обновление поля "Статус" для объекта Задача (см. скриншоты)
    Attached Files

    Comment


    • Evgeny
      Evgeny commented
      Editing a comment
      видимо не правильно выразился, мы используем не объект задача, а тип операции в бизнес процессах.... т.е. при сохранении объекта вызывается бизнгес процесс, который собирает данные с полей - передает их во внешнее api, после єтого должен получить ответ и заполнить другие поля
  • Evgeny
    Junior Member
    • Jul 2020
    • 3

    #4
    Картинки с процесса и самого АПИ , как пример
    Attached Files

    Comment

    • Maximus
      Senior Member
      • Nov 2018
      • 2731

      #5
      Так вы хотите переслать данные в телеграм? Ознакомьтесь с данным материалом https://www.espocrm.com/blog/sending...ith-workflows/.

      Comment


      • Evgeny
        Evgeny commented
        Editing a comment
        телеграмм как пример одного из апи, может быть любое другое апи, просто это было под рукой и проще проверять, что куда то что то передается.... вопрос каким образом отработать ответ, получаемый из api ?
    • Maximus
      Senior Member
      • Nov 2018
      • 2731

      #6
      Ясно.
      Ну как понять какие слать запросы в систему я вам показал. С чем еще возникли вопросы?
      Я возможно могу быть и не прав поскольку не владею всей информацией о ваших логических процессах, но вот 2 примечания по поводу вашего Payload:
      1. Вы передаете значение поля "token". У вас действительно такое поле имеется, или это токен самого запроса (как куки и пр.). Если это токен вашего запроса то тогда он должен прописываться в "Заголовки"
      2. $$myFullAddress - следует понимать что это вызов переменной (не поля) в тело загрузки. В ВРМ как правило перед процессом в блоке со скриптами описываются все эти переменные.

      Также вам следует понимать и следующее. Для отправки запросов из вне в СРМ систему, для того чтобы система не вернула код 403, необходимо в хедерах запроса передавать либо логин и пароль пользователя системы у которого есть права на подобные действия (создание, обновление записи и пр.) либо создать Entry Point. Подробнее читайте здесь https://docs.espocrm.com/development/api/.

      Comment


      • Maximus
        Maximus commented
        Editing a comment
        UPD. Прошу прощения. Я написал Entry Point. Ошибка. Я имел ввиду API Key https://docs.espocrm.com/development...ion-by-api-key.

      • Evgeny
        Evgeny commented
        Editing a comment
        В систему понятно, здесь вопросов нет. Єто все работает. ТОкен - єто авторизационный ключ внешней системы, там он и обрабатывается, по поводу переменной все верно, переменные определены - здесь все хорошо....
        Сама отправка запроса идет - внешняя система вызвается и получает все переменные.
        При этом внешняя система в ответ на запрос вовзращаяет ряд значений, которые я хочу в дальнейшем использовать в CRM. Например
        У меня есть внешняя система , например платежей. Я передаю ей значение (ИД пользователя и сумму) в ответ получаю статус платежа. Мне нужно "поймать ответ" и записать его в поле CRM ...
        Вот с єтой частью как раз и проблемы - не могу понять каким образом получить ответ.

        Если брать структуру запроса, то постмен например выдает по АПИ след информацию:

        {"status":"200","error":"","data":[]}

        Вот как мне забрать значение статуса, например ?

        И если будет ошибка - описание ошибки ?
    • Maximus
      Senior Member
      • Nov 2018
      • 2731

      #7
      Можете показать пример полного возвратного запроса в Еспо? К примеру ту часть URI которая начинается с /api/v1/... . И Payload сам.
      Также можете включит редим логирования DEBUG как описано здесь https://docs.espocrm.com/administrat...e-for-a-logger и проверять описание ошибок в логе. Если Payload неправильный он будет выкидывать чтото типа Bad server request и прочее.

      Comment


      • Evgeny
        Evgeny commented
        Editing a comment
        о, а что значит возвратный запрос в еспо? где его надо прописывать ? (видимо где то здесь и есть корень решения)

        мы прописывали тольок отправку запроса методом post , предполагая, что есть обработчик возвращаемых значений... так как api возвращает значения...
    • Maximus
      Senior Member
      • Nov 2018
      • 2731

      #8
      > о, а что значит возвратный запрос в еспо? где его надо прописывать ? (видимо где то здесь и есть корень решения)

      Наверное я вас неправильно понял. Я полагал что вы из EspoCRM отправляете запрос кудато на сайт а он вам в ответ запускает отдельный запрос и отправляет в Еспо данные. А выходит что вы отправляя Post запрос ожидали получить информацию в ответ. Верно? Тут нужно понимать что для получения информации из сторонних ресурсов должен отправляться запрос GET. Workflow или BPM могут отправить запрос только по методу POST и PUT. Функционала для отправки запроса по методу GET через UI нет. Таким образом ваша логика должна быть построена следующим образом:
      1. EspoCRM используя действие Workflow или BPM отправляет POST запрос кудато на ваш сервис.
      2. На вашем сервисе должен быть скрипт который принимает на вход POST запрос от EspoCRM, формирует ответ и отправляет соответствующий запрос в EspoCRM.

      Comment


      • Evgeny
        Evgeny commented
        Editing a comment
        печально . а если у меня нет возможности изменять внешний сервис, какие варианты есть тогда реализации данной задачи ? вот просто есть внешнее api и мне надо его дернуть и получить ответ, но поменять его или добавить там какой то вызов не могу - єто другая компания... :-(
    • Maximus
      Senior Member
      • Nov 2018
      • 2731

      #9
      Как вариант, реализовать все это через Hook https://docs.espocrm.com/development/hooks/.

      Comment


      • Evgeny
        Evgeny commented
        Editing a comment
        попробуем, спасибо. А еще вопрос по тому же методу POST. я через него могу отправить файлы, которые лежать в CRM в поле типа File ?
    • Maximus
      Senior Member
      • Nov 2018
      • 2731

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

      Comment


      • Evgeny
        Evgeny commented
        Editing a comment
        сервис отрабатывает. постменом проверили, все ОК. а каким образом тогда можно забрать сами файлы из поля ? есть какие то нюансы ? что в Пейлоад передавать , что бы отработало ? пытаюсь доступиться вот так : "files[]":"{$documents}" но не отрабатывает. :-( documents - поле типа "несколько вложений"
        Last edited by Evgeny; 07-24-2020, 02:44 PM.
    • dimyy
      Active Community Member
      • Jun 2018
      • 569

      #11
      Возможно данная картинка поможет: отправка запроса с последующим извлечением данных из ответа.

      Так же вариант схемы процесса с обработкой ошибок запросов. Единственный нюанс - если при ошибке (что то отличное от 20* в коде ответа) возвращаются данные поймать их в процессе без переработки исходного кода не получится
      Attached Files
      Last edited by dimyy; 08-08-2021, 06:04 AM.

      Comment

      Working...