Full AI WhatsApp Bot With N8n Ready To Use Workflow Included

June 2, 2025

Built a WhatsApp AI agent bot tailored for your business that can understand clients in text, audio, and images, and can reply in both text and audio

Following this tutorial, you will run a fully functional AI chatbot with multimodal capabilities on your computer or cloud server in minutes. This chatbot will behave like a virtual customer support assistant for a specific business purpose.

Table of Contents

  1. Introduction
  2. Configuration
  3. Customization
  4. Implementation of multimodal processing: Text
  5. Implementation of multimodal processing: Audio
  6. Implementation of multimodal processing: Images
  7. Integration with RAG (Retrieval-Augmented Generation)
  8. Deployment and Testing

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

Here is the video tutorial:

In this tutorial, you will learn how to create a ChatGPT-powered WhatsApp chatbot that can:

  • Process and respond to text messages with contextual and accurate responses
  • Transcribed and analysed voice messages to provide appropriate responses
  • Interpret and extract information from images to generate relevant responses
  • Handle combinations of these input types in a fluid conversation

We will use n8n, the Wassenger API for WhatsApp integration and the OpenAI API (ChatGPT) to equip our chatbot with advanced natural language processing and multimodal comprehension capabilities.

By the end of this tutorial, you will have a fully functional WhatsApp chatbot that can understand and respond to your customers’ queries regardless of the format in which they present them, significantly improving the user experience and the efficiency of your customer service.

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

Let’s start with the configuration of our multimodal WhatsApp chatbot.

Requirements

Important! 💬 If you’re new to using n8n with Wassenger, check out our setup guide to get started quickly.

Now, let’s create our new AI ChatBot! 🤖

Configuration

1. Create a new Workflow on n8n

Within the n8n interface, go to ‘Workflows’ and click ‘Create Workflow

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

2. Connect the Wassenger Trigger

Okay, now that we are inside our new Workflow, we are going to create the connection with Wassenger in the following way:

Click on ‘Add first step’

Then search for “Wassenger”. Remember, you need to install the Wassenger node first. If you haven’t done it yet, check out our related article here.

Then select the ‘On new inbound message received’ trigger

A window like this will open

Now, we need to add our Wassenger API credentials to connect n8n with Wassenger:

  1. Go to the API key page in Wassenger and copy the given API key or create one

2. And copy it into the n8n trigger

Then, select the connected WhatsApp number on Wassenger that you want to trigger the event and go back to your canvas

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

3. Connect your Wassenger Webhook to n8n

Now, for n8n to receive all message notifications when a contact texts you, we need to set up a new webhook

  1. Go to the Webhooks page here
  2. Create a new Webhook

Then

  1. Name your webhook
  2. Add the webhook URL that you will find in the first node we created in n8n

3. Select the number you want to transfer messages from

4. Select the event message:in:new

5. Save your new Webhook in Wassenger

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

4. Create a module that recognises text, audio and images

First, click on ‘Test step’ to receive inbound message data to our n8n workflow so we can manage it and work with it:

And after we send a message to our number connected to Wassenger and n8n, we will see something like this:

Now, we can start working with the retrieved data

Let’s create a ‘Switch’ module

Then we will create three possible scenarios and add a defined expression that will filter different kinds of messages

  1. Text: {{ $json.data.type }}
  2. Audio: {{ $json.data.media.type }}
  3. Image: {{ $json.data.media.type }}

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

5. Add the AI Agent

Now, we will add the AI Agent module that will help us to analyse all the inbound messages and generate the outbound response

Click on the bottom node from the ‘Switch’ module

The following window will open.

We will proceed with the following configuration:

  1. Source for Prompt (User Message): DEFINE BELOW
  2. Prompt (User Message): {{ $json.data.body }}

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

6. Connect the OpenAI chat Model

A window like this will open, and we will insert our OpenAI credentials

Create an OpenAI account and find your credentials here

Then add it to n8n

Now we will add a system message to indicate to the IA some extra instructions, like who the AI is talking to (Customer) and the precise time of the conversation:

You are a helpful assistant called Sam. Responde with a frendly and kinkd tone.

You are currently talking to {{ $('Switch').item.json.data.chat.name }}
The current time is {{ $now.toISO() }}

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

