I am working with Google Ads Scripts. Based on my use case, I need to get the impressions, clicks, and other statistics about the products I have in my Google Ads account.

These product statistics will be analyzed in the script and based on certain criteria a Google Sheet document will be updated. The script goes like, retrieving all products (along with their statistics) from Google Ads account, see if the products impression and clicks meet a category (30 Impression, 1 click = Category "A", 20 Impressions, 0 Clicks = "Category B"), determines the product category, open Google Sheet hosted on Google Drive and updates the Category column in the Sheet based on product name or id.

Currently, I am facing an issue with retrieving Products and their statistics from Google Ads Account using Ads Script. I used the following code snippets to look for products but found no method or class that would help me achieve my desired results. I can only retrieve the productGroups, AdGroups, and Campaigns but none of them allow me to extract individual products.

function productGroup(){   var prodGroupIter = AdsApp.productGroups().get();   while (prodGroupIter.hasNext()){     Logger.log("prodGroup: ")     var prodGroup = prodGroupIter.next();     Logger.log(prodGroup.getValue());   } } function adGroup() {   var adGroupIterator = AdsApp.adGroups().get();   while (adGroupIterator.hasNext()) {     var adGroup = adGroupIterator.next();     Logger.log("adGroup: ")     Logger.log(adGroup.getName());   } } function campaign(){   var campIter = AdsApp.campaigns().get();   while (campIter.hasNext()){     var ads = campIter.next().ads().get();     while(ads.hasNext()){       Logger.log(ads.next().getStatsFor("LAST_30_DAYS"));     }   } } function sheet() {   var sheetURL = "https://docs.google.com/spreadsheets/d/1W0zhRrQa1P7qjQf0eXXw-QzdcPKAlDPiVBOcIVEfDgw/edit#gid=1428103052";   var sheet = SpreadsheetApp.openByUrl(sheetURL); } function main(){   campaign();   adGroup();   productGroup(); } 

I then reached out to the Ads Script support team and found out that it is not possible. But they suggested that I can use Shopping Performance Report, Product Partition Report, shopping_performance_view or product_group_view. They are part of AdWord API, and I do not know how to work with them.

So, I am looking for a Google Ads Script that would help me get a list of products (with detailed statistics) from Googe Ads and I am stuck with how to use the above-mentioned AdWord reporting endpoints to do it.

Here is the list of products in my Google Ads Account. They are 107 products along with their statistics.

Please, help with at least comments, ideas, and suggestions, I can write code but I am not sure what I am missing on

I want to implement "WhatsApp Business API Client" in my web application. I want to send document from my web application to customer using "WhatsApp Business API Client". I have flow the instruction from bellow link

https://developers.facebook.com/docs/whatsapp/on-premises/get-started 

I have created both Facebook and WhatsApp business account. I have also created app in Facebook and verify my business through Facebook. After that I have started to install "WhatsApp Business API Client" using docker. I have flow bellow link to install docker

https://developers.facebook.com/docs/whatsapp/on-premises/get-started/installation/dev-single-instance#step-6--login-and-authenticate 
  1. I have created "biz" using command from terminal

  2. set WhatsApp API version "2.31.5" 3 Run "docker-compose up -d" from terminal. But when I run the above command then face some error in terminal Error are given bellow

    C:\xampp\htdocs\whatapp>docker-compose up -d

    Traceback (most recent call last): File "docker\api\client.py", line 214, in _retrieve_server_version

    File "docker\api\daemon.py", line 181, in version

    File "docker\utils\decorators.py", line 46, in inner

    File "docker\api\client.py", line 237, in _get

    File "requests\sessions.py", line 543, in get

    File "requests\sessions.py", line 530, in request

    File "requests\sessions.py", line 643, in send

    File "requests\adapters.py", line 439, in send

    File "urllib3\connectionpool.py", line 670, in urlopen

    File "urllib3\connectionpool.py", line 392, in _make_request

    File "http\client.py", line 1255, in request

    File "http\client.py", line 1301, in _send_request

    File "http\client.py", line 1250, in endheaders

    File "http\client.py", line 1010, in _send_output

    File "http\client.py", line 950, in send

    File "docker\transport\npipeconn.py", line 32, in connect

    File "docker\transport\npipesocket.py", line 23, in wrapped

    File "docker\transport\npipesocket.py", line 72, in connect

    File "docker\transport\npipesocket.py", line 52, in connect

    pywintypes.error: (2, 'CreateFile', 'The system cannot find the file specified.')

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "docker-compose", line 3, in

    File "compose\cli\main.py", line 81, in main

    File "compose\cli\main.py", line 200, in perform_command

    File "compose\cli\command.py", line 60, in project_from_options

    File "compose\cli\command.py", line 152, in get_project

    File "compose\cli\docker_client.py", line 41, in get_client

    File "compose\cli\docker_client.py", line 170, in docker_client

    File "docker\api\client.py", line 197, in init

    File "docker\api\client.py", line 221, in _retrieve_server_version

    docker.errors.DockerException: Error while fetching server API version: (2, 'CreateFile', 'The system cannot find the file specified.')

    [6012] Failed to execute script docker-compose

