Otrzymuj powiadomienia webhook dotyczące list odbiorców

Z tego przewodnika dowiesz się, jak używać webhooków do otrzymywania powiadomień asynchronicznych o stanie próśb o eksport list odbiorców. Ta funkcja jest dostępna tylko w wersji 1 alfa interfejsu Data API.

Powiadomienia webhooka to zaawansowana funkcja interfejsu API danych Google Analytics. Więcej informacji o funkcji eksportu list odbiorców znajdziesz w artykule Tworzenie pliku eksportu listy odbiorców.

Bez webhooków musisz okresowo sprawdzać interfejs API, aby określić, kiedy żądanie zostało wykonane.

Tworzenie przykładowej aplikacji webhook za pomocą Cloud Run

Przykładową aplikację webhook możesz utworzyć w Google Cloud, wykonując instrukcje z samouczka Szybki start: wdrażanie przykładowej usługi w Cloud Run.

Aby przykładowa usługa mogła odbierać żądania powiadomień webhooka POST, zastąp plik index.js z samouczka szybkiego startu tym kodem:

  import express from 'express';

  const app = express();
  app.use(express.json());

  app.post('/', (req, res) => {
    const channelToken = req.get('X-Goog-Channel-Token');
    const bodyJson = JSON.stringify(req.body);

    console.log(`channel token: ${channelToken}`);
    console.log(`notification body: ${bodyJson}`);

    res.sendStatus(200);
  });

  const port = parseInt(process.env.PORT) || 8080;
  app.listen(port, () => {
    console.log(`helloworld: listening on port ${port}`);
  });

W przypadku każdego przychodzącego powiadomienia webhook wysyłanego jako żądanie POST ten kod wypisuje treść JSON powiadomienia webhook i wartość tokenu kanału, a następnie zwraca kod HTTP 200, aby wskazać, że operacja się powiodła.

Po zakończeniu samouczka wdrażania Cloud Run i wdrożeniu aplikacji webhook za pomocą polecenia gcloud run deploy zapisz adres URL, pod którym została wdrożona usługa.

Adres URL usługi jest wyświetlany w konsoli, na przykład:

  Service URL: https://webhooks-test-abcdef-uc.a.run.app

Jest to identyfikator URI powiadomienia serwera, na który aplikacja nasłuchuje powiadomień webhook z Google Analytics.

Utwórz listę odbiorców i włącz powiadomienia webhook

Aby poprosić o powiadomienia webhook, podaj te wartości w obiekcie webhookNotification:

  • Identyfikator URI powiadomienia serwera zawierający adres internetowy, na który będą wysyłane powiadomienia webhook.

  • (Opcjonalnie) dowolny ciąg znaków channelToken, który chroni przed podszywanie się pod wiadomość. W nagłówku HTTP X-Goog-Channel-Token żądania POST webhooka podaj wartość channelToken.

Oto przykładowa prośba korzystająca z wezłów webhook:

Żądanie HTTP

POST https://analyticsdata.googleapis.com/v1alpha/properties/1234567/audienceLists
{
  "webhookNotification": {
    "uri": "https://webhooks-test-abcdef-uc.a.run.app",
    "channelToken": "123456"
  },
  "audience": "properties/1234567/audiences/12345",
  "dimensions": [
    {
      "dimensionName": "deviceId"
    }
  ]
}

Odpowiedź z metody audienceLists.create zawiera wartość webhookNotification, która potwierdza, że podany webhook odpowiedział w ciągu mniej niż 5 sekund.

Oto przykładowa odpowiedź:

Odpowiedź HTTP

{
  "response": {
    "@type": "type.googleapis.com/google.analytics.data.v1alpha.AudienceList",
    "name": "properties/1234567/audienceLists/123",
    "audience": "properties/1234567/audiences/12345",
    "audienceDisplayName": "Purchasers",
    "dimensions": [
      {
        "dimensionName": "deviceId"
      }
    ],
    "state": "ACTIVE",
    "beginCreatingTime": "2024-06-10T04:50:09.119726379Z",
    "creationQuotaTokensCharged": 51,
    "rowCount": 13956,
    "percentageCompleted": 100,
    "webhookNotification": {
      "uri": "https://webhooks-test-abcdef-uc.a.run.app",
      "channelToken": "123456"
    }
  }
}

Jeśli webhook nie odpowie lub podasz nieprawidłowy adres URL usługi, zamiast tego zwrócony zostanie komunikat o błędzie.

Oto przykładowy komunikat o błędzie:

{
  "error": {
    "code": 400,
    "message": "Expected response code of 200 from webhook URI but instead
    '404' was received.",
    "status": "INVALID_ARGUMENT"
  }
}

Przetwarzanie powiadomień webhook

Żądanie POST do usługi webhooka zawiera w treści zarówno wersję JSON zasobu operacji długotrwałej, jak i pole sentTimestamp. Wysłana sygnatura czasowa określa czas uniksowej strefy czasowej w mikrosekundach, w której żądanie zostało wysłane. Możesz użyć tego sygnatury czasowej, aby zidentyfikować powiadomienia odtworzone.

Podczas tworzenia listy odbiorców na adres webhook wysyłane jest 1 lub 2 żądania POST:

  1. Pierwsze żądanie POST jest wysyłane natychmiast i odzwierciedla stan nowo utworzonej listy odbiorców w stanie CREATING. Jeśli pierwsze żądanie do webhooka się nie powiedzie, operacja audienceLists.create zwróci błąd i szczegóły błędu webhooka.
  2. Drugie żądanie POST jest wysyłane po utworzeniu listy odbiorców. Tworzenie listy odbiorców jest zakończone, gdy osiągnie ona stan ACTIVE lub FAILED.

Oto przykład pierwszego powiadomienia o liście odbiorców w stanie CREATING:

  {
    "sentTimestamp":"1718261355692983",
    "name": "properties/1234567/audienceLists/123",
    "audience": "properties/1234567/audiences/12345",
    "audienceDisplayName":"Purchasers",
    "dimensions":[{"dimensionName":"deviceId"}],
    "state":"CREATING",
    "beginCreatingTime": "2024-06-10T04:50:09.119726379Z",
    "creationQuotaTokensCharged":0,
    "rowCount":0,
    "percentageCompleted":0,
    "webhookNotification":
      {
        "uri": "https://webhooks-test-abcdef-uc.a.run.app",
        "channelToken":"123456"
      }
  }

Oto przykład drugiego powiadomienia o liście odbiorców w stanie ACTIVE:

  {
    "sentTimestamp":"1718261355692983",
    "name": "properties/1234567/audienceLists/123",
    "audience": "properties/1234567/audiences/12345",
    "audienceDisplayName":"Purchasers",
    "dimensions":[{"dimensionName":"deviceId"}],
    "state":"ACTIVE",
    "beginCreatingTime": "2024-06-10T04:50:09.119726379Z",
    "creationQuotaTokensCharged":68,
    "rowCount":13956,
    "percentageCompleted":100,
    "webhookNotification":
      {
        "uri": "https://webhooks-test-abcdef-uc.a.run.app",
        "channelToken":"123456"
      }
  }

Drugie powiadomienie potwierdza, że lista odbiorców została utworzona i jest gotowa do wyszukiwania za pomocą metody audienceLists.query.

Aby przetestować webhooki po wywołaniu metody audienceLists.create, możesz przeglądać logi przykładowej aplikacji webhooka Cloud Run i sprawdzać treść JSON każdego powiadomienia wysłanego przez Google Analytics.