Beispiel #1
0
 /// <summary>Snippet for AddOfflineUserDataJobOperations</summary>
 /// <remarks>
 /// This snippet has been automatically generated for illustrative purposes only.
 /// It may require modifications to work in your environment.
 /// </remarks>
 public void AddOfflineUserDataJobOperations()
 {
     // Create client
     OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = OfflineUserDataJobServiceClient.Create();
     // Initialize request argument(s)
     string resourceName = "customers/[CUSTOMER_ID]/offlineUserDataJobs/[OFFLINE_USER_DATA_UPDATE_ID]";
     IEnumerable <OfflineUserDataJobOperation> operations = new OfflineUserDataJobOperation[]
     {
         new OfflineUserDataJobOperation(),
     };
     // Make the request
     AddOfflineUserDataJobOperationsResponse response = offlineUserDataJobServiceClient.AddOfflineUserDataJobOperations(resourceName, operations);
 }
        /// <summary>Snippet for GetOfflineUserDataJobAsync</summary>
        /// <remarks>
        /// This snippet has been automatically generated for illustrative purposes only.
        /// It may require modifications to work in your environment.
        /// </remarks>
        public async Task GetOfflineUserDataJobRequestObjectAsync()
        {
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            GetOfflineUserDataJobRequest request = new GetOfflineUserDataJobRequest
            {
                ResourceNameAsOfflineUserDataJobName = OfflineUserDataJobName.FromCustomerOfflineUserDataJob("[CUSTOMER]", "[OFFLINE_USER_DATA_JOB]"),
            };
            // Make the request
            OfflineUserDataJob response = await offlineUserDataJobServiceClient.GetOfflineUserDataJobAsync(request);
        }
 /// <summary>Snippet for CreateOfflineUserDataJob</summary>
 /// <remarks>
 /// This snippet has been automatically generated for illustrative purposes only.
 /// It may require modifications to work in your environment.
 /// </remarks>
 public void CreateOfflineUserDataJobRequestObject()
 {
     // Create client
     OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = OfflineUserDataJobServiceClient.Create();
     // Initialize request argument(s)
     CreateOfflineUserDataJobRequest request = new CreateOfflineUserDataJobRequest
     {
         CustomerId = "",
         Job        = new OfflineUserDataJob(),
     };
     // Make the request
     CreateOfflineUserDataJobResponse response = offlineUserDataJobServiceClient.CreateOfflineUserDataJob(request);
 }
 /// <summary>Snippet for AddOfflineUserDataJobOperations</summary>
 /// <remarks>
 /// This snippet has been automatically generated for illustrative purposes only.
 /// It may require modifications to work in your environment.
 /// </remarks>
 public void AddOfflineUserDataJobOperationsResourceNames()
 {
     // Create client
     OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = OfflineUserDataJobServiceClient.Create();
     // Initialize request argument(s)
     OfflineUserDataJobName resourceName = OfflineUserDataJobName.FromCustomerOfflineUserDataUpdate("[CUSTOMER_ID]", "[OFFLINE_USER_DATA_UPDATE_ID]");
     IEnumerable <OfflineUserDataJobOperation> operations = new OfflineUserDataJobOperation[]
     {
         new OfflineUserDataJobOperation(),
     };
     // Make the request
     AddOfflineUserDataJobOperationsResponse response = offlineUserDataJobServiceClient.AddOfflineUserDataJobOperations(resourceName, operations);
 }
        /// <summary>
        /// Runs the code example.
        /// </summary>
        /// <param name="client">The Google Ads client.</param>
        /// <param name="customerId">The Google Ads customer ID for which the call is made.</param>
        /// <param name="conversionActionId">The ID of a store sales conversion action.</param>
        /// <param name="offlineUserDataJobType">The type of user data in the job (first or third
        ///     party). If you have an official store sales partnership with Google, use
        ///     StoreSalesUploadThirdParty. Otherwise, use StoreSalesUploadFirstParty or
        ///     omit this parameter.</param>
        /// <param name="externalId">Optional (but recommended) external ID to identify the offline
        ///     user data job.</param>
        /// <param name="advertiserUploadDateTime">Date and time the advertiser uploaded data to the
        ///     partner. Only required if uploading third party data.</param>
        /// <param name="bridgeMapVersionId">Version of partner IDs to be used for uploads. Only
        ///     required if uploading third party data.</param>
        /// <param name="partnerId">ID of the third party partner. Only required if uploading third
        ///     party data.</param>
        public void Run(GoogleAdsClient client, long customerId, long conversionActionId,
                        OfflineUserDataJobType offlineUserDataJobType =
                        OfflineUserDataJobType.StoreSalesUploadFirstParty,
                        long?externalId           = null, string advertiserUploadDateTime = null,
                        string bridgeMapVersionId = null, long?partnerId                  = null)
        {
            // Get the OfflineUserDataJobServiceClient.
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
                client.GetService(Services.V4.OfflineUserDataJobService);

            // Ensure that a valid job type is provided.
            if (offlineUserDataJobType != OfflineUserDataJobType.StoreSalesUploadFirstParty &
                offlineUserDataJobType != OfflineUserDataJobType.StoreSalesUploadThirdParty)
            {
                Console.WriteLine("Invalid job type specified, defaulting to First Party.");
                offlineUserDataJobType = OfflineUserDataJobType.StoreSalesUploadFirstParty;
            }

            try
            {
                // Creates an offline user data job for uploading transactions.
                string offlineUserDataJobResourceName =
                    CreateOfflineUserDataJob(offlineUserDataJobServiceClient, customerId,
                                             offlineUserDataJobType, externalId, advertiserUploadDateTime,
                                             bridgeMapVersionId, partnerId);

                // Adds transactions to the job.
                AddTransactionsToOfflineUserDataJob(offlineUserDataJobServiceClient, customerId,
                                                    offlineUserDataJobResourceName, conversionActionId);

                // Issues an asynchronous request to run the offline user data job.
                offlineUserDataJobServiceClient.RunOfflineUserDataJobAsync(
                    offlineUserDataJobResourceName);

                Console.WriteLine("Sent request to asynchronously run offline user data job " +
                                  $"{offlineUserDataJobResourceName}.");

                // Offline user data jobs may take up to 24 hours to complete, so instead of waiting
                // for the job to complete, retrieves and displays the job status once and then
                // prints the query to use to check the job again later.
                CheckJobStatus(client, customerId, offlineUserDataJobResourceName);
            }
            catch (GoogleAdsException e)
            {
                Console.WriteLine("Failure:");
                Console.WriteLine($"Message: {e.Message}");
                Console.WriteLine($"Failure: {e.Failure}");
                Console.WriteLine($"Request ID: {e.RequestId}");
                throw;
            }
        }