7. Add the memory node

The Memory node allows an AI model to remember and reference past interactions with it, and no credentials are required since it is stored within n8n

  1. Extend the ‘Context Window Length’ to 20
  2. Define the Session ID as Define below
  3. Change the field to Expression and add: {{ $(‘Switch’) }}

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

8. Create the Audio messages flow

Next, we’ll configure how our bot will analyse and process audio sent by our clients. Let’s get started!

As you can see in the image below, the process consists of 4 main steps:

  1. Download the audio from the Wassenger API
  2. Generate the download file from an HTTP call
  3. Transcribe the audio with the help of AI
  4. Transfer this transcribed text to our AI agent

Let’s download the audio from Wassenger.

Search for Wassenger > Chat Files Download File

Set the following configuration

  1. Add your Wassenger account
  2. Select Chat Files as Resource
  3. Operation: Get File Details
  4. WhatsApp Number: {{ $json.device.id }}
  5. File ID: {{ $json.data.media.id }}

Next, we will add an HTTP module to download the file

Configure the module as follows:

  1. Method: GET
  2. URL:
https://api.wassenger.com{{ $('Wassenger Trigger').item.json.data.media.links.download }}

3. Authentication: Generic Credential Type

4. Generic Auth Type: Header Auth

5. Header Auth: Header Auth account

Then, we will add:

  1. Name: Token
  2. Value: The API token from your Wassenger account. Get it here

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

Now, we will add the OpenAI module that transcribes the audio message

Search for: New module > Advanced AI > OpenAI > Transcribe a recording

Then, configure the module:

Finally, we will send the transcribed audio to our AI agent with the SET module

And configure it:

  1. Mode: Manual Mapping
  2. Fields to Set: data.body as String and {{ $json.text }}

Now we have our Audio transcription ready!

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

9. Analyse images

For our BOT to be able to analyse images, we will carry out a process similar to that of audio. Let’s see it

From the Switch module, add a new Wassenger Download Media module

Set the following configuration

  1. Add your Wassenger account
  2. Select Chat Files as Resource
  3. Operation: Get File Details
  4. WhatsApp Number: {{ $json.device.id }}
  5. File ID: {{ $json.data.media.id }}

Next, let’s download the image with the HTTP module as we did before with the audio

  1. Method: GET
  2. URL:
https://api.wassenger.com{{ $('Wassenger Trigger').item.json.data.media.links.download }}

3. Authentication: Generic Credential Type

4. Generic Auth Type: Header Auth

5. Header Auth: Header Auth account

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

Now, we will add the OpenAI module that transcribes the audio message

Search for: New module > Advanced AI > OpenAI > Analyze image

And configure the module as follows

  1. Credential to connect with: OpenAI account (Set the credentials mentioned earlier)
  2. Resource: Image
  3. Operation: Analyse Image
  4. Model: CHATGPT-4O-LATEST
  5. Text input: Analyse the image
  6. Input Type: Binary File(s)
  7. Input Data Field Name: data

Finally, add the module SET to pass all the information to our AI agent

And configure it

  1. Mode: Manual Mapping
  2. Fields to Set: data.body as String and

# The user provided the following image and text.

## Image Description:
{{ $json.content }}

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

Okay! We now have the three possible scenarios for our bot to analyze text, audio, and images

Now let’s configure how we want our bot to respond based on the type of message it receives

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

10. Create the Audio response

From our AI Agent module, let’s add a new module called IF. This will help us change our response depending on the type of message received.

For configuration, we’ll set a value of ‘true’ or ‘false’ depending on whether the received message is an audio message or an image/text. For audio messages, we’ll reply with a different audio message, but this setting can be modified to your liking. The possibilities are endless!

  1. Conditions: {{ $(‘Switch’).item.json.data.media.type }} is equal to audio

Now, we will create the audio response flow, which will start adding the OpenAI module to generate audio:

  1. Add nodes > Advanced AI > OpenAI > Generate Audio

And configure it like so:

  1. Credential to connect with: OpenAI account (Set the credentials mentioned earlier)
  2. Resource: Audio
  3. Operation: Generate Audio
  4. Model: TTS-1
  5. Text input (Expression): {{ $('AI Agent').item.json.output }}
  6. Voice: Select your preference