Please help me how solve the issue. Thank You

I have deployed a multiconnect setup of the WhatsApp Business API client in Production Kubernetes enviroment, using the documentation for Minikube Developer Setup: Multiconnect on Minikube as referece.

But when doing the first login, in order to get the auth token, i get the following error on Postman:

{     "meta": {         "version": "v2.37.1",         "api_status": "stable"     },     "errors": [         {             "code": 1006,             "title": "Resource not found",             "details": "URL path not found"         }     ] } 

All the containers are running:

NAME                                           READY   STATUS      RESTARTS   AGE mysql-dev-6cdc47979f-6f6t5                     1/1     Running     0          2d23h whatsapp-coreapp-deployment-7bb4c6b8bc-qw946   1/1     Running     0          24m whatsapp-coreapp-deployment-7bb4c6b8bc-zkj5z   1/1     Running     0          24m whatsapp-master-deployment-84ffbdd48d-4rw8w    1/1     Running     0          24m whatsapp-master-deployment-84ffbdd48d-zwvlq    1/1     Running     0          24m whatsapp-web-deployment-74b99f4579-s44lp       1/1     Running     1          25m whatsapp-web-deployment-74b99f4579-sn55t       1/1     Running     0          25m 

And the given error happens on every call on Postman, not only when logging in (check health, get users, login, login admin, etc), all of them gives the same error:

"code": 1006, "title": "Resource not found", "details": "URL path not found" 

I've checked the container logs and i'ts returning 404 for every path called:

[2021-12-20 12:40:57.546610] app.INFO: [dd610cd0d21e431fafafc737c323565e] Response:  {"meta":{"version":"v2.37.1","api_status":"stable"},"errors":[{"code":1006,"title":"Resource not found","details":"URL path not found"}]} [] [2021-12-20 12:40:57.548893] app.INFO: [dd610cd0d21e431fafafc737c323565e] Request POST_//v1/users/login returns 404 in 530.65 ms [] [] [2021-12-20 12:45:18.556704] app.ERROR: [4018a09ea0084f9fa82f843905de2b00] Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET //v1/stats/app" (uncaught exception) at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php line 2 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"GET //v1/stats/app\" at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php:2, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0): No routes found for \"//v1/stats/app\". at /var/www/html/vendor/symfony/routing/Matcher/UrlMatcher.php:2)"} [] [2021-12-20 12:45:18.557154] app.INFO: [4018a09ea0084f9fa82f843905de2b00] Response:  {"meta":{"version":"v2.37.1","api_status":"stable"},"errors":[{"code":1006,"title":"Resource not found","details":"URL path not found"}]} [] [2021-12-20 12:45:18.557462] app.INFO: [4018a09ea0084f9fa82f843905de2b00] Request GET_//v1/stats/app returns 404 in 84.57 ms [] [] [2021-12-20 12:52:11.890507] app.ERROR: [5a84217237cc49e8bb9df953ac32c799] Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /auth/v1/login/" (uncaught exception) at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php line 2 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"GET /auth/v1/login/\" at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php:2, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0): No routes found for \"/auth/v1/login/\". at /var/www/html/vendor/symfony/routing/Matcher/UrlMatcher.php:2)"} [] [2021-12-20 12:52:11.890825] app.INFO: [5a84217237cc49e8bb9df953ac32c799] Response:  {"meta":{"version":"v2.37.1","api_status":"stable"},"errors":[{"code":1006,"title":"Resource not found","details":"URL path not found"}]} [] [2021-12-20 12:52:11.891043] app.INFO: [5a84217237cc49e8bb9df953ac32c799] Request GET_/auth/v1/login/ returns 404 in 84.07 ms [] [] [2021-12-20 12:52:12.088612] app.ERROR: [2b26c43f700640f190977bb797ec4448] Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /favicon.ico" (from "https://192.168.88.80:31599/auth/v1/login/") (uncaught exception) at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php line 2 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"GET /favicon.ico\" (from \"https://192.168.88.80:31599/auth/v1/login/\") at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php:2, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0): No routes found for \"/favicon.ico\". at /var/www/html/vendor/symfony/routing/Matcher/UrlMatcher.php:2)"} [] [2021-12-20 12:52:12.088863] app.INFO: [2b26c43f700640f190977bb797ec4448] Response:  {"meta":{"version":"v2.37.1","api_status":"stable"},"errors":[{"code":1006,"title":"Resource not found","details":"URL path not found"}]} [] [2021-12-20 12:52:12.089117] app.INFO: [2b26c43f700640f190977bb797ec4448] Request GET_/favicon.ico returns 404 in 82.22 ms [] [] 

