Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Настройка веб-перехватчиков с помощью SharePoint Embedded
Веб-перехватчики — это автоматические сообщения, которые передаются приложением при активации триггера. Их можно использовать в SPE для автоматизации рабочих процессов, интеграции систем и реагирования на события в режиме реального времени.
Веб-перехватчики используются для вызова API-интерфейсы Cognitive Services Azure из приложения при каждом обновлении существующего файла или отправке нового файла.
Чтобы настроить веб-перехватчики с помощью текущего приложения SharePoint Embedded, необходимо:
- Создайте и зарегистрируйте конечную точку веб-перехватчика, чтобы получать уведомления при каждом изменении в контейнере. Это будет сделано с помощью REST API.
- Подключитесь к Graph и подпишитесь на изменения. Вы можете предоставить доступ к приложению в Интернете, запустив его локально или развернув в облаке. В этом руководстве вы будете использовать первый, используя ngrok, а затем подписавшись на изменения, выполнив вызов POST.
- Выполните любое требуемое действие, обрабатывая данные веб-перехватчика. Один из таких вариантов использования рассматривается в руководстве Включение обработки документов с помощью 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
После успешного завершения вы должны получить следующие выходные данные. Общедоступная конечная точка приложения выделена красным прямоугольником:
После активного туннелирования можно подписаться на разностные изменения в контейнере, добавив 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>