Beispiel #6
0
        /// <summary>Snippet for GetOfflineUserDataJobAsync</summary>
        public async Task GetOfflineUserDataJobAsync()
        {
            // Snippet: GetOfflineUserDataJobAsync(string, CallSettings)
            // Additional: GetOfflineUserDataJobAsync(string, CancellationToken)
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            string resourceName = "customers/[CUSTOMER_ID]/offlineUserDataJobs/[OFFLINE_USER_DATA_UPDATE_ID]";
            // Make the request
            OfflineUserDataJob response = await offlineUserDataJobServiceClient.GetOfflineUserDataJobAsync(resourceName);

            // End snippet
        }
Beispiel #7
0
        /// <summary>Snippet for GetOfflineUserDataJobAsync</summary>
        public async Task GetOfflineUserDataJobResourceNamesAsync()
        {
            // Snippet: GetOfflineUserDataJobAsync(OfflineUserDataJobName, CallSettings)
            // Additional: GetOfflineUserDataJobAsync(OfflineUserDataJobName, CancellationToken)
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            OfflineUserDataJobName resourceName = OfflineUserDataJobName.FromCustomerOfflineUserDataUpdate("[CUSTOMER_ID]", "[OFFLINE_USER_DATA_UPDATE_ID]");
            // Make the request
            OfflineUserDataJob response = await offlineUserDataJobServiceClient.GetOfflineUserDataJobAsync(resourceName);

            // End snippet
        }
        /// <summary>Snippet for CreateOfflineUserDataJobAsync</summary>
        /// <remarks>
        /// This snippet has been automatically generated for illustrative purposes only.
        /// It may require modifications to work in your environment.
        /// </remarks>
        public async Task CreateOfflineUserDataJobRequestObjectAsync()
        {
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            CreateOfflineUserDataJobRequest request = new CreateOfflineUserDataJobRequest
            {
                CustomerId = "",
                Job        = new OfflineUserDataJob(),
            };
            // Make the request
            CreateOfflineUserDataJobResponse response = await offlineUserDataJobServiceClient.CreateOfflineUserDataJobAsync(request);
        }
