Использование пользовательского триггера опроса

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

Предварительные условия

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

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

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

Как опрашивающие триггеры получают данные

  1. Среда выполнения потока создает начальный вызов из триггера к API соединителя.
  2. Этот соединитель, в свою очередь, обращается к серверной службе.
  3. Серверная служба возвращает в соединитель все актуальные данные.
  4. Соединитель возвращает сообщение "202 Accepted" (принято), значение интервала повтора и заголовок Location с информацией о текущем состоянии. Интервал повтора указывается в секундах. Первый вызов всегда используется для определения предварительного состояния данных.
  5. Когда истекает интервал повтора, среда выполнения потока выполняет следующий вызов соединителя, используя заголовок Location и текущее значение состояние (в нашем примере это 1).
  6. Получив значение состояния 1, соединитель определяет, что нужно вызвать соответствующий API для фильтрации и возврата правильного набора данных. В нашем примере соединитель преобразует состояние в фильтрованный запрос, который возвращает сведения о том, что дата создания наступила позже заданной метки времени.
  7. В примере с момента создания новые данные не появились. Поэтому соединитель получает пустой набор значений.
  8. Соединитель возвращает сообщение "202 Accepted" (принято), значение интервала повтора и заголовок Location с прежним значением состояния.
  9. Когда интервал повтора снова истекает, среда выполнения потока выполняет следующий вызов соединителя, используя прежние значения заголовка Location и состояния.
  10. Соединитель еще раз выполняет соответствующую фильтрацию по дате создания.
  11. На этот раз есть новые данные, полученные после даты создания. Поэтому серверная часть возвращает в соединитель значения из этих новых данных.
  12. Соединитель возвращает сообщение "200 OK", интервал повтора, параметр Location с новым значением состояния и массив значений с новыми данными, которые стали доступны после даты создания. На этом этапе запускается поток.

Создание опрашивающих триггеров через пользовательский интерфейс

В этом разделе показано, как создать опрашивающий триггер в пользовательском интерфейсе Power Automate. В качестве примера для нашей процедуры используется служба TripPin. Служба TripPin — это очень простой интерфейс REST API, который предоставляет список людей и сведения об их путешествиях.

Чтобы использовать службу TripPin, нужно динамически создать для нее URL-адреса. Введите значение https://services.odata.org/TripPinRESTierService в адресную строку браузера. Этот запрос возвращает метаданные, необходимые для демонстрации. Скопируйте эти метаданные и сохраните их в файл для последующего использования.

