Posts tagged with whatsapp

I'm having trouble in creating a WhatsApp Message template, using the WhatsApp Business API.

I already can send messages, delete template, etc.

Creating the message template is the only API implementation where I'm having some dificulties. This is the code that I'm using to create a template:


public static function CreateTemplate($templateName, $templateCat, $language, $components){     $businessaccountid = .....;     $token = ....;     $ch = curl_init();     $url = 'https://graph.facebook.com/v16.0/' . $businessaccountid . '/message_templates?allow_category_change=true&name=' . $templateName . '&category=' . $templateCat . '&language=' . $language . '&components=' . $components;     //echo($url);     //curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);     //curl_setopt($ch, CURLOPT_VERBOSE , TRUE);     curl_setopt($ch, CURLOPT_URL, $url);     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     curl_setopt($ch, CURLOPT_POST, 1);     $headers = array();          $headers[] = 'Authorization: Bearer ' . $token ;     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);               $result = curl_exec($ch);          if ($result === false) {         $result = curl_error($ch) . " - ".curl_errno($ch);              }else{         $resultDecode = json_decode($result);         if($resultDecode!=null){             $result = $resultDecode;         }         return($result);     }     curl_close($ch);      } 


And this is the content of the $url variable that is being used:

"https://graph.facebook.com/v16.0/....../message_templates?allow_category_change=true&name=compra_terminada&category=MARKETING&language=pt_PT&components=[{"type":"BODY","text":"Obrigado por comprar na nossa loja. Assim que o objecto for expedido, irá receber no seu email o numero de rastreamento da encomenda."},{"type":"FOOTER","text":"A minha empresa"}]" 

And this is error that it's returning from curl_error and curl_errno:

HTTP/2 stream 0 was not closed cleanly: Unknown error code (err 5) - 92 

I've already tried to use CURL_HTTP_VERSION_1_1 but with no success. The curl_exec($ch) returns a generic html page from Facebook saying:

Sorry, something went wrong. We're working on it and we'll get it fixed as soon as we can. 

What do I need to change in my code to create a WhatsApp Template Message?

I have a working WhatsApp Business API Project however I am facing a weird problem the Webhook URL that I provided in the Facebook Developers app is getting triggered automatically even without a message being sent.

Here is how is the flow of my Application:

1- The user sends the Message on WhatsApp Number 2- A Firebase Function is triggered which generates the reply 3- The user gets the reply back

This is working fine, however, if the user sends the message, it sends back the reply.

However, I see that the user is still able to get the reply back even without sending the message on the WhatsApp Business API Number.

During the development, I made a mistake when I deployed the code which had an error and maybe that is why it is in a loop to send back the same message.

Right now I am solving this problem by deleting the Facebook Developers App and recreating it again and changing the App Id, and Token again since I don't see any option to stop this.

I am sending the audio file from a WhatsApp voice message (WhatsApp business cloud API) to google speech to text recognition. The very weird thing is that it works for voice messages sent from a windows whatsapp client. So having the official WhatsApp windows WhatsApp program send a voice message does work. But it does not work when sending the voice message from an android whatsapp app. So there seems to be different encoding for the voice audio file. Both have Opus Audio codec and both have sample rate of 48000 Hz. Both files can be played with VLC, but the android file is much smaller Any help or ideas on that?

Not sure if that info helps: The working audio file from windows whatsapp desktop has bits per sample 32. The not working one from android has no information about bits per sample. Also the not working file is much smaller.

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.