Beispiel #9
0
 /// <summary>Snippet for GetOfflineUserDataJob</summary>
 public void GetOfflineUserDataJobRequestObject()
 {
     // Snippet: GetOfflineUserDataJob(GetOfflineUserDataJobRequest, CallSettings)
     // Create client
     OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = OfflineUserDataJobServiceClient.Create();
     // Initialize request argument(s)
     GetOfflineUserDataJobRequest request = new GetOfflineUserDataJobRequest
     {
         ResourceNameAsOfflineUserDataJobName = OfflineUserDataJobName.FromCustomerOfflineUserDataUpdate("[CUSTOMER_ID]", "[OFFLINE_USER_DATA_UPDATE_ID]"),
     };
     // Make the request
     OfflineUserDataJob response = offlineUserDataJobServiceClient.GetOfflineUserDataJob(request);
     // End snippet
 }
 /// <summary>Snippet for AddOfflineUserDataJobOperations</summary>
 public void AddOfflineUserDataJobOperationsResourceNames()
 {
     // Snippet: AddOfflineUserDataJobOperations(OfflineUserDataJobName, IEnumerable<OfflineUserDataJobOperation>, CallSettings)
     // Create client
     OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = OfflineUserDataJobServiceClient.Create();
     // Initialize request argument(s)
     OfflineUserDataJobName resourceName = OfflineUserDataJobName.FromCustomerOfflineUserDataJob("[CUSTOMER]", "[OFFLINE_USER_DATA_JOB]");
     IEnumerable <OfflineUserDataJobOperation> operations = new OfflineUserDataJobOperation[]
     {
         new OfflineUserDataJobOperation(),
     };
     // Make the request
     AddOfflineUserDataJobOperationsResponse response = offlineUserDataJobServiceClient.AddOfflineUserDataJobOperations(resourceName, operations);
     // End snippet
 }
Beispiel #11
0
        /// <summary>Snippet for CreateOfflineUserDataJobAsync</summary>
        public async Task CreateOfflineUserDataJobAsync()
        {
            // Snippet: CreateOfflineUserDataJobAsync(string, OfflineUserDataJob, CallSettings)
            // Additional: CreateOfflineUserDataJobAsync(string, OfflineUserDataJob, CancellationToken)
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            string             customerId = "";
            OfflineUserDataJob job        = new OfflineUserDataJob();
            // Make the request
            CreateOfflineUserDataJobResponse response = await offlineUserDataJobServiceClient.CreateOfflineUserDataJobAsync(customerId, job);

            // End snippet
        }