Edit: Here's also the logs for the second replica of the webapp deployment

Web server started Starting web monitor loop ... ==> /var/log/lighttpd/error.log <== 2021-12-20 12:38:05: (server.c.1488) server started (lighttpd/1.4.55) tail: cannot open '/var/log/whatsapp/web.log' for reading: No such file or directory Setting up watches. Watches established. tail: '/var/log/whatsapp/web.log' has appeared;  following new file [2021-12-20 12:52:24.295383] app.ERROR: [7c73b15c0a6c488fb5ac7703a4b337ec] Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /teste/" (uncaught exception) at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php line 2 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"GET /teste/\" at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php:2, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0): No routes found for \"/teste/\". at /var/www/html/vendor/symfony/routing/Matcher/UrlMatcher.php:2)"} [] [2021-12-20 12:52:24.302930] app.INFO: [7c73b15c0a6c488fb5ac7703a4b337ec] Response:  {"meta":{"version":"v2.37.1","api_status":"stable"},"errors":[{"code":1006,"title":"Resource not found","details":"URL path not found"}]} [] [2021-12-20 12:52:24.307525] app.INFO: [7c73b15c0a6c488fb5ac7703a4b337ec] Request GET_/teste/ returns 404 in 201.72 ms [] [] [2021-12-21 11:04:28.642518] app.ERROR: [7181dfea9e7b4e51adb41fc41571253f] Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "POST //v1/users/login" (uncaught exception) at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php line 2 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"POST //v1/users/login\" at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php:2, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0): No routes found for \"//v1/users/login\". at /var/www/html/vendor/symfony/routing/Matcher/UrlMatcher.php:2)"} [] [2021-12-21 11:04:28.644938] app.INFO: [7181dfea9e7b4e51adb41fc41571253f] Response:  {"meta":{"version":"v2.37.1","api_status":"stable"},"errors":[{"code":1006,"title":"Resource not found","details":"URL path not found"}]} [] [2021-12-21 11:04:28.645501] app.INFO: [7181dfea9e7b4e51adb41fc41571253f] Request POST_//v1/users/login returns 404 in 87.15 ms [] [] [2021-12-21 11:05:29.180215] app.ERROR: [8ce236970e404d7b90d86ad53e774105] Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /auth/v1/login/" (uncaught exception) at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php line 2 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"GET /auth/v1/login/\" at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php:2, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0): No routes found for \"/auth/v1/login/\". at /var/www/html/vendor/symfony/routing/Matcher/UrlMatcher.php:2)"} [] [2021-12-21 11:05:29.180746] app.INFO: [8ce236970e404d7b90d86ad53e774105] Response:  {"meta":{"version":"v2.37.1","api_status":"stable"},"errors":[{"code":1006,"title":"Resource not found","details":"URL path not found"}]} [] [2021-12-21 11:05:29.181257] app.INFO: [8ce236970e404d7b90d86ad53e774105] Request GET_/auth/v1/login/ returns 404 in 26.28 ms [] [] [2021-12-21 11:05:29.332427] app.ERROR: [feb8c3253624422383421e253fc8ce73] Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /favicon.ico" (from "https://192.168.88.80:31599/auth/v1/login/") (uncaught exception) at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php line 2 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"GET /favicon.ico\" (from \"https://192.168.88.80:31599/auth/v1/login/\") at /var/www/html/vendor/symfony/http-kernel/EventListener/RouterListener.php:2, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0): No routes found for \"/favicon.ico\". at /var/www/html/vendor/symfony/routing/Matcher/UrlMatcher.php:2)"} [] [2021-12-21 11:05:29.332971] app.INFO: [feb8c3253624422383421e253fc8ce73] Response:  {"meta":{"version":"v2.37.1","api_status":"stable"},"errors":[{"code":1006,"title":"Resource not found","details":"URL path not found"}]} [] [2021-12-21 11:05:29.333465] app.INFO: [feb8c3253624422383421e253fc8ce73] Request GET_/favicon.ico returns 404 in 21.29 ms [] [] 