Now, for WhatsApp to understand our generated audio, we need to convert it from audio/mp3 to audio/mpeg with a simple script that we leave you below:

  1. Create a new Code module

2. Configure it with the following code using JavaScript

// Loop over input items and change the MIME type of binary data for (const item of $input.all()) { // Check if the item has binary data if (item.binary) { // Find the binary property name (assuming there's at least one) const binaryPropertyNames = Object.keys(item.binary);

for (const propName of binaryPropertyNames) {
// If the MIME type is 'audio/mp3', change it to 'audio/mpeg'
if (item.binary[propName].mimeType === "audio/mp3") {
item.binary[propName].mimeType = "audio/mpeg";
}
}
}
}
return $input.all();

Once we have our audio converted to the correct format to send it through Wassenger, we need to store it, either locally or in the cloud. In this case, we’ll do so using the cloud, which will provide us with a public URL so this file can be sent through the Wassenger API. For this tutorial, we chose Google Drive, but you can use any platform that suits you best.

  1. Create a new module for Google Drive (Upload File)

2. Set all the credentials for Google with n8n

If you don’t know how to connect your Google account to n8n, watch this tutorial

3. In the File Name, we will add the following expression: {{ $json.fineName }}

4. Set the Parent Drive as My Drive

5. For the Parent Folder, we need to create a new folder within our Drive

Then, make that folder public to be accessible from n8n. If you don’t make the folder public, the API call will return unauthorized access

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

Now, we will create a Send Multimedia Message module with Wassenger to send the newly generated audio that is extracted from the URL provided by Google Drive

Configure the module

  1. Define the number from which you want to send the message
  2. Set the target number retrieved from the webhook data we configured at the beginning: {{ $(‘Switch’).item.json.data.fromNumber }}
  3. Set the file URL: {{ $json.webContentLink }}

Finally, we’ll delete our file from Google Drive so we don’t store too many files in our cloud and run out of storage. This step is optional. If you want to store all the generated audio files, you can do so, but you’ll need to add a variable to name the audio files to avoid errors.

Set the file ID to be deleted: {{ $(‘Google Drive’).item.json.id }}

🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!

11. Create the Text response

Now that we have our Audio generator, we are going to create our text message generator which will be executed from the IF module and will be in the cases in which the user sends us images (The bot will analyze the message with the image and return a text) or when they send us simple text messages

  1. From the IF, add a new module