Beispiel #12
0
 /// <summary>Snippet for CreateOfflineUserDataJob</summary>
 public void CreateOfflineUserDataJobRequestObject()
 {
     // Snippet: CreateOfflineUserDataJob(CreateOfflineUserDataJobRequest, CallSettings)
     // Create client
     OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = OfflineUserDataJobServiceClient.Create();
     // Initialize request argument(s)
     CreateOfflineUserDataJobRequest request = new CreateOfflineUserDataJobRequest
     {
         CustomerId   = "",
         Job          = new OfflineUserDataJob(),
         ValidateOnly = false,
     };
     // Make the request
     CreateOfflineUserDataJobResponse response = offlineUserDataJobServiceClient.CreateOfflineUserDataJob(request);
     // End snippet
 }
 /// <summary>Snippet for AddOfflineUserDataJobOperations</summary>
 /// <remarks>
 /// This snippet has been automatically generated for illustrative purposes only.
 /// It may require modifications to work in your environment.
 /// </remarks>
 public void AddOfflineUserDataJobOperationsRequestObject()
 {
     // Create client
     OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = OfflineUserDataJobServiceClient.Create();
     // Initialize request argument(s)
     AddOfflineUserDataJobOperationsRequest request = new AddOfflineUserDataJobOperationsRequest
     {
         ResourceNameAsOfflineUserDataJobName = OfflineUserDataJobName.FromCustomerOfflineUserDataJob("[CUSTOMER]", "[OFFLINE_USER_DATA_JOB]"),
         EnablePartialFailure = false,
         Operations           =
         {
             new OfflineUserDataJobOperation(),
         },
     };
     // Make the request
     AddOfflineUserDataJobOperationsResponse response = offlineUserDataJobServiceClient.AddOfflineUserDataJobOperations(request);
 }
        /// <summary>Snippet for GetOfflineUserDataJobAsync</summary>
        public async Task GetOfflineUserDataJobRequestObjectAsync()
        {
            // Snippet: GetOfflineUserDataJobAsync(GetOfflineUserDataJobRequest, CallSettings)
            // Additional: GetOfflineUserDataJobAsync(GetOfflineUserDataJobRequest, CancellationToken)
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            GetOfflineUserDataJobRequest request = new GetOfflineUserDataJobRequest
            {
                ResourceNameAsOfflineUserDataJobName = OfflineUserDataJobName.FromCustomerOfflineUserDataJob("[CUSTOMER]", "[OFFLINE_USER_DATA_JOB]"),
            };
            // Make the request
            OfflineUserDataJob response = await offlineUserDataJobServiceClient.GetOfflineUserDataJobAsync(request);

            // End snippet
        }
        /// <summary>Snippet for AddOfflineUserDataJobOperationsAsync</summary>
        /// <remarks>
        /// This snippet has been automatically generated for illustrative purposes only.
        /// It may require modifications to work in your environment.
        /// </remarks>
        public async Task AddOfflineUserDataJobOperationsRequestObjectAsync()
        {
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            AddOfflineUserDataJobOperationsRequest request = new AddOfflineUserDataJobOperationsRequest
            {
                ResourceNameAsOfflineUserDataJobName = OfflineUserDataJobName.FromCustomerOfflineUserDataUpdate("[CUSTOMER_ID]", "[OFFLINE_USER_DATA_UPDATE_ID]"),
                Operations =
                {
                    new OfflineUserDataJobOperation(),
                },
                EnablePartialFailure = false,
            };
            // Make the request
            AddOfflineUserDataJobOperationsResponse response = await offlineUserDataJobServiceClient.AddOfflineUserDataJobOperationsAsync(request);
        }
