Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Настройка веб-перехватчиков с помощью 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>