In diesem Entwicklerhandbuch werden die Schritte beschrieben, die erforderlich sind, um über die Tag Manager API v2 auf Entitäten in einem Google Tag Manager-Konto zuzugreifen, sie zu erstellen und zu verwalten.
Einführung
In diesem Leitfaden werden die verschiedenen Schritte zum Aufrufen und Konfigurieren eines Google Tag Manager-Kontos beschrieben. Nach Abschluss des Labs haben Sie ein grundlegendes Verständnis für die folgenden Aufgaben:
- Erstellen Sie ein Tag Manager-Dienstobjekt.
- Nutzer authentifizieren und autorisieren
- Mit der Tag Manager API auf Ressourcen zugreifen und diese verwalten.
Hinweis
Bevor Sie mit dem Leitfaden beginnen, sollten Sie sich mit Google Tag Manager vertraut machen. Weitere Informationen finden Sie in der Google Tag Manager-Hilfe.
Testkonto verwenden
Wenn Sie die Tag Manager API zum Erstellen, Konfigurieren oder Löschen von Entitäten verwenden möchten, empfehlen wir, den Code mit einem Testkonto zu implementieren und zu überprüfen. So verhindern Sie, dass Sie versehentlich Änderungen an einem aktiven Konto vornehmen. Nachdem Sie den Code mit dem Testkonto getestet und bestätigt haben, dass er wie erwartet funktioniert, können Sie die Implementierung mit Ihren echten Konten verwenden.
Sprache auswählen
Wählen Sie die Programmiersprache aus, in der Sie die Beispiele sehen möchten:
Python
Python ist für alle Code-Snippets in diesem Leitfaden ausgewählt.
JavaScript
JavaScript ist für alle Code-Snippets in diesem Leitfaden ausgewählt.
Programmübersicht
Das Beispielprogramm in diesem Leitfaden ist eine Befehlszeilenanwendung. Wenn eine Konto-ID angegeben wird, sucht die Anwendung nach einem Container namens Greetings und erstellt darin ein Google-Tag, das bei Seitenaufrufen ausgelöst wird.
So entwickeln Sie diese Anwendung:
- Richten Sie Ihre Entwicklungsumgebung und Ihr Projekt in der Google API Console ein.
- Erstellen Sie ein Tag Manager-Dienstobjekt.
- Zugriff auf ein Tag Manager-Konto autorisieren
- Erstellen Sie ein Tag Manager-Dienstobjekt.
- Fragen Sie die API ab, verarbeiten Sie die Antwort und geben Sie die Ergebnisse aus.
- Rufen Sie ein initialisiertes Tag Manager-Dienstobjekt ab.
- Verwenden Sie das Tag Manager-Dienstobjekt, um die Tag Manager API für die folgenden Aufgaben abzufragen:
- Rufen Sie den Container Greetings für das authentifizierte Google Tag Manager-Konto ab.
- Erstellen Sie einen neuen Arbeitsbereich.
- Erstellen Sie das Google-Tag.
- Erstellen Sie den Trigger, um das Tag auszulösen.
- Aktualisieren Sie das Tag, damit es bei dem Trigger ausgelöst wird.
Entwicklungsumgebung und Projekt einrichten
Container Greetings erstellen
In diesem Leitfaden wird davon ausgegangen, dass Sie ein Google Tag Manager-Konto mit einem Container namens Greetings haben. Folgen Sie der Anleitung unter Einrichtung und Workflow (Web), um ein Konto und einen Container mit dem Namen Greetings zu erstellen.
Clientbibliothek installieren
Installieren und konfigurieren Sie zuerst eine Google APIs-Clientbibliothek.
Projekt in der Google API Console erstellen und konfigurieren
Damit Sie die Tag Manager API verwenden können, müssen Sie zuerst mithilfe des Einrichtungstools ein Projekt in der Google API Console erstellen und die API aktivieren.
In diesem Leitfaden wird der Authentifizierungsablauf Installierte Anwendung verwendet. Folgen Sie der Anleitung unten, um Ihre Projektanmeldedaten zu erstellen. Wählen Sie bei Aufforderung Installed Application für APPLICATION TYPE und Other für INSTALLED APPLICATION TYPE aus.
- Klicken Sie auf der Seite „Anmeldedaten“ auf Anmeldedaten erstellen > OAuth-Client-ID, um Ihre OAuth 2.0-Anmeldedaten zu erstellen, oder auf Anmeldedaten erstellen > Dienstkontoschlüssel, um ein Dienstkonto zu erstellen.
- Wenn Sie eine OAuth-Client-ID erstellt haben, wählen Sie Ihren Anwendungstyp aus.
- Füllen Sie das Formular aus und klicken Sie auf Erstellen.
Die Client-IDs und Dienstkontoschlüssel Ihrer Anwendung werden jetzt auf der Seite „Anmeldedaten“ aufgeführt. Klicken Sie auf eine Client-ID, um Details zu sehen. Die Parameter variieren je nach ID-Typ, können aber E-Mail-Adresse, Clientschlüssel, JavaScript-Quellen oder Weiterleitungs-URIs umfassen.
Laden Sie die Clientdetails herunter, indem Sie auf den Button JSON herunterladen klicken. Benennen Sie diese Datei in client_secrets.json um. Diese Datei wird später für die Authentifizierung verwendet.
Tag Manager-Dienstobjekt erstellen
Das Tag Manager-Objekt service wird für API-Anfragen verwendet.
So erstellen Sie ein Tag Manager-Dienstobjekt:
- Zugriff auf ein Google Tag Manager-Konto autorisieren.
- Instanziieren Sie das Tag Manager-Dienstobjekt.
Zugriff auf ein Google Tag Manager-Konto autorisieren
Wenn ein Nutzer eine Anwendung startet, die mit der Google Tag Manager API erstellt wurde, muss er der Anwendung Zugriff auf sein Google Tag Manager-Konto gewähren. Dieser Vorgang wird als Autorisierung bezeichnet. Die empfohlene Methode zur Autorisierung von Nutzern ist OAuth 2.0. Weitere Informationen finden Sie unter Tag Manager API Authorization.
Im folgenden Code werden die oben erstellten Projekt- und Clientdetails verwendet, um den Nutzer der Anwendung zu authentifizieren und ihn um Erlaubnis zu bitten, in seinem Namen auf Google Tag Manager zuzugreifen.
Die Anwendung versucht, den Standardbrowser zu öffnen und den Nutzer zu einer auf google.com gehosteten URL weiterzuleiten. Der Nutzer wird aufgefordert, sich anzumelden und der Anwendung Zugriff auf sein Tag Manager-Verwaltungskonto zu gewähren. Nachdem die Berechtigung erteilt wurde, versucht die Anwendung, einen Code aus dem Browserfenster zu lesen, und schließt dann das Fenster.
Hinweis: Wenn ein Fehler auftritt, wird der Nutzer stattdessen aufgefordert, seinen Autorisierungscode in der Befehlszeile einzugeben.
Python
"""Access and manage a Google Tag Manager account.""" import argparse import sys import httplib2 from apiclient.discovery import build from oauth2client import client from oauth2client import file from oauth2client import tools def GetService(api_name, api_version, scope, client_secrets_path): """Get a service that communicates to a Google API. Args: api_name: string The name of the api to connect to. api_version: string The api version to connect to. scope: A list of strings representing the auth scopes to authorize for the connection. client_secrets_path: string A path to a valid client secrets file. Returns: A service that is connected to the specified API. """ # Parse command-line arguments. parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, parents=[tools.argparser]) flags = parser.parse_args([]) # Set up a Flow object to be used if we need to authenticate. flow = client.flow_from_clientsecrets( client_secrets_path, scope=scope, message=tools.message_if_missing(client_secrets_path)) # Prepare credentials, and authorize HTTP object with them. # If the credentials don't exist or are invalid run through the native client # flow. The Storage object will ensure that if successful the good # credentials will get written back to a file. storage = file.Storage(api_name + '.dat') credentials = storage.get() if credentials is None or credentials.invalid: credentials = tools.run_flow(flow, storage, flags) http = credentials.authorize(http=httplib2.Http()) # Build the service object. service = build(api_name, api_version, http=http) return service def main(argv): # Define the auth scopes to request. scope = ['https://www.googleapis.com/auth/tagmanager.edit.containers'] # Authenticate and construct service. service = GetService('tagmanager', 'v2', scope, 'client_secrets.json') if __name__ == '__main__': main(sys.argv)
JavaScript
<html> <head> <script type="text/javascript"> // Your Client ID can be retrieved from your project in the Google // Developer Console, https://console.developers.google.com var CLIENT_ID = TODO; var SCOPES = [ 'https://www.googleapis.com/auth/tagmanager.manage.accounts', 'https://www.googleapis.com/auth/tagmanager.edit.containers', 'https://www.googleapis.com/auth/tagmanager.delete.containers', 'https://www.googleapis.com/auth/tagmanager.edit.containerversions', 'https://www.googleapis.com/auth/tagmanager.manage.users', 'https://www.googleapis.com/auth/tagmanager.publish' ]; // Parameter values used by the script ACCOUNT_PATH = TODO; // such as: 'accounts/555555'; CONTAINER_NAME = 'Greetings'; WORKSPACE_NAME = 'Example workspace'; /** * Check if current user has authorization for this application. * * @param {bool} immediate Whether login should use the "immediate mode", which * causes the security token to be refreshed behind the scenes with no UI. */ function checkAuth(immediate) { var authorizeCheckPromise = new Promise((resolve) => { gapi.auth.authorize( { client_id: CLIENT_ID, scope: SCOPES.join(' '), immediate: immediate }, resolve); }); authorizeCheckPromise .then(handleAuthResult) .then(loadTagManagerApi) .then(runTagManagerExample) .catch(() => { console.log('You must authorize any access to the api.'); }); } /** * Check if current user has authorization for this application. */ function checkAuth() { checkAuth(true); } /** * Initiate auth flow in response to user clicking authorize button. * * @param {Event} event Button click event. * @return {boolean} Returns false. */ function handleAuthClick(event) { checkAuth(); return false; } /** * Handle response from authorization server. * * @param {Object} authResult Authorization result. * @return {Promise} A promise to call resolve if authorize or redirect to a * login flow. */ function handleAuthResult(authResult) { return new Promise((resolve, reject) => { var authorizeDiv = document.getElementById('authorize-div'); if (authResult && !authResult.error) { // Hide auth UI, then load client library. authorizeDiv.style.display = 'none'; resolve(); } else { // Show auth UI, allowing the user to initiate authorization by // clicking authorize button. authorizeDiv.style.display = 'inline'; reject(); } }); } /** * Load Tag Manager API client library. * * @return {Promise} A promise the load the Tag Manager API library. */ function loadTagManagerApi() { return new Promise((resolve, reject) => { console.log('Load Tag Manager api'); gapi.client.load('tagmanager', 'v2', resolve); }); } /** * Interacts with the tagmanager api v2 to create a container, workspace, * trigger, and tag. * * @return {Promise} A promise to run the Tag Manager example. */ function runTagManagerExample() { return new Promise((resolve, reject) => { console.log('Running Tag Manager Example.'); resolve(); }); } /** * Logs an error message to the console. * * @param {string|Object} error The error to log to the console. */ function handleError(error) { console.log('Error when interacting with GTM API'); console.log(error); } /** * Wraps an API request into a promise. * * @param {Object} a request to the API. * @return {Promise} A promise to execute the API request. */ function requestPromise(request) { return new Promise((resolve, reject) => { request.execute((response) => { if (response.code) { reject(response); } resolve(response); }); }); } </script> <script src="https://apis.google.com/js/client.js?onload=checkAuth"> </script> </head> <body> <div id="authorize-div" style="display: none"> <span>Authorize access to Tag Manager API</span> <!--Button for the user to click to initiate auth sequence --> <button id="authorize-button" onclick="handleAuthClick(event)"> Authorize </button> </div> <pre id="output"></pre> </body> </html>
Tag Manager API abfragen
Mit dem Tag Manager-Dienstobjekt können Sie die Tag Manager API abfragen. Die folgenden Schritte sind erforderlich, um das Beispielprogramm zu implementieren:
- Greetings-Container abrufen
- Google-Tag erstellen
- Trigger zum Auslösen des Tags erstellen
- Tag so aktualisieren, dass es bei Auslösung des Triggers ausgelöst wird
1. Greetings-Container abrufen
Die folgende Funktion zeigt, wie ein Tag Manager-Dienstobjekt verwendet werden kann, um die Tag Manager API abzufragen, alle Container eines Kontos aufzulisten und den Container mit dem Namen Greetings abzurufen.
Python
def FindGreetingsContainer(service, account_path): """Find the greetings container. Args: service: the Tag Manager service object. account_path: the path of the Tag Manager account from which to retrieve the Greetings container. Returns: The greetings container if it exists, or None if it does not. """ # Query the Tag Manager API to list all containers for the given account. container_wrapper = service.accounts().containers().list( parent=account_path).execute() # Find and return the Greetings container if it exists. for container in container_wrapper['container']: if container['name'] == 'Greetings': return container return None
JavaScript
/** * Returns the greetings container if it exists. * * @param {string} accountPath The account which contains the Greetings * container. * @return {Promise} A promise to find the greetings container. */ function findContainer(accountPath, containerName) { console.log('Finding container in account:' + accountPath); var request = gapi.client.tagmanager.accounts.containers.list({ 'parent': accountPath }); return requestPromise(request) .then((response) => { var containers = response.container || []; var container = containers.find((container) => container.name === containerName); return container || Promise.reject('Unable to find ' + containerName +' container.'); }); }
Aktualisieren Sie als Nächstes den Hauptausführungszweig des Programms, um die Funktion findGreetingsContainer mit einem Tag Manager-accountId aufzurufen. Beispiel:
Python
def main(argv): # Get tag manager account ID from command line. assert len(argv) == 2 and 'usage: gtm-api-hello-world.py <account_id>' account_id = str(argv[1]) account_path = 'accounts/%s' % account_id # Define the auth scopes to request. scope = ['https://www.googleapis.com/auth/tagmanager.edit.containers'] # Authenticate and construct service. service = GetService('tagmanager', 'v2', scope, 'client_secrets.json') # Find the greetings container. container = FindGreetingsContainer(service, account_path) if __name__ == '__main__': main(sys.argv)
JavaScript
/** * Interacts with the tagmanager api v2 to create a container, workspace, * trigger, and tag. * * @return {Promise} A promise to run the tag manager example. */ function runTagManagerExample() { return new Promise((resolve, reject) => { console.log('Running Tag Manager Example.'); var trigger = null; var workspace = null; findContainer(ACCOUNT_PATH, CONTAINER_NAME) .catch(handleError); resolve(); }); }
2. Neuen Arbeitsbereich erstellen
Im folgenden Code-Snippet wird die Tag Manager API verwendet, um einen neuen Arbeitsbereich zu erstellen, mit dem wir unsere Änderungen an Triggern und Tags verwalten. Eine Liste der erforderlichen und optionalen Attribute, die beim Erstellen eines Arbeitsbereichs festgelegt werden können, finden Sie in der Referenz zur Methode „Workspace create“.
Python
def CreateWorkspace(service, container): """Creates a workspace named 'my workspace'. Args: service: the Tag Manager service object. container: the container to insert the workspace within. Returns: The created workspace. """ return service.accounts().containers().workspaces().create( parent=container['path'], body={ 'name': 'my workspace', }).execute()
JavaScript
/** * Creates a workspace in the Greetings container. * * @param {Object} container The container to create a new workspace. * @return {Promise} A promise to create a workspace. */ function createWorkspace(container) { console.log('Creating workspace in container:' + container.path); var request = gapi.client.tagmanager.accounts.containers.workspaces.create( { 'parent': container.path }, { name: WORKSPACE_NAME, description: 'my workspace created via api' }); return requestPromise(request); }
3. Google-Tag erstellen
Im folgenden Code-Snippet wird die Tag Manager API verwendet, um ein Google-Tag zu erstellen. In der Referenz zur Tag-Erstellungsmethode finden Sie eine Liste der erforderlichen und optionalen Eigenschaften, die beim Erstellen eines Tags festgelegt werden können. In der Referenz zum Tag-Wörterbuch finden Sie eine Liste der Eigenschaften für jeden Tag-Typ.
Python
def CreateHelloWorldTag(service, workspace, tag_id): """Create the Google Tag Hello World tag. Args: service: the Tag Manager service object. workspace: the workspace to create a tag within. tag_id: the Google tag ID or Google Analytics 4 measurement ID to use. Returns: The created tag. """ hello_world_tag = { 'name': 'Google Tag Hello World', 'type': 'googtag', 'parameter': [{ 'key': 'tagId', 'type': 'template', 'value': str(tag_id), }], } return service.accounts().containers().workspaces().tags().create( parent=workspace['path'], body=hello_world_tag).execute()
JavaScript
/** * Creates a Google tag. * * @param {Object} workspace The workspace to create the tag * @return {Promise} A promise to create a hello world tag. */ function createHelloWorldTag(workspace) { console.log('Creating hello world tag'); var helloWorldTag = { 'name': 'Google Tag Hello World', 'type': 'googtag', 'parameter': [{ 'key': 'tagId', 'type': 'template', 'value': 'G-XXXXXXXXXX' }], }; var request = gapi.client.tagmanager.accounts.containers.workspaces.tags.create( { 'parent': workspace.path }, helloWorldTag); return requestPromise(request); }
4. Trigger zum Auslösen des Tags erstellen
Nachdem ein Tag erstellt wurde, muss als Nächstes ein Trigger erstellt werden, der auf jeder Seite ausgelöst wird.
Der Trigger heißt Hello World Trigger und wird bei jedem Seitenaufruf ausgelöst. Beispiel:
Python
def CreateHelloWorldTrigger(service, workspace): """Create the Hello World Trigger. Args: service: the Tag Manager service object. workspace: the workspace to create the trigger within. Returns: The created trigger. """ hello_world_trigger = { 'name': 'Hello World Rule', 'type': 'PAGEVIEW' } return service.accounts().containers().workspaces().triggers().create( parent=workspace['path'], body=hello_world_trigger).execute()
JavaScript
/** * Creates a page view trigger. * * @param {Object} workspace The workspace to create the trigger in. * @return {Promise} A promise to create a page view trigger. */ function createHelloWorldTrigger(workspace) { console.log('Creating hello world trigger in workspace'); var helloWorldTrigger = { 'name': 'Hello World Trigger', 'type': 'PAGEVIEW' }; var request = gapi.client.tagmanager.accounts.containers.workspaces.triggers.create( { 'parent': workspace.path }, helloWorldTrigger); return requestPromise(request); }
5. Tag so aktualisieren, dass es bei Auslösung des Triggers ausgelöst wird
Nachdem Sie ein Tag und einen Trigger erstellt haben, müssen Sie sie miteinander verknüpfen. Fügen Sie dazu die triggerId der Liste der firingTriggerIds hinzu, die mit dem Tag verknüpft sind. Beispiel:
Python
def UpdateHelloWorldTagWithTrigger(service, tag, trigger): """Update a Tag with a Trigger. Args: service: the Tag Manager service object. tag: the tag to associate with the trigger. trigger: the trigger to associate with the tag. """ # Get the tag to update. tag = service.accounts().containers().workspaces().tags().get( path=tag['path']).execute() # Update the Firing Trigger for the Tag. tag['firingTriggerId'] = [trigger['triggerId']] # Update the Tag. response = service.accounts().containers().workspaces().tags().update( path=tag['path'], body=tag).execute()
JavaScript
/** * Updates a tag to fire on a particular trigger. * * @param {Object} tag The tag to update. * @param {Object} trigger The trigger which causes the tag to fire. * @return {Promise} A promise to update a tag to fire on a particular trigger. */ function updateHelloWorldTagWithTrigger(tag, trigger) { console.log('Update hello world tag with trigger'); tag['firingTriggerId'] = [trigger.triggerId]; var request = gapi.client.tagmanager.accounts.containers.workspaces.tags.update( { 'path': tag.path }, tag); return requestPromise(request); }
Aktualisieren Sie als Nächstes den Hauptausführungszweig des Programms, um die Erstellungs- und Aktualisierungsfunktionen aufzurufen. Beispiel:
Python
def main(argv): # Get tag manager account ID from command line. assert len(argv) == 2 and 'usage: gtm-api-hello-world.py <account_id>' account_id = str(argv[1]) account_path = 'accounts/%s' % account_id # Define the auth scopes to request. scope = ['https://www.googleapis.com/auth/tagmanager.edit.containers'] # Authenticate and construct service. service = GetService('tagmanager', 'v2', scope, 'client_secrets.json') # Find the greetings container. container = FindGreetingsContainer(service, account_path) # Create a new workspace. workspace = CreateWorkspace(service, container) # Create the hello world tag. tag = CreateHelloWorldTag( service, workspace, 'G-XXXXXXXXXX') # Create the hello world Trigger. trigger = CreateHelloWorldTrigger( service, workspace) # Update the hello world tag to fire based on the hello world tag. UpdateHelloWorldTagWithTrigger(service, tag, trigger) if __name__ == '__main__': main(sys.argv)
JavaScript
/** * Interacts with the tagmanager api v2 to create a container, workspace, * trigger, and tag. * * @return {Promise} A promise to run the tag manager example. */ function runTagManagerExample() { return new Promise((resolve, reject) => { console.log('Running Tag Manager Example.'); var trigger = null; var workspace = null; findContainer(ACCOUNT_PATH, CONTAINER_NAME) .then(createWorkspace) .then((createdWorkspace) => { workspace = createdWorkspace; return createHelloWorldTrigger(workspace); }) .then((createdTrigger) => { trigger = createdTrigger; return createHelloWorldTag(workspace); }) .then((createdTag) => { return updateHelloWorldTagWithTrigger(createdTag, trigger); }) .catch(handleError); resolve(); }); }
Vollständiges Beispiel
Maximieren Sie diesen Abschnitt, um das vollständige Codebeispiel für alle Schritte in der Anleitung zu sehen.
Python
"""Access and manage a Google Tag Manager account.""" import argparse import sys import httplib2 from apiclient.discovery import build from oauth2client import client from oauth2client import file from oauth2client import tools def GetService(api_name, api_version, scope, client_secrets_path): """Get a service that communicates to a Google API. Args: api_name: string The name of the api to connect to. api_version: string The api version to connect to. scope: A list of strings representing the auth scopes to authorize for the connection. client_secrets_path: string A path to a valid client secrets file. Returns: A service that is connected to the specified API. """ # Parse command-line arguments. parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, parents=[tools.argparser]) flags = parser.parse_args([]) # Set up a Flow object to be used if we need to authenticate. flow = client.flow_from_clientsecrets( client_secrets_path, scope=scope, message=tools.message_if_missing(client_secrets_path)) # Prepare credentials, and authorize HTTP object with them. # If the credentials don't exist or are invalid run through the native client # flow. The Storage object will ensure that if successful the good # credentials will get written back to a file. storage = file.Storage(api_name + '.dat') credentials = storage.get() if credentials is None or credentials.invalid: credentials = tools.run_flow(flow, storage, flags) http = credentials.authorize(http=httplib2.Http()) # Build the service object. service = build(api_name, api_version, http=http) return service def FindGreetingsContainer(service, account_path): """Find the greetings container. Args: service: the Tag Manager service object. account_path: the path of the Tag Manager account from which to retrieve the Greetings container. Returns: The greetings container if it exists, or None if it does not. """ # Query the Tag Manager API to list all containers for the given account. container_wrapper = service.accounts().containers().list( parent=account_path).execute() # Find and return the Greetings container if it exists. for container in container_wrapper['container']: if container['name'] == 'Greetings': return container return None def CreateWorkspace(service, container): """Creates a workspace named 'my workspace'. Args: service: the Tag Manager service object. container: the container to insert the workspace within. Returns: The created workspace. """ return service.accounts().containers().workspaces().create( parent=container['path'], body={ 'name': 'my workspace', }).execute() def CreateHelloWorldTag(service, workspace, tag_id): """Create the Google Tag Hello World tag. Args: service: the Tag Manager service object. workspace: the workspace to create a tag within. tag_id: the Google tag ID or Google Analytics 4 measurement ID to use. Returns: The created tag. """ hello_world_tag = { 'name': 'Google Tag Hello World', 'type': 'googtag', 'parameter': [{ 'key': 'tagId', 'type': 'template', 'value': str(tag_id), }], } return service.accounts().containers().workspaces().tags().create( parent=workspace['path'], body=hello_world_tag).execute() def CreateHelloWorldTrigger(service, workspace): """Create the Hello World Trigger. Args: service: the Tag Manager service object. workspace: the workspace to create the trigger within. Returns: The created trigger. """ hello_world_trigger = { 'name': 'Hello World Rule', 'type': 'PAGEVIEW' } return service.accounts().containers().workspaces().triggers().create( parent=workspace['path'], body=hello_world_trigger).execute() def UpdateHelloWorldTagWithTrigger(service, tag, trigger): """Update a Tag with a Trigger. Args: service: the Tag Manager service object. tag: the tag to associate with the trigger. trigger: the trigger to associate with the tag. """ # Get the tag to update. tag = service.accounts().containers().workspaces().tags().get( path=tag['path']).execute() # Update the Firing Trigger for the Tag. tag['firingTriggerId'] = [trigger['triggerId']] # Update the Tag. response = service.accounts().containers().workspaces().tags().update( path=tag['path'], body=tag).execute() def main(argv): # Get tag manager account ID from command line. assert len(argv) == 2 and 'usage: gtm-api-hello-world.py <account_id>' account_id = str(argv[1]) account_path = 'accounts/%s' % account_id # Define the auth scopes to request. scope = ['https://www.googleapis.com/auth/tagmanager.edit.containers'] # Authenticate and construct service. service = GetService('tagmanager', 'v2', scope, 'client_secrets.json') # Find the greetings container. container = FindGreetingsContainer(service, account_path) # Create a new workspace. workspace = CreateWorkspace(service, container) # Create the hello world tag. tag = CreateHelloWorldTag( service, workspace, 'G-XXXXXXXXXX') # Create the hello world Trigger. trigger = CreateHelloWorldTrigger( service, workspace) # Update the hello world tag to fire based on the hello world tag. UpdateHelloWorldTagWithTrigger(service, tag, trigger) if __name__ == '__main__': main(sys.argv)
JavaScript
<html> <head> <script type="text/javascript"> // Your Client ID can be retrieved from your project in the Google // Developer Console, https://console.developers.google.com var CLIENT_ID = TODO; var SCOPES = [ 'https://www.googleapis.com/auth/tagmanager.manage.accounts', 'https://www.googleapis.com/auth/tagmanager.edit.containers', 'https://www.googleapis.com/auth/tagmanager.delete.containers', 'https://www.googleapis.com/auth/tagmanager.edit.containerversions', 'https://www.googleapis.com/auth/tagmanager.manage.users', 'https://www.googleapis.com/auth/tagmanager.publish' ]; // Parameter values used by the script ACCOUNT_PATH = TODO; // such as: 'accounts/555555'; CONTAINER_NAME = 'Greetings'; WORKSPACE_NAME = 'Example workspace'; /** * Check if current user has authorization for this application. * * @param {bool} immediate Whether login should use the "immediate mode", * which causes the security token to be refreshed behind the scenes * with no UI. */ function checkAuth(immediate) { var authorizeCheckPromise = new Promise((resolve) => { gapi.auth.authorize( { client_id: CLIENT_ID, scope: SCOPES.join(' '), immediate: immediate }, resolve); }); authorizeCheckPromise .then(handleAuthResult) .then(loadTagManagerApi) .then(runTagManagerExample) .catch(() => { console.log('You must authorize any access to the api.'); }); } /** * Check if current user has authorization for this application. */ function checkAuth() { checkAuth(true); } /** * Initiate auth flow in response to user clicking authorize button. * * @param {Event} event Button click event. * @return {boolean} Returns false. */ function handleAuthClick(event) { checkAuth(); return false; } /** * Handle response from authorization server. * * @param {Object} authResult Authorization result. * @return {Promise} A promise to call resolve if authorize or redirect to a * login flow. */ function handleAuthResult(authResult) { return new Promise((resolve, reject) => { var authorizeDiv = document.getElementById('authorize-div'); if (authResult && !authResult.error) { // Hide auth UI, then load client library. authorizeDiv.style.display = 'none'; resolve(); } else { // Show auth UI, allowing the user to initiate authorization by // clicking authorize button. authorizeDiv.style.display = 'inline'; reject(); } }); } /** * Load Tag Manager API client library. * @return {Promise} A promise to load the tag manager api library. */ function loadTagManagerApi() { return new Promise((resolve, reject) => { console.log('Load Tag Manager api'); gapi.client.load('tagmanager', 'v2', resolve); }); } /** * Interacts with the tagmanager api v2 to create a container, * workspace, trigger, and tag. * * @return {Promise} A promise to run the tag manager example. */ function runTagManagerExample() { return new Promise((resolve, reject) => { console.log('Running Tag Manager Example.'); var trigger = null; var workspace = null; findContainer(ACCOUNT_PATH, CONTAINER_NAME) .then(createWorkspace) .then((createdWorkspace) => { workspace = createdWorkspace; return createHelloWorldTrigger(workspace); }) .then((createdTrigger) => { trigger = createdTrigger; return createHelloWorldTag(workspace); }) .then((createdTag) => { return updateHelloWorldTagWithTrigger(createdTag, trigger); }) .catch(handleError); resolve(); }); } /** * Returns the greetings container if it exists. * * @param {string} accountPath The account which contains the Greetings * container. * @param {string} containerName The name of the container to find. * @return {Promise} A promise to find the greetings container. */ function findContainer(accountPath, containerName) { console.log('Finding container in account:' + accountPath); var request = gapi.client.tagmanager.accounts.containers.list({ 'parent': accountPath }); return requestPromise(request) .then((response) => { var containers = response.container || []; var container = containers.find( (container) => container.name === containerName); return container || Promise.reject( 'Unable to find ' + containerName +' container.'); }); } /** * Creates a workspace in the Greetings container. * * @param {Object} container The container to create a new workspace. * @return {Promise} A promise to create a workspace. */ function createWorkspace(container) { console.log('Creating workspace in container:' + container.path); var request = gapi.client.tagmanager.accounts.containers.workspaces.create( { 'parent': container.path }, { name: WORKSPACE_NAME, description: 'my workspace created via api' }); return requestPromise(request); } /** * Creates a page view trigger. * * @param {Object} workspace The workspace to create the trigger in. * @return {Promise} A promise to create a page view trigger. */ function createHelloWorldTrigger(workspace) { console.log('Creating hello world trigger in workspace'); var helloWorldTrigger = { 'name': 'Hello World Trigger', 'type': 'PAGEVIEW' }; var request = gapi.client.tagmanager.accounts.containers.workspaces.triggers.create( { 'parent': workspace.path }, helloWorldTrigger); return requestPromise(request); } /** * Creates a Google tag. * * @param {Object} workspace The workspace to create the tag * @return {Promise} A promise to create a hello world tag. */ function createHelloWorldTag(workspace) { console.log('Creating hello world tag'); var helloWorldTag = { 'name': 'Google Tag Hello World', 'type': 'googtag', 'parameter': [{ 'key': 'tagId', 'type': 'template', 'value': 'G-XXXXXXXXXX' }], }; var request = gapi.client.tagmanager.accounts.containers.workspaces.tags.create( { 'parent': workspace.path }, helloWorldTag); return requestPromise(request); } /** * Updates a tag to fire on a particular trigger. * * @param {Object} tag The tag to update. * @param {Object} trigger The trigger which causes the tag to fire. * @return {Promise} A promise to update a tag to fire on a particular * trigger. */ function updateHelloWorldTagWithTrigger(tag, trigger) { console.log('Update hello world tag with trigger'); tag['firingTriggerId'] = [trigger.triggerId]; var request = gapi.client.tagmanager.accounts.containers.workspaces.tags.update( { 'path': tag.path }, tag); return requestPromise(request); } /** * Logs an error message to the console. * * @param {string|Object} error The error to log to the console. */ function handleError(error) { console.log('Error when interacting with GTM API'); console.log(error); } /** * Wraps an API request into a promise. * * @param {Object} request the API request. * @return {Promise} A promise to execute the api request. */ function requestPromise(request) { return new Promise((resolve, reject) => { request.execute((response) => { if (response.code) { reject(response); } resolve(response); }); }); } </script> <script src="https://apis.google.com/js/client.js?onload=checkAuth"> </script> </head> <body> <div id="authorize-div" style="display: none"> <span>Authorize access to Tag Manager API</span> <!--Button for the user to click to initiate auth sequence --> <button id="authorize-button" onclick="handleAuthClick(event)"> Authorize </button> </div> <pre id="output"></pre> </body> </html>
Nächste Schritte
Nachdem Sie sich mit der Funktionsweise der API vertraut gemacht haben, finden Sie hier einige zusätzliche Ressourcen:
- API-Referenz: Informationen zur API-Schnittstelle und zu unterstützten Vorgängen.
- Parameterreferenz: Hier erfahren Sie, wie Sie Parameter für Tags und Variablen festlegen.
- Eine Liste der unterstützten Tags finden Sie in der Tag-Wörterbuchreferenz.
- Eine Liste der Variablen, die konfiguriert werden können, finden Sie in der Referenz zum Variablenverzeichnis.