Reagieren auf Datei- und Containeränderungen mit Webhooks

Gilt für: Entwickler

Verwenden Sie Microsoft Graph-Webhooks, wenn Ihre App auf Dateiänderungen in einem SharePoint Embedded-Container reagieren muss. Ein Abonnement weist Microsoft Graph an, Ihren HTTPS-Endpunkt aufzurufen, wenn sich die abonnierte Ressource ändert.

Diagramm des SharePoint Embedded-Webhookflows: Die App erstellt ein Microsoft Graph-Abonnement für ein Containerlaufwerk, und Microsoft Graph sendet Änderungsbenachrichtigungen an den HTTPS-Endpunkt der App.

Erstellen eines Benachrichtigungsendpunkts

Machen Sie einen HTTPS-Endpunkt verfügbar, der Anforderungen akzeptiert POST . Verwenden Sie während der lokalen Entwicklung ngrok, um Anforderungen an einen lokalen Server zu tunneln.

ngrok http 3001

ngrok-Terminalausgabe mit der öffentlichen HTTPS-Weiterleitungs-URL, die zum lokalen Server tunnelt.

Wenn Microsoft Graph ein Abonnement erstellt, wird der Endpunkt durch Senden eines validationToken Abfrageparameters überprüft. Geben Sie dieses Token als Nur-Text mit HTTP 200 zurück.

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, "");
}

Registrieren Sie die Route in Ihrem API-Server, und aktivieren Sie die Analyse des Anforderungstexts und der Abfrage, bevor die Route Benachrichtigungen verarbeitet.

server.use(restify.plugins.bodyParser(), restify.plugins.queryParser());
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();
});

Abonnieren eines Containerlaufwerks

Erstellen Sie das Abonnement mit Microsoft Graph. In diesem Muster ist die SharePoint Embedded-Container-ID die Laufwerks-ID.

POST https://graph.microsoft.com/v1.0/subscriptions
Content-Type: application/json
{
  "changeType": "updated",
  "notificationUrl": "https://contoso.example/api/onReceiptAdded?driveId={container-id}",
  "resource": "drives/{container-id}/root",
  "expirationDateTime": "2026-06-25T03:58:34.088Z",
  "clientState": ""
}

Abonnieren Sie die Änderungen unter , drives/{container-id}/root und fügen Sie driveId={container-id} sie an die Benachrichtigungs-URL an, damit der Handler den Container identifizieren kann.

Berechnen des Ablaufs

Laufwerkelementabonnements haben eine maximale Lebensdauer von 4.230 Minuten. Verwenden Sie ein Skript vor der Anforderung oder einen Back-End-Scheduler, um die Ablaufzeit festzulegen, bevor Sie das Abonnement erstellen.

var now = new Date();
var duration = 1000 * 60 * 4230;
var expiry = new Date(now.getTime() + duration);
pm.environment.set("ContainerSubscriptionExpiry", expiry.toISOString());

Speichern Sie die Abonnement-ID, Die Ressource, die Container-ID und die Ablaufzeit. Verlängern Sie jedes Abonnement, bevor es abläuft.

Sicheres Verarbeiten von Benachrichtigungen

Schnelle Rückkehr aus der Webhookanforderung. Hintergrundarbeit in die Warteschlange stellen, den aktuellen Datei- oder Containerstatus mit Microsoft Graph abrufen und die Verarbeitung idempotent machen, da Benachrichtigungen dupliziert oder verzögert werden können.

Verwenden Sie Webhooks für Aktionen wie Dokumentverarbeitung, Indexaktualisierung, Benutzerbenachrichtigungen oder Workflowtrigger. Behalten Sie einen regelmäßigen Abstimmungsauftrag für verpasste Benachrichtigungen oder abgelaufene Abonnements bei.

Überprüfen des Flows

Erstellen Sie ein Abonnement, laden Oder aktualisieren Sie eine Datei im Container, und bestätigen Sie, dass Ihr Endpunkt die erwartete Laufwerks-ID protokolliert. Wenn die Überprüfung fehlschlägt, überprüfen Sie die öffentliche HTTPS-URL, den validationToken Antwortinhaltstyp und ob Ihr Server Abfrageparameter vor der Routenausführung analysiert.

Nächste Schritte