Beispiel #16
0
        /// <summary>Snippet for AddOfflineUserDataJobOperationsAsync</summary>
        public async Task AddOfflineUserDataJobOperationsResourceNamesAsync()
        {
            // Snippet: AddOfflineUserDataJobOperationsAsync(OfflineUserDataJobName, IEnumerable<OfflineUserDataJobOperation>, CallSettings)
            // Additional: AddOfflineUserDataJobOperationsAsync(OfflineUserDataJobName, IEnumerable<OfflineUserDataJobOperation>, CancellationToken)
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            OfflineUserDataJobName resourceName = OfflineUserDataJobName.FromCustomerOfflineUserDataUpdate("[CUSTOMER_ID]", "[OFFLINE_USER_DATA_UPDATE_ID]");
            IEnumerable <OfflineUserDataJobOperation> operations = new OfflineUserDataJobOperation[]
            {
                new OfflineUserDataJobOperation(),
            };
            // Make the request
            AddOfflineUserDataJobOperationsResponse response = await offlineUserDataJobServiceClient.AddOfflineUserDataJobOperationsAsync(resourceName, operations);

            // End snippet
        }
        /// <summary>Snippet for CreateOfflineUserDataJobAsync</summary>
        public async Task CreateOfflineUserDataJobRequestObjectAsync()
        {
            // Snippet: CreateOfflineUserDataJobAsync(CreateOfflineUserDataJobRequest, CallSettings)
            // Additional: CreateOfflineUserDataJobAsync(CreateOfflineUserDataJobRequest, CancellationToken)
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            CreateOfflineUserDataJobRequest request = new CreateOfflineUserDataJobRequest
            {
                CustomerId = "",
                Job        = new OfflineUserDataJob(),
            };
            // Make the request
            CreateOfflineUserDataJobResponse response = await offlineUserDataJobServiceClient.CreateOfflineUserDataJobAsync(request);

            // End snippet
        }
        /// <summary>Snippet for AddOfflineUserDataJobOperationsAsync</summary>
        public async Task AddOfflineUserDataJobOperationsAsync()
        {
            // Snippet: AddOfflineUserDataJobOperationsAsync(string, IEnumerable<OfflineUserDataJobOperation>, CallSettings)
            // Additional: AddOfflineUserDataJobOperationsAsync(string, IEnumerable<OfflineUserDataJobOperation>, CancellationToken)
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            string resourceName = "customers/[CUSTOMER]/offlineUserDataJobs/[OFFLINE_USER_DATA_JOB]";
            IEnumerable <OfflineUserDataJobOperation> operations = new OfflineUserDataJobOperation[]
            {
                new OfflineUserDataJobOperation(),
            };
            // Make the request
            AddOfflineUserDataJobOperationsResponse response = await offlineUserDataJobServiceClient.AddOfflineUserDataJobOperationsAsync(resourceName, operations);

            // End snippet
        }
Beispiel #19
0
 /// <summary>Snippet for AddOfflineUserDataJobOperations</summary>
 public void AddOfflineUserDataJobOperationsRequestObject()
 {
     // Snippet: AddOfflineUserDataJobOperations(AddOfflineUserDataJobOperationsRequest, CallSettings)
     // Create client
     OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = OfflineUserDataJobServiceClient.Create();
     // Initialize request argument(s)
     AddOfflineUserDataJobOperationsRequest request = new AddOfflineUserDataJobOperationsRequest
     {
         ResourceNameAsOfflineUserDataJobName = OfflineUserDataJobName.FromCustomerOfflineUserDataUpdate("[CUSTOMER_ID]", "[OFFLINE_USER_DATA_UPDATE_ID]"),
         Operations =
         {
             new OfflineUserDataJobOperation(),
         },
         EnablePartialFailure = false,
     };
     // Make the request
     AddOfflineUserDataJobOperationsResponse response = offlineUserDataJobServiceClient.AddOfflineUserDataJobOperations(request);
     // End snippet
 }
        /// <summary>Snippet for AddOfflineUserDataJobOperationsAsync</summary>
        public async Task AddOfflineUserDataJobOperationsRequestObjectAsync()
        {
            // Snippet: AddOfflineUserDataJobOperationsAsync(AddOfflineUserDataJobOperationsRequest, CallSettings)
            // Additional: AddOfflineUserDataJobOperationsAsync(AddOfflineUserDataJobOperationsRequest, CancellationToken)
            // Create client
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient = await OfflineUserDataJobServiceClient.CreateAsync();

            // Initialize request argument(s)
            AddOfflineUserDataJobOperationsRequest request = new AddOfflineUserDataJobOperationsRequest
            {
                ResourceNameAsOfflineUserDataJobName = OfflineUserDataJobName.FromCustomerOfflineUserDataJob("[CUSTOMER]", "[OFFLINE_USER_DATA_JOB]"),
                EnablePartialFailure = false,
                Operations           =
                {
                    new OfflineUserDataJobOperation(),
                },
            };
            // Make the request
            AddOfflineUserDataJobOperationsResponse response = await offlineUserDataJobServiceClient.AddOfflineUserDataJobOperationsAsync(request);

            // End snippet
        }
