Моя команда недавно начала использовать Airtable для управления нашими проектами, и я хотел бы сделать его немного более эффективным, каталогизировав там нашу библиотеку активов. Поэтому я бы использовал таблицы для перечисления наших расширений данных, поездок, контента и т. д.

Моя идея состояла в том, чтобы использовать автоматизацию для регулярного запуска запроса, который будет извлекать списки этих элементов, а затем запускать javascript для записи их в Airtable. Я знаю, как использовать Automation Studio для взаимодействия с такими вещами, как расширения данных, но не обязательно перечислять все, что у нас есть.

Это возможно? Не лучше ли мне написать свой собственный код API?

1
Cail 19 Мар 2020 в 13:37

1 ответ

Лучше всего использовать API для сбора этой информации. Однако обратите внимание, что это будет на уровне каждого BU, а не на уровне предприятия, поэтому вам может потребоваться выполнить каждое из этих действий несколько раз, чтобы получить все по каждому BU. Вам также необходимо убедиться, что ваш счетчик не превышает максимальный размер страницы. Если это так, вам нужно будет сделать несколько вызовов, чтобы убедиться, что вы получили каждый элемент.

Во-первых, вам нужно будет использовать REST API для сбора токена аутентификации — это объясняется в здесь. У меня также есть некоторая информация об этом в блоге сообщение я сделал о настройке экземпляра SFMC внутри POSTman, который может помочь.

Затем вы должны использовать этот токен авторизации для доступа к указанным ниже API.


АКТИВЫ
Вы можете использовать конечную точку REST Asset для сбора изображений, электронных писем, шаблонов, облачных страниц (только тех, которые используют редактор Content Builder) и т. д. через базовая конечная точка запроса:
/asset/v1/content/assets?$pagesize=450&$filter=assetType.displayName%20eq%20image

(и можно изменить отображаемое имя на адрес электронной почты для всех сообщений электронной почты. Вы также можете изменить его, чтобы отфильтровать по assetType.name и использовать такие значения, как: адрес электронной почты на основе шаблона, веб-страница и т. д., чтобы собирать активы определенного типа.)

Или вы можете использовать Сложная версия запроса для дальнейшего упрощения: /asset/v1/content/assets/query


РАСШИРЕНИЯ ДАННЫХ
Чтобы получить расширения данных, я бы рекомендовал использовать WSProxy (если внутри SFMC) или вызов SOAP, если снаружи):

    var prox = new Script.Util.WSProxy();
    var cols = ["Name","CustomerKey","CategoryID","IsSendable"];
    var filter = {
        Property: "{{example}}",
        SimpleOperator: "equals",
        Value: "{{example}}"
    };
    var desc = prox.retrieve("DataExtension", cols, filter);

МЫЛО:

      <RetrieveRequestMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
           <RetrieveRequest>
              <ObjectType>DataExtension</ObjectType>
              <Properties>CustomerKey</Properties>
              <Properties>Name</Properties>
              <Properties>ModifiedDate</Properties>
              <Properties>CategoryID</Properties>
              <Properties>Status</Properties>
                <Filter xsi:type="ns1:SimpleFilterPart" xmlns:ns1="http://exacttarget.com/wsdl/partnerAPI">
               <Property>{{example}}</Property>
               <SimpleOperator>equals</SimpleOperator>
               <Value>{{example}}</Value>
            </Filter> 
           </RetrieveRequest>
        </RetrieveRequestMsg>

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

Чтобы разобрать ответ, вы будете использовать синтаксический анализ массива и объекта в JS:
var deName = desc.Results[0].Name;

Чтобы проверить, есть ли в возврате больше записей, вам нужно найти поле «HasMoreRows». Правда в том, что вам нужно вытащить больше строк (количество> максимальный размер страницы). Вот хороший пример из документации о том, как с этим справиться.


АВТОМАТИЗАЦИЯ
Я написал сообщение в блоге о создании панели автоматизации, которую вы можете перепрофилировать для твои нужды. Но я бы хотел использовать WSProxy или SOAP API, чтобы получить основную информацию, как показано ниже:

<script runat="server">

Platform.Load("Core","1.1.1");

  var prox = new Script.Util.WSProxy();

  var cols = ["Name","Status"];
  var filter = {
      Property: "Status",
      SimpleOperator: "IN",
      Value: [-1,0,1,2,3,4,5,6,7,8]
  };
  var res = prox.retrieve("Automation", cols, filter);

</script>

МЫЛО:

      <RetrieveRequestMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
      <RetrieveRequest>
            <ObjectType>Automation</ObjectType>
            <Properties>*</Properties>
            <Filter xsi:type="SimpleFilterPart">
                <Property>Status</Property>
                <SimpleOperator>IN</SimpleOperator>
                <Value>-1</Value>
                <Value>-0</Value>
                <Value>1</Value>
                <Value>2</Value>
                <Value>3</Value>
                <Value>4</Value>
                <Value>5</Value>
                <Value>6</Value>
                <Value>7</Value>
                <Value>8</Value>
            </Filter>
         </RetrieveRequest>
   </RetrieveRequestMsg>

(вы заметите, что внутри SOAP мы можем использовать подстановочный знак * для возврата всех свойств. Это также можно использовать внутри WSProxy, я думаю [не на 100%, но я так думаю], но может быть более эффективным просто перечислите конкретные свойства, которые вам нужны.)


ПУТЕШЕСТВИЯ
Для этого вам понадобится другой конечная точка REST API. Вы можете использовать конечную точку:
/interaction/v1/interactions

Это вернет список всех ваших поездок (еще раз посмотрите на maxpagesize, чтобы убедиться, что возвращены все и дополнительные вызовы не нужны).


Опять же, как указано выше, API — лучший способ собрать это. И к этому моменту я бы предпочел, чтобы внешняя система выполняла и анализировала эти вызовы вместо внутреннего использования через SFMC. Причина этого в том, что SFMC не был разработан для такого типа повторяемых действий с тяжелыми процессами, и ваши скрипты могут перестать работать или вызвать огромные задержки или замедление работы вашего экземпляра.

4
Gortonington 19 Мар 2020 в 16:31
1
Вы, сэр, даете самые исчерпывающие ответы на этом сайте :-)
 – 
Lukas Lunow
19 Мар 2020 в 19:32