Чтобы настроить службу TripPin и создать опрашивающий триггер, выполните следующие действия:

  1. В Power Automate выберите вкладку Данные > Пользовательские соединители.

  2. На панели Пользовательские соединители щелкните Создать пользовательский соединитель, а затем выберите Создать с нуля.

  3. В диалоговом окне создания пользовательского соединителя введите для него имя (в нашем примере это Тест опроса), затем щелкните Продолжить.

  4. На странице Общие предоставьте описание и имя узла. В этом примере вы будете использовать URL-адрес services.odata.org, который был получен как значение узла в метаданных TripPin.

    Параметр Value
    Описание "TripPin — пример веб-сайта путешествий"
    Узел "services.odata.org"

    Добавление описания и узла

  5. На странице Безопасность выберите значение Без проверки подлинности для проверки подлинности.

    Проверка подлинности для опроса

  6. На странице Определение выберите + Создать триггер и заполните описание вашего триггера. В этом примере создается триггер, который срабатывает при добавлении нового путешествия в список маршрутов определенного человека.

    Создание нового триггера

    Параметр Value
    Сводка "Активируется при добавлении путешествия"
    Описание "Активируется при добавлении путешествия"
    Идентификатор операции "OnNewTrip"
    Видимость "нет" (дополнительные сведения см. в списке ниже)
    Тип триггера "Опрос"

    Свойство Видимость для операций и параметров в потоке имеет следующие параметры:

    • нет: обычно отображается в потоке
    • расширенная: скрыто в дополнительном меню
    • внутренняя: скрыто от пользователя
    • важная: всегда сначала предоставляется пользователю для просмотра
  7. Область Запрос отображает информацию на основе HTTP-запроса на действие. Выберите Импорт из примера.

    Страница определения — импорт из примера

  8. На панели Импорт из примера вы определите запрос для триггера опроса. В качестве типа команды выберите значение GET. Из метаданных, которые вы получили при динамическом создании URL-адресов для службы, скопируйте URL-адрес в поле URL-адрес на панели Импорт из примера. После этого адреса добавьте строку /People('{Person}')/Trips?$filter=TripId gt 0&$orderby=TripId desc. Например:

    https://services.odata.org/TripPinRESTierService/(S(<service number>))/People('{Person}')/Trips?$filter=TripId gt 0&$orderby=TripId desc

    Примечание

    Не забудьте указать реальное число из метаданных вместо заполнителя <service number> в URL-адресе.

    В этом примере URL-адреса вы создаете запрос для отдельного лица, а {Person} — это переменная среды выполнения, которую пользователь может указать в потоке. Далее вы указываете, что хотите получить сведения о поездках конкретного человека, которого укажет пользователь.

    Но вам нужны не все поездки, а только новые, которые добавились после последнего опроса. Выражение $filter=TripId gt 0 позволяет получить новые поездки, возвращая значение TripId для всех поездок, у которых оно превышает ранее полученный идентификатор TripId. Число 0, которое здесь используется, автоматически обновляется при каждом выполнении опрашивающего триггера.

    Также выражение $orderby=TripId desc указывает, что данные возвращаются в порядке убывания значений TripId. Получение данных в порядке убывания — обязательное требование для триггера. Это означает, что возвращаемые внутренней службой результаты нужно отсортировать по параметру триггера таким образом, чтобы первым в массиве данных располагался самый последний элемент данных (в нашем примере — с максимальным значением TripId).

    Меню импорта из примера

    Нажмите кнопку Импорт, чтобы импортировать данные примера. Теперь в области запроса отобразятся команда, URL-адрес, путь и параметры запроса.

  9. Выберите в области запроса параметр запроса $filter, а затем щелкните Изменить, чтобы перейти к диалоговому окну Параметры.

    Изменение параметров фильтра

  10. В диалоговом окне Параметр для $filter выберите для параметра Видимость значение внутренняя. Такой параметр используется только соединителем для внутренних операций, что не позволяет пользователю вносить изменения. Дополнительные сведения о параметрах видимости см. в описании расширения OpenAPI x-ms-visibility.

    Выберите Назад, чтобы вернуться на страницу запроса.

    Изменение параметров фильтра

  11. Выберите в области запроса параметр запроса $orderby, а затем щелкните Изменить, чтобы перейти к диалоговому окну Параметры.

  12. В диалоговом окне Параметр для $orderby выберите для параметра Это обязательное значение? значение Да, а для параметра Видимость значение внутренняя. Как и в предыдущем случае, эти настройки не позволят пользователю вносить изменения в параметр.

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

    Выберите Назад, чтобы вернуться в предыдущую зону.

    Изменение параметра сортировки

  13. Область Ответ отображает информацию на основе HTTP-ответа для действия. Щелкните Добавить ответ по умолчанию.

    Добавление ответа по умолчанию

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

    Добавление тела ответа опроса

    
    {
        "@odata.context":"https://services.odata.org/TripPinRESTierService/(S(<service number>))/$metadata#Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Trip)",
        "value":[
            {
                "TripId":2,
                "ShareId":"9ce142c3-5fd6-4a71-848e-220ebf1e9f3",
                "Name":"Honeymoon",
                "Budget":2650,
                "Description":"Happy honeymoon trip",
                "Tags":[
                    "Travel",
                    "honeymoon"
                ],
                "StartsAt":"2014-02-01T00:00:00Z",
                "EndsAt":"2014-02-04T00:00:00Z"
            },
            {
                "TripId":1,
                "ShareId":"f94e9116-8bdd-4dac-ab61-08438d0d9a71",
                "Name":"Trip in Beijing",
                "Budget":2000,
                "Description":"Trip from Shanghai to Beijing",
                "Tags":[
                    "Travel",
                    "Beijing"
                ],
                "StartsAt":"2014-02-01T00:00:00Z",
                "EndsAt":"2014-02-04T00:00:00Z"
            }
        ]
    }   
    

    Примечание

    Не забудьте указать реальное число из метаданных вместо заполнителя <service number> в URL-адресе.

  15. В области Конфигурация триггера выберите параметр, который используется для отслеживания изменений состояния, полученных от TripPin. В нашем примере нужно ввести параметр $filter.

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

    TripId gt @{triggerBody().value[0].TripId}

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

    В поле Выберите коллекцию, содержащую данные триггеров выберите @triggerBody().value. Это массив, который содержит данные триггера, возвращаемые внутренней службой.

    Конфигурация опрашивающего триггера

  16. В верхней части мастера щелкните Создать соединитель.