Beispiel #21
0
        /// <summary>
        /// Creates and executes an asynchronous job to add users to the Customer Match user list.
        /// </summary>
        /// <param name="client">The Google Ads client.</param>
        /// <param name="customerId">The Google Ads customer ID for which calls are made.
        /// </param>
        /// <param name="userListResourceName">the resource name of the Customer Match user list
        /// to add users to</param>
        private static void AddUsersToCustomerMatchUserList(GoogleAdsClient client,
                                                            long customerId, string userListResourceName)
        {
            // Get the OfflineUserDataJobService.
            OfflineUserDataJobServiceClient service = client.GetService(
                Services.V4.OfflineUserDataJobService);

            // Creates a new offline user data job.
            OfflineUserDataJob offlineUserDataJob = new OfflineUserDataJob()
            {
                Type = OfflineUserDataJobType.CustomerMatchUserList,
                CustomerMatchUserListMetadata = new CustomerMatchUserListMetadata()
                {
                    UserList = userListResourceName
                }
            };

            // Issues a request to create the offline user data job.
            CreateOfflineUserDataJobResponse response1 = service.CreateOfflineUserDataJob(
                customerId.ToString(), offlineUserDataJob);
            string offlineUserDataJobResourceName = response1.ResourceName;

            Console.WriteLine($"Created an offline user data job with resource name: " +
                              $"'{offlineUserDataJobResourceName}'.");

            AddOfflineUserDataJobOperationsRequest request =
                new AddOfflineUserDataJobOperationsRequest()
            {
                ResourceName         = offlineUserDataJobResourceName,
                Operations           = { BuildOfflineUserDataJobOperations() },
                EnablePartialFailure = true,
            };
            // Issues a request to add the operations to the offline user data job.
            AddOfflineUserDataJobOperationsResponse response2 =
                service.AddOfflineUserDataJobOperations(request);

            // Prints the status message if any partial failure error is returned.
            // Note: The details of each partial failure error are not printed here,
            // you can refer to the example HandlePartialFailure.cs to learn more.
            if (response2.PartialFailureError == null)
            {
                // Extracts the partial failure from the response status.
                GoogleAdsFailure partialFailure = response2.PartialFailure;
                Console.WriteLine($"{partialFailure.Errors.Count} partial failure error(s) " +
                                  $"occurred");
            }
            Console.WriteLine("The operations are added to the offline user data job.");

            // Issues an asynchronous request to run the offline user data job for executing
            // all added operations.
            Operation <Empty, Empty> operationResponse =
                service.RunOfflineUserDataJob(offlineUserDataJobResourceName);

            Console.WriteLine("Asynchronous request to execute the added operations started.");;
            Console.WriteLine("Waiting until operation completes.");

            // PollUntilCompleted() implements a default back-off policy for retrying. You can
            // tweak the polling behaviour using a PollSettings as illustrated below.
            operationResponse.PollUntilCompleted(new PollSettings(
                                                     Expiration.FromTimeout(TimeSpan.FromSeconds(MAX_TOTAL_POLL_INTERVAL_SECONDS)),
                                                     TimeSpan.FromSeconds(POLL_FREQUENCY_SECONDS)));

            if (operationResponse.IsCompleted)
            {
                Console.WriteLine($"Offline user data job with resource name " +
                                  $"'{offlineUserDataJobResourceName}' has finished.");
            }
            else
            {
                Console.WriteLine($"Offline user data job with resource name" +
                                  $" '{offlineUserDataJobResourceName}' is pending after " +
                                  $"{MAX_TOTAL_POLL_INTERVAL_SECONDS} seconds.");
            }
        }
        /// <summary>
        /// Creates an offline user data job for uploading store sales transactions.
        /// </summary>
        /// <param name="offlineUserDataJobServiceClient">The offline user data job service
        ///     client.</param>
        /// <param name="customerId">The Google Ads customer ID for which the call is made.</param>
        /// <param name="offlineUserDataJobType">The type of user data in the job (first or third
        ///     party). If you have an official store sales partnership with Google, use
        ///     StoreSalesUploadThirdParty. Otherwise, use StoreSalesUploadFirstParty or
        ///     omit this parameter.</param>
        /// <param name="externalId">Optional (but recommended) external ID to identify the offline
        ///     user data job.</param>
        /// <param name="advertiserUploadDateTime">Date and time the advertiser uploaded data to the
        ///     partner. Only required if uploading third party data.</param>
        /// <param name="bridgeMapVersionId">Version of partner IDs to be used for uploads. Only
        ///     required if uploading third party data.</param>
        /// <param name="partnerId">ID of the third party partner. Only required if uploading third
        ///     party data.</param>
        /// <returns>The resource name of the created job.</returns>
        private string CreateOfflineUserDataJob(
            OfflineUserDataJobServiceClient offlineUserDataJobServiceClient, long customerId,
            OfflineUserDataJobType offlineUserDataJobType, long?externalId,
            string advertiserUploadDateTime, string bridgeMapVersionId, long?partnerId)
        {
            // TIP: If you are migrating from the AdWords API, please note that Google Ads API uses
            // the term "fraction" instead of "rate". For example, loyaltyRate in the AdWords API is
            // called loyaltyFraction in the Google Ads API.

            // Please refer to https://support.google.com/google-ads/answer/7506124 for additional
            // details.
            StoreSalesMetadata storeSalesMetadata = new StoreSalesMetadata()
            {
                // Sets the fraction of your overall sales that you (or the advertiser, in the third
                // party case) can associate with a customer (email, phone number, address, etc.) in
                // your database or loyalty program.
                // For example, set this to 0.7 if you have 100 transactions over 30 days, and out
                // of those 100 transactions, you can identify 70 by an email address or phone
                // number.
                LoyaltyFraction = 0.7,
                // Sets the fraction of sales you're uploading out of the overall sales that you (or
                // the advertiser, in the third party case) can associate with a customer. In most
                // cases, you will set this to 1.0.
                // Continuing the example above for loyalty fraction, a value of 1.0 here indicates
                // that you are uploading all 70 of the transactions that can be identified by an
                // email address or phone number.
                TransactionUploadFraction = 1.0
            };

            // Creates additional metadata required for uploading third party data.
            if (offlineUserDataJobType == OfflineUserDataJobType.StoreSalesUploadThirdParty)
            {
                StoreSalesThirdPartyMetadata storeSalesThirdPartyMetadata =
                    new StoreSalesThirdPartyMetadata()
                {
                    // The date/time must be in the format "yyyy-MM-dd hh:mm:ss".
                    AdvertiserUploadDateTime = advertiserUploadDateTime,

                    // Sets the fraction of transactions you received from the advertiser that
                    // have valid formatting and values. This captures any transactions the
                    // advertiser provided to you but which you are unable to upload to Google
                    // due to formatting errors or missing data.
                    // In most cases, you will set this to 1.0.
                    ValidTransactionFraction = 1.0,

                    // Sets the fraction of valid transactions (as defined above) you received
                    // from the advertiser that you (the third party) have matched to an
                    // external user ID on your side.
                    // In most cases, you will set this to 1.0.
                    PartnerMatchFraction = 1.0,

                    // Sets the fraction of transactions you (the third party) are uploading out
                    // of the transactions you received from the advertiser that meet both of
                    // the following criteria:
                    // 1. Are valid in terms of formatting and values. See valid transaction
                    // fraction above.
                    // 2. You matched to an external user ID on your side. See partner match
                    // fraction above.
                    // In most cases, you will set this to 1.0.
                    PartnerUploadFraction = 1.0,

                    // Sets the version of partner IDs to be used for uploads.
                    // Please speak with your Google representative to get the values to use for
                    // the bridge map version and partner IDs.
                    BridgeMapVersionId = bridgeMapVersionId,

                    // Sets the third party partner ID uploading the transactions.
                    PartnerId = partnerId
                };

                storeSalesMetadata.ThirdPartyMetadata = storeSalesThirdPartyMetadata;
            }

            // Creates a new offline user data job.
            OfflineUserDataJob offlineUserDataJob = new OfflineUserDataJob()
            {
                Type = offlineUserDataJobType,
                StoreSalesMetadata = storeSalesMetadata
            };

            if (externalId.HasValue)
            {
                offlineUserDataJob.ExternalId = externalId.Value;
            }

            // Issues a request to create the offline user data job.
            CreateOfflineUserDataJobResponse createOfflineUserDataJobResponse =
                offlineUserDataJobServiceClient.CreateOfflineUserDataJob(
                    customerId.ToString(), offlineUserDataJob);
            string offlineUserDataJobResourceName = createOfflineUserDataJobResponse.ResourceName;

            Console.WriteLine("Created an offline user data job with resource name: " +
                              $"{offlineUserDataJobResourceName}.");
            return(offlineUserDataJobResourceName);
        }