And configure the module

  1. Credentials to connect with: Wassenger Key account
  2. Resource: Send Message
  3. Operation: Send Text Message
  4. WhatsApp number: Your Connected Number
  5. Target: Phone
  6. Target: {{ $(Wassenger Trigger’).item.json.data.fromNumber }}`
  7. Message: {{ $json.output }}

And there we have it! Our bot is fully configured! Now we can test the workflow to verify that everything is working correctly.

Copy and paste the Workflow in your n8n instance

{
  "name": "WhatsApp Agent Pro",
  "nodes": [
    {
      "parameters": {
        "device": "device_id",
        "events": ["message:in:new"]
      },
      "type": "n8n-nodes-wassenger.wassengerTrigger",
      "typeVersion": 1,
      "position": [-360, -40],
      "id": "3e55c9a4-ca16-4fb5-8d6a-220b8ad01c9d",
      "name": "Wassenger Trigger",
      "webhookId": "cff9db69-73d2-40ee-85dd-a5881af15af8"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.data.body }}",
        "options": {
          "systemMessage": "=You are a helpful assistant called Sam.Responde with a frendly and kinkd tone.\n\nYou are currently talking to {{ $('Switch').item.json.data.chat.name }}\n\nThe current time is {{ $now.toISO() }}"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.8,
      "position": [1460, -20],
      "id": "41d0158b-ef6b-43ab-9c46-bad27fcac028",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [1400, 180],
      "id": "87e73037-c99f-42a6-86eb-e49015c0ad8c",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "id": "VUgmQ93jTxxO28VT",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.data.media.type }}",
                    "rightValue": "audio",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "94a56d29-cb88-4eb0-8d6b-07b1b91bfc3f"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Voice message"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "e14c0da3-f892-46c2-af90-c81c963a0df5",
                    "leftValue": "={{ $json.data.media.type }}",
                    "rightValue": "image",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Image message"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "6ce0d87f-bdfc-4c65-a3fb-8d86bb682c4e",
                    "leftValue": "={{ $json.data.type }}",
                    "rightValue": "text",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Text message"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [-120, -40],
      "id": "3961ea74-1586-444b-9796-44f911fc8790",
      "name": "Switch"
    },
    {
      "parameters": {
        "url": "=https://api.wassenger.com{{ $('Wassenger Trigger').item.json.data.media.links.download }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [380, -260],
      "id": "5f99188d-8cf2-46d4-a756-790e7f34c74e",
      "name": "Download Audio1",
      "credentials": {
        "httpHeaderAuth": {
          "id": "2hu1WYM3viRGU4Cl",
          "name": "Header Auth account"
        }
      }
    },
    {
      "parameters": {
        "resource": "audio",
        "operation": "transcribe",
        "binaryPropertyName": "=data",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [600, -260],
      "id": "3c455966-a4b7-4108-84e0-84e416ca6bdf",
      "name": "Audio transcription"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "4aeaa661-b3e8-4587-851e-dac366a37d0c",
              "name": "data.body",
              "value": "={{ $json.text }}",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": "=",
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [820, -260],
      "id": "8b274388-06dc-4edf-94eb-084f3abf2851",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "13087e41-3b49-4b44-96ed-5ff74651c371",
              "leftValue": "={{ $('Switch').item.json.data.media.type }}",
              "rightValue": "audio",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [1960, -20],
      "id": "1c8d7147-9e91-4e76-b96d-9d88b5220aae",
      "name": "If"
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Switch') }}"
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [1580, 180],
      "id": "ce935651-35bc-4caf-bdd2-a84ad509d3fc",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "resource": "audio",
        "input": "={{ $('AI Agent').item.json.output }}",
        "voice": "nova",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [2300, -120],
      "id": "2888d451-832d-44f6-93ca-b3a9342cb9ad",
      "name": "OpenAI",
      "credentials": {
        "openAiApi": {
          "id": "VUgmQ93jTxxO28VT",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// Loop over input items and change the MIME type of binary data\nfor(const item of $input.all()) {\n // Check if the item has binary data\n if(item.binary) {\n // Find the binary property name(assuming there's at least one)\n const binaryPropertyNames = Object.keys(item.binary);\n\n for(const propName of binaryPropertyNames) {\n // If the MIME type is 'audio/mp3', change it to 'audio/mpeg'\n if(item.binary[propName].mimeType === \"audio/mp3\") {\n item.binary[propName].mimeType = \"audio/mpeg\";\n }\n }\n }\n}\n\nreturn $input.all();"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [2520, -120],
      "id": "f2a0b34a-ec2e-4984-9c5c-8bc3ed823d95",
      "name": "Code"
    },
    {
      "parameters": {
        "name": "={{ $json.fileName }}",
        "driveId": {
          "__rl": true,
          "value": "My Drive",
          "mode": "list",
          "cachedResultName": "My Drive",
          "cachedResultUrl": "https://drive.google.com/drive/my-drive"
        },
        "folderId": {
          "__rl": true,
          "value": "1oRnl1orTkQeuEqWQVBBodn1rVrnfNj1f",
          "mode": "list",
          "cachedResultName": "n8n whatsapp audios",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1oRnl1orTkQeuEqWQVBBodn1rVrnfNj1f"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [2740, -120],
      "id": "bfff5e16-8ebd-40bd-91f9-b9ab8b572e54",
      "name": "Google Drive"
    },
    {
      "parameters": {
        "operation": "sendMedia",
        "device": "66d1a54430541033576feca2",
        "phone": "={{ $('Switch').item.json.data.fromNumber }}",
        "mediaUrl": "={{ $json.webContentLink }}",
        "options": {}
      },
      "type": "n8n-nodes-wassenger.wassenger",
      "typeVersion": 1,
      "position": [2960, -120],
      "id": "02d42a3e-c444-409f-a20b-2ad4c48b723e",
      "name": "Wassenger1",
      "credentials": {
        "wassengerApiKey": {
          "id": "abXQvG95yadKM7kO",
          "name": "Wassenger Key account 2"
        }
      }
    },
    {
      "parameters": {
        "operation": "deleteFile",
        "fileId": {
          "__rl": true,
          "value": "={{ $('Google Drive').item.json.id }}",
          "mode": "id"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [3180, -120],
      "id": "dcd55245-6092-4599-bea9-03e1faf06c6a",
      "name": "Google Drive1",
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "vVEFHe6nCY2cm5AC",
          "name": "Google Drive account"
        }
      }
    },
    {
      "parameters": {
        "resource": "chat-files",
        "operation": "downloadDeviceFileDetails",
        "device": "={{ $json.device.id }}",
        "fileId": "={{ $json.data.media.id }}"
      },
      "type": "n8n-nodes-wassenger.wassenger",
      "typeVersion": 1,
      "position": [360, 240],
      "id": "e86972a8-a14e-4718-a63d-ef3064888f10",
      "name": "Download image",
      "credentials": {
        "wassengerApiKey": {
          "id": "abXQvG95yadKM7kO",
          "name": "Wassenger Key account 2"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "dcf61ad5-2b19-411d-8e84-b9a4cd9bc74c",
              "name": "data.body",
              "value": "=# The user provided the following image and text.\n\n## Image Description:\n{{ $json.content }}\n\n## User Message:\n{{ $('Wassenger Trigger').item.json.data.media.caption }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [1020, 240],
      "id": "a2922296-70bd-4998-9da3-0d35f12ffd47",
      "name": "Image + Text Prompt"
    },
    {
      "parameters": {
        "resource": "image",
        "operation": "analyze",
        "modelId": {
          "__rl": true,
          "value": "chatgpt-4o-latest",
          "mode": "list",
          "cachedResultName": "CHATGPT-4O-LATEST"
        },
        "text": "Analyze the image",
        "inputType": "base64",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [800, 240],
      "id": "1a9206d8-960d-45e7-8144-c1b8b88fb762",
      "name": "Analyze Image",
      "credentials": {
        "openAiApi": {
          "id": "VUgmQ93jTxxO28VT",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "url": "=https://api.wassenger.com{{ $('Wassenger Trigger').item.json.data.media.links.download }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [580, 240],
      "id": "58f5b3c9-b599-4d05-98df-7fafbea560d8",
      "name": "Download API image",
      "credentials": {
        "httpHeaderAuth": {
          "id": "2hu1WYM3viRGU4Cl",
          "name": "Header Auth account"
        }
      }
    },
    {
      "parameters": {
        "device": "66d1a54430541033576feca2",
        "phone": "={{ $('Wassenger Trigger').item.json.data.fromNumber }}",
        "message": "={{ $json.output }}",
        "options": {}
      },
      "type": "n8n-nodes-wassenger.wassenger",
      "typeVersion": 1,
      "position": [2300, 120],
      "id": "f9b6dbd2-0494-441d-9993-2180259473c5",
      "name": "Send Text Message",
      "credentials": {
        "wassengerApiKey": {
          "id": "abXQvG95yadKM7kO",
          "name": "Wassenger Key account 2"
        }
      }
    }
  ],
  "pinData": {},
  "connections": {
    "Wassenger Trigger": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "Download Audio1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Download image",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Audio1": {
      "main": [
        [
          {
            "node": "Audio transcription",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Audio transcription": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Text Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive": {
      "main": [
        [
          {
            "node": "Wassenger1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wassenger1": {
      "main": [
        [
          {
            "node": "Google Drive1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download image": {
      "main": [
        [
          {
            "node": "Download API image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Image + Text Prompt": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Image": {
      "main": [
        [
          {
            "node": "Image + Text Prompt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download API image": {
      "main": [
        [
          {
            "node": "Analyze Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  }
}

Real Test 🤖

From the WhatsApp mobile app

Congratulations! You’ve just learned how to set up the WhatsApp Agent Pro workflow using n8n and Wassenger, transforming your WhatsApp into a smart, AI-powered assistant. Imagine the possibilities

If this tutorial helped you, why not share the love? Spread the word by sharing this article with your network. Let’s help more people discover the magic of WhatsApp automation with Wassenger. Together, we can revolutionise the way businesses connect with their customers.

Ready to get started? Visit Wassenger now and take the first step toward smarter, more efficient customer communication. Your audience is waiting!

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free