Использование опрашивающего триггера

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

  1. В левой части страницы flow.microsoft.com выберите Создать.

  2. В поле Начать с нуля выберите Мгновенный поток.

  3. В диалоговом окне Создать мгновенный поток нажмите кнопку Пропустить.

  4. В поле поиска введите Активируется при добавлении путешествия.

    Снимок экрана, показывающий текст поиска в поле поиска.

    Выберите элемент в списке, чтобы использовать его в качестве триггера.

  5. В поле для сведений о лице в свойствах потока введите russellwhyte, чтобы выбрать человека для изучения поездок, а затем щелкните + Новый шаг.

    Снимок экрана, на котором показано поле Человек и кнопка Новый шаг.

  6. В диалоговом окне Выберите действие щелкните вкладку Встроенное, а затем выберите Дата и время.

    Снимок экрана, показывающий диалоговое окно Выберите действие.

  7. В области Дата и время выберите Текущее время.

    Снимок экрана с кнопкой Текущее время.

  8. Выберите Сохранить, чтобы сохранить новый поток.

Проверка и устранение неполадок

Чтобы проверить правильность настройки, выберите Мои потоки, затем выберите поток Активируется при добавлении путешествия -> Текущее время. Так как этот поток еще не выполнялся, сейчас в журнале ничего не отображается.

Чтобы протестировать поток, откройте приложение Postman, в котором вы добавите данные в TripPin.

  1. В окне Postman выберите значок + рядом с вкладкой Панель запуска.

  2. Для запроса без заголовка выберите POST в раскрывающемся списке слева. Затем введите указанный ниже адрес в поле Введите URL-адрес запроса.

    https://services.odata.org/TripPinRESTierService/(S(<Service number))/People('russellwhyte')/Trips

    Примечание

    Не забудьте указать реальное число из метаданных вместо заполнителя <service number> в URL-адресе.

  3. В запросе POST выберите вкладку Текст, а затем выберите необработанный. В раскрывающемся списке справа от значения необработанный выберите JSON.

  4. Введите в текстовом поле следующий текст:

    {
         "TripId": 190,
         "ShareId": "9d9b2fa0-efbf-490e-a5e3-bac8f7d47354",
         "Name": "Trip in US",
         "Budget": 5000,
         "Description": "Trip from San Francisco to New York City",
         "Tags": [
             "business",
             "New York meeting"
         ],
         "StartsAt": "2014-01-01T00:00:00Z",
         "EndsAt": "2014-01-04T00:00:00Z"
    }
    
  5. Щелкните Отправить, чтобы отправить сообщение POST на сайт TripPin.

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

    В ответе должно быть указано состояние 201 Created.

Теперь, когда вы выберете Мои потоки и щелкнете поток Активируется при добавлении путешествия -> Текущее время, отобразится журнал выполнения для триггера.

Триггер был успешно выполнен

Примечание

Если вы будете выполнять в Postman новый запрос POST для того же человека, измените значение TripId в тексте JSON. Иначе возникнет ошибка "409 Conflict" (конфликт).

Если все настроено правильно, вы будете получать уведомления в Microsoft Power Automate при каждом добавлении новой поездки в TripPin.

См. также

Предоставление отзывов

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