Beispiel #23
0
        /// <summary>
        /// Creates and executes an asynchronous job to add users to the Customer Match user list.
        /// </summary>
        /// <param name="client">The Google Ads client.</param>
        /// <param name="customerId">The Google Ads customer ID for which calls are made.
        /// </param>
        /// <param name="userListResourceName">the resource name of the Customer Match user list
        /// to add users to</param>
        /// <remarks>Resource of the offline user data job.</remarks>
        // [START add_customer_match_user_list]
        private static string AddUsersToCustomerMatchUserList(GoogleAdsClient client,
                                                              long customerId, string userListResourceName)
        {
            // Get the OfflineUserDataJobService.
            OfflineUserDataJobServiceClient service = client.GetService(
                Services.V10.OfflineUserDataJobService);

            // Creates a new offline user data job.
            OfflineUserDataJob offlineUserDataJob = new OfflineUserDataJob()
            {
                Type = OfflineUserDataJobType.CustomerMatchUserList,
                CustomerMatchUserListMetadata = new CustomerMatchUserListMetadata()
                {
                    UserList = userListResourceName
                }
            };

            // Issues a request to create the offline user data job.
            CreateOfflineUserDataJobResponse response1 = service.CreateOfflineUserDataJob(
                customerId.ToString(), offlineUserDataJob);
            string offlineUserDataJobResourceName = response1.ResourceName;

            Console.WriteLine($"Created an offline user data job with resource name: " +
                              $"'{offlineUserDataJobResourceName}'.");

            AddOfflineUserDataJobOperationsRequest request =
                new AddOfflineUserDataJobOperationsRequest()
            {
                ResourceName         = offlineUserDataJobResourceName,
                Operations           = { BuildOfflineUserDataJobOperations() },
                EnablePartialFailure = true,
            };
            // Issues a request to add the operations to the offline user data job.
            AddOfflineUserDataJobOperationsResponse response2 =
                service.AddOfflineUserDataJobOperations(request);

            // Prints the status message if any partial failure error is returned.
            // Note: The details of each partial failure error are not printed here,
            // you can refer to the example HandlePartialFailure.cs to learn more.
            if (response2.PartialFailureError != null)
            {
                // Extracts the partial failure from the response status.
                GoogleAdsFailure partialFailure = response2.PartialFailure;
                Console.WriteLine($"{partialFailure.Errors.Count} partial failure error(s) " +
                                  $"occurred");
            }
            Console.WriteLine("The operations are added to the offline user data job.");

            // Issues an asynchronous request to run the offline user data job for executing
            // all added operations.
            Operation <Empty, OfflineUserDataJobMetadata> operationResponse =
                service.RunOfflineUserDataJob(offlineUserDataJobResourceName);

            Console.WriteLine("Asynchronous request to execute the added operations started.");

            // Since offline user data jobs may take 24 hours or more to complete, it may not be
            // practical to do operationResponse.PollUntilCompleted() to wait for the results.
            // Instead, we save the offlineUserDataJobResourceName and use GoogleAdsService.Search
            // to check for the job status periodically.
            // In case you wish to follow the PollUntilCompleted or PollOnce approach, make sure
            // you keep both operationResponse and service variables alive until the polling
            // completes.

            return(offlineUserDataJobResourceName);
        }