I'm trying to set up a webhook in my Google Cloud Function that can receive incoming messages from the WhatsApp Business API and forward them to platform called Front. However, when configuring the webhook on Meta for Whatsapp, I get the error The callback URL or verify token couldn't be validated. Please verify the provided information or try again later.

Here's the relevant code from my index.js file:

const axios = require('axios'); const FRONT_API_TOKEN = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzY29wZXMiOlsicHJvdmlzaW9uaW5nIiwicHJpdmF0ZToqIiwic2hhcmVkOioiXSwiaWF0IjoxNjc5NTE0MDU1LCJpc3MiOiJmcm9udCIsInN1YiI6ImI4MGUzZDExODQyMDUzZTk5OGE0IiwianRpIjoiYmM5NzNlNGQyZTA3YTAzMiJ9.7LBqJ5Kw3O65c4GttZuh4K2Zt7fkGIIq9yI96l06TJ8'; const FRONT_CUSTOM_CHANNEL_WEBHOOK_URL = 'https://api2.frontapp.com/channels/cha_ak6s0/incoming_messages'; const VERIFY_TOKEN = 'whatsappfronttoken'; const handleVerification = (req, res) => {   const queryToken = req.query.verify_token;   console.log('Verification request received:', req.query);   if (queryToken === VERIFY_TOKEN) {     res.send(req.query.challenge);   } else {     console.error('Invalid verify token:', queryToken);     res.sendStatus(403);   } }; exports.whatsappHandler = async (req, res) => {   if (req.query.verify_token) {     handleVerification(req, res);   } else {     const message = req.body;     if (!message.contacts || !message.messages) {       console.warn('Received message with missing contacts or messages property. Skipping message processing.');       res.sendStatus(200);       return;     }     // Extract relevant information from the WhatsApp message     const sender = message.contacts[0].profile.name || message.contacts[0].wa_id;     const text = message.messages[0].text.body;     // Format the message for Front's custom channel webhook URL     const formattedMessage = {       sender: {         name: sender,         handle: sender,       },       subject: 'WhatsApp Message',       body: text,       body_format: 'markdown',     };     // Forward the message to Front's custom channel webhook URL     try {       await axios.post(FRONT_CUSTOM_CHANNEL_WEBHOOK_URL, formattedMessage, {         headers: {           'Authorization': `Bearer ${FRONT_API_TOKEN}`,         },       });       res.sendStatus(200);     } catch (error) {       console.error(error);       res.sendStatus(500);     }   } }; 

What could be causing this issue, and how can I resolve it?

Any assistance or guidance would be greatly appreciated. Thank you!

I've confirmed that my WhatsApp Business API credentials and webhook URL are set up correctly. I've also verified that my Google Cloud Function is deployed and accessible.

I've checked the logs for my Google Cloud Function and when trying to verify the webhook, I see an error Received message with missing contacts or messages property. Skipping message processing. To bypass this, I tried to return a 200 status as I thought this could be caused by the fact that I was just verifying the webhook and not actually receiving an actual message from Meta.

I'm attempting to retrieve the total order amount on a Stripe charge. It's different for every order. I need this value for Google Ads Dynamic conversions. My Question: How to I retrieve/return the order value after a payment?

//Stripe Payment Backend app.post('/create-checkout-session', async (req, res) => { const session = await stripe.checkout.sessions.create({ line_items: [ { // Provide the exact Price ID (for example, pr_1234) of the product you want to sell price: 'price_mypriceID', quantity: 1, }, ], mode: 'payment', success_url: `${YOUR_DOMAIN}/dashboard?success=true`, cancel_url: `${YOUR_DOMAIN}/dashboard?canceled=true`, }); res.json({url: session.url})  }); 

This code runs on a successful payment, triggering a Google Ads Conversion.

if (location == "?success=true"){ window.gtag('config', 'AW-myaccount'); window.gtag('event', 'conversion', {'send_to': 'AW-myaccount', 'value': {needToReturnDynamicValueHere}, <--------- This  'currency': 'USD' }); }, [location])

I am trying to make a call to Google Ads API to access campaign data in python. I have completed the following steps:

  1. Created a web app and enabled Google-Ads API
  2. Saved JSON file that contains client id and secret information
  3. Generated refresh token
  4. Updated google-ads yaml file based on the client id, client secret, refresh token, developer token and customer id

However when I try this:

from google.ads.googleads.client import GoogleAdsClient client = GoogleAdsClient.load_from_storage("google-ads.yaml") 

I get the error:

RefreshError: ('unauthorized_client')

I have rechecked for any typos or white-spaces. I have the "Standard Access" on my email id: on Google-Ads account under the Access and Security section. Any help would be really great.

I have implemented react-native-google-mobile-ads.. all. thing are. working fine but i want but there is some issue.

  1. When ever a system dialogue is open. like Alert.alert() then an app open ads is appeared.
  2. The Second issue is that app open ads appears after the interstitial ad is closed.
  3. App Open ads are appears when ever a permission dialogue is opened.
  4. I want to hide screen content behind the app open ads.

So I'm using ruby client library. Version of gem 'google-ads-googleads' is 21.0.0 and Google Ads API version is 13. After initialising client with my credentials, I try to query one of the Google Ads Get Account Hierarchy endpoint, I get Error message:

<Google::Ads::GoogleAds::V13::Errors::GoogleAdsFailure: errors: [<Google::Ads::GoogleAds::V13::Errors::GoogleAdsError: error_code: <Google::Ads::GoogleAds::V13::Errors::ErrorCode: query_error: :UNEXPECTED_END_OF_QUERY>, message: "Error in query: unexpected end of query.">], request_id: "koqtfsaS6CTB0FxlCHucKg">

client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|       config.client_id = client_id       config.client_secret = client_secret       config.refresh_token = access_token       config.developer_token = developer_token end google_ads_service = client.service.google_ads query = <<~QUERY       SELECT         customer_client.client_customer,         customer_client.level,         customer_client.manager,         customer_client.descriptive_name,         customer_client.currency_code,         customer_client.time_zone,         customer_client.id       FROM customer_client       WHERE customer_client.level <= 1     QUERY begin    request = google_ads_service.search_stream do |search|         search.customer_id = '8148704352'         search.query = query         search.page_size = 100     end     request.each do |response|                           response.results.each do |row|            puts row        end     end rescue Google::Ads::GoogleAds::Errors::GoogleAdsError => e     puts "Error message: #{e.failure}" end 

I tried

query = <<~SQL   SELECT     customer_client.client_customer,     customer_client.level,     customer_client.manager,     customer_client.descriptive_name,     customer_client.currency_code,     customer_client.time_zone,     customer_client.id   FROM customer_client   WHERE customer_client.level <= 1 SQL 

I also tried enclosing query in single quotes like query_with_single_quotes = ''' + query + ''' but the error doesn't go away.