Бөлісу құралы:


Использование веб-перехватчиков

Настройка веб-перехватчиков с помощью SharePoint Embedded

Веб-перехватчики — это автоматические сообщения, которые передаются приложением при активации триггера. Их можно использовать в SPE для автоматизации рабочих процессов, интеграции систем и реагирования на события в режиме реального времени.

Веб-перехватчики используются для вызова API-интерфейсы Cognitive Services Azure из приложения при каждом обновлении существующего файла или отправке нового файла.

Чтобы настроить веб-перехватчики с помощью текущего приложения SharePoint Embedded, необходимо:

  1. Создайте и зарегистрируйте конечную точку веб-перехватчика, чтобы получать уведомления при каждом изменении в контейнере. Это будет сделано с помощью REST API.
  2. Подключитесь к Graph и подпишитесь на изменения. Вы можете предоставить доступ к приложению в Интернете, запустив его локально или развернув в облаке. В этом руководстве вы будете использовать первый, используя ngrok, а затем подписавшись на изменения, выполнив вызов POST.
  3. Выполните любое требуемое действие, обрабатывая данные веб-перехватчика. Один из таких вариантов использования рассматривается в руководстве Включение обработки документов с помощью Azure Cognitive Services.

использование схемы веб-перехватчиков

Совет

Дополнительные сведения об API Microsoft Graph, используемых в этом руководстве, см. в статье Создание подписки.

Создание и регистрация веб-перехватчика

Откройте файл index.ts и добавьте конечную точку onReceiptAdded:

server.post('/api/onReceiptAdded', async (req, res, next) => {
  try {
    const response = await onReceiptAdded(req, res);
    res.send(200, response)
  } catch (error: any) {
    res.send(500, { message: `Error in API server: ${error.message}` });
  }
  next();
});

Также необходимо добавить подключаемый модуль средства синтаксического анализа запросов в верхней части этого файла, чтобы он запускал сервер:

server.use(restify.plugins.bodyParser(), restify.plugins.queryParser());

Создайте onReceiptAdded.ts и реализуйте метод onReceiptAdded для чтения validationToken и driveId. validationToken требуется, когда Microsoft Graph выполняет одноразовый вызов для проверки конечной точки при создании подписки веб-перехватчика. driveId — это идентификатор контейнера, для которого создается подписка.

require('isomorphic-fetch');

export const onReceiptAdded = async (req: Request, res: Response) => {

  const validationToken = req.query['validationToken'];
  if (validationToken) {
    res.send(200, validationToken, {"Content-Type":"text/plain"});
    return;
  }

  const driveId = req.query['driveId'];
  if (!driveId) {
    res.send(200, "Notification received without driveId, ignoring", {"Content-Type":"text/plain"});
    return;
  }

  console.log(`Received driveId: ${driveId}`);

  res.send(200, "");
  return;
}

Подключение к Graph и подписка на изменения

Следуйте документации , чтобы создать туннель для внутреннего сервера с помощью ngrok.

После запуска приложения выполните следующую команду в терминале:

ngrok http 3001

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

регистрация ngrok

После активного туннелирования можно подписаться на разностные изменения в контейнере, добавив URL-адрес веб-перехватчика. Для этого откройте Postman и выполните следующий POST запрос с соответствующим маркером доступа графа и notificationUrldriveId добавленным в качестве параметра запроса, чтобы получать уведомления об изменениях только в нужном контейнере.

POST  https://graph.microsoft.com/v1.0/subscriptions
{
  "changeType": "updated",
  "notificationUrl":"https://5ac2-2404-f801-8028-3-691a-87b2-d309-545b.ngrok-free.app/api/onReceiptAdded?driveId={{ContainerId}}",
  "resource": "drives/{{ContainerId}}/root",
  "expirationDateTime": "2024-01-20T03:58:34.088Z",
  "clientState": ""
}

Чтобы задать максимально возможное время окончания срока действия в 4230 минут с текущего времени, можно использовать следующий фрагмент кода, добавив его в раздел "Скрипт предварительного запроса". Он задаст переменную среды, которую можно использовать в тексте запроса.

var now = new Date()
var duration = 1000 * 60 * 4230; // max lifespan of driveItem subscription is 4230 minutes
var expiry = new Date(now.getTime() + duration);
var expiryDateTime = expiry.toISOString();

pm.environment.set("ContainerSubscriptionExpiry", expiryDateTime);

На этом этапе, если вы добавите или обновите любой файл в контейнере, вы получите уведомление в ранее добавленной конечной точке (/api/onReceiptAdded) и сообщение журнала в консоли: Received driveId: <containerId>