And here is the service that got created for webapp:

NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                               AGE whatsapp-web-service       NodePort       10.110.67.166   <none>           443:31599/TCP                         22h 

What could this be?

The app is crashing on launch after implementing google ads. I'm using an ios simulator. Ads are working fine on the other apps with the same code implementation but not on this app. Others apps are displaying test ads even with original Ad Units IDs. Interstitial Ads and Rewarded Ads are working fine only banner ads got the issue.

The error: To get test ads on this device, set: Objective-C GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @[ kGADSimulatorID ]; Swift GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [ kGADSimulatorID ]

Code: AdHelper Class

import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'dart:io'; class AdHelper{   //  Android Ad Units   static String _bannerAd_And = 'ca-app-pub-3884661730977437/3917788070';   static String _interAd_And = 'ca-app-pub-3884661730977437/1291624734';   static String _bannerAdTest_And = 'ca-app-pub-3940256099942544/6300978111';   static String _interAdTest_And = 'ca-app-pub-3940256099942544/1033173712';   //  iOS Ad Units   static String _bannerAd_iOS = 'ca-app-pub-3884661730977437/4131225272';   static String _interAd_iOS = 'ca-app-pub-3884661730977437/6845018522';   static String _bannerAdTest_iOS = 'ca-app-pub-3940256099942544/2934735716';   static String _interAdTest_iOS = 'ca-app-pub-3940256099942544/4411468910'; // FN returns Banner AD Unit Id   static String get bannerAdUnitId {     if (Platform.isAndroid) {       return _bannerAdTest_And;     } else if (Platform.isIOS) {       return _bannerAdTest_iOS;     } else {       throw UnsupportedError('Unsupported platform');     }   }   // FN returns Interstitial Ad Unit Id   static String get interAdUnitId {     if (Platform.isAndroid) {       return _interAdTest_And;     } else if (Platform.isIOS) {       return _interAdTest_iOS;     } else {       throw UnsupportedError('Unsupported platform');     }   } } 

AdController

import 'package:get/get.dart'; import 'package:google_mobile_ads/google_mobile_ads.dart'; import 'AdMob_Helper.dart'; class AdMobController extends GetxController{   ///------------------  Init   @override   void onInit() {     getBannerAd();     super.onInit();   }   ///------------------  Dispose   @override   void onClose() {     bannerAd.dispose();     super.onClose();   }   late BannerAd bannerAd;   bool isBannerLoaded = false;   //   void getBannerAd() {     bannerAd = BannerAd(       adUnitId: AdHelper.bannerAdUnitId,       size: AdSize.banner,       request: AdRequest(),       listener: BannerAdListener(         onAdLoaded: (_) {           isBannerLoaded = true;           update();         },         onAdFailedToLoad: (ad, error) {           // Releases an ad resource when it fails to load           ad.dispose();           print('Ad load failed (code=${error.code} message=${error.message})');         },       ),     );     // TODO: Load an ad     bannerAd.load();     update();   } }