Zapier: извлечение данных из двух конечных точек API за один триггер

Я работаю над триггером, в котором мне нужно получить данные из двух конечных точек API. Первая конечная точка - это контакт из базы данных, который извлекает адрес электронной почты, а затем для получения сведений об этом контакте (электронной почте) мне нужно использовать другую конечную точку. один раз - / Subscriber, а другой - / Subsriber / {email} / Properties.

 

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

 

Вот код для обоих

Подписчик:

  url: 'https://edapi.campaigner.com/v1/Subscribers?PageSize=1',
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'X-API-KEY': bundle.authData.ApiKey
  },
  params: {
    'ApiKey': bundle.authData.ApiKey
  }
};


return z.request(options).then((response) => {
 response.throwForStatus();
 const result = z.JSON.parse(response.content);
 result.id = result.Items;
 return [result];
});

И свойства подписчика

const options = {
  url: `https://edapi.campaigner.com/v1/Subscribers/${bundle.inputData.email_address}/Properties`,
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'X-API-KEY': bundle.authData.ApiKey
  },
  params: {
    'email_address': bundle.inputData.email_address,
    'ApiKey': bundle.authData.ApiKey
  }
}

return z.request(options).then((response) => {
 response.throwForStatus();
 const result = z.JSON.parse(response.content);
 result.id = result.CustomFields;
 return [result];
});

Любая помощь приветствуется.


person H3rd    schedule 07.05.2021    source источник


Ответы (1)


Да, безусловно, возможно! Если ваши данные подписчика действительно не должны быть отдельным триггером (что маловероятно, поскольку вы, вероятно, просто запускаете новые контакты), это может быть просто функция. Попробуйте что-нибудь вроде:

const subscriberPerform = async (z, bundle) => {
  const emailResponse = await z.request({
    url: "https://edapi.campaigner.com/v1/Subscribers?PageSize=1",
    method: "GET",
    headers: {
      Accept: "application/json",
      "X-API-KEY": bundle.authData.ApiKey, // does this need to be both places?
    },
    params: {
      ApiKey: bundle.authData.ApiKey, // does this need to be both places?
    },
  });
  // requires core version 10+
  const email = emailResponse.data.email;

  const emailDataResponse = await z.request({
    url: `https://edapi.campaigner.com/v1/Subscribers/${email}/Properties`,
    method: "GET",
    headers: {
      Accept: "application/json",
      "X-API-KEY": bundle.authData.ApiKey,
    },
    params: {
      email_address: bundle.inputData.email_address, // lots of duplicated data here
      ApiKey: bundle.authData.ApiKey,
    },
  });

  return [emailDataResponse.data.SOMETHING];
};

Это общая идея. Эти JS-функции могут вообще не быть триггерами, в зависимости от того, как вы их используете.

И последнее замечание - вы не хотите выполнять этот дополнительный поиск каждый раз при опросе новых контактов; это расточительно. Если вы это делаете, ознакомьтесь с обезвоживанием..

person xavdid    schedule 13.05.2021
comment
Я думаю, что мы достигли некоторого прогресса и можем получить данные и объединить их вместе, но это просто вопрос форматирования данных массива, над которым мы сейчас работаем. - person H3rd; 17.05.2021