Part 1: If you don't have time to read
This example of the bot implementation touches in detail on the most frequently used functionality. This will allow you to adapt the source code to your tasks and needs, or take it as a basis for creating any other integration. We have left comments near each function to make it easier for you to understand the code. In the source code of the bot you will find the following functionality:
- Respond to an unfamiliar command, this could be an instruction or your welcome message;
- Send regular message;
- Send image;
- Send file;
- Send video
- Send contact (vCard);
- Send product;
- Create new group, send an invitation and send message to the group;
- Receive and reading incoming messages;
For the bot to work, it is NOT REQUIRED that the phone is turned on or online. Connect the number and test the integration comfortably!
And if you need any help, just write to us in the support chat on any page of the site.
And if you need any help, just write to us in the support chat on any page of the site.
Part 2: WhatsApp Automation using Python
WhatsApp is not just a messenger for communication, but also a powerful tool for business. The ability to automate interaction with customers through chatbots is becoming increasingly relevant. Choosing Python for this task is due to its flexibility and powerful development tools, and Whapi.Cloud allows automating almost any WhatsApp function.
In this guide, we will cover:
- Interaction with WhatsApp API using Python;
- Integration with Whapi.Cloud and automating any functionality;
- Using Flask to process incoming messages and respond to them;
Preparing for development
Before starting the development of the chatbot, let's ensure we have everything needed.
- Python Installation. If you haven't already installed Python, visit the official Python website and follow the installation instructions. We recommend using Python 3.6 or newer.
- Token from Whapi.Cloud WhatsApp API. You'll need a Whapi.Cloud account to obtain a token that will allow your bot to interact with WhatsApp via API. After registering, you'll receive a free channel with a unique token. Currently, Whapi.Cloud is the most functional and stable provider offering affordable access to the WhatsApp API.
- Flask Installation. Flask is a lightweight web framework in Python that we'll use to set up our server and process WhatsApp webhooks. You can install Flask with the following command: pip install Flask
- Webhook Setup. To have your server receive incoming messages and events from WhatsApp, you'll need to set up a webhook. On Whapi.Cloud, you can specify multiple hooks (your server URLs) for different events, where notifications will be sent. We'll touch on this topic in more detail later in the article.
- Working Environment. It's recommended to use a virtual environment (e.g., virtualenv) to isolate dependencies and ensure your project's portability.
Integration with WhatsApp API via Whapi.Cloud in Python
Register with the service. This step is simple and doesn't require credit card details. After registration, you'll have 5 days of full access to the API, which will be sufficient to test all methods and functions. If this isn't enough, contact the service support through the live chat widget, and they will remove limitations for comfortable testing.
The next step will be connecting your WhatsApp number. Don't worry, you can disconnect at any time, but it's necessary for automation testing. To connect, go to your personal account on the Default Channel page, which is already created for you. On the first step, you'll find a QR code with instructions. Open your WhatsApp on your mobile device, go to Settings -> Linked Devices -> Connect Device -> Scan QR Code.




During the connection, at steps two and three, you will have the opportunity to set up your channel. Name the channel for convenience (by the way, our API will immediately determine whether you use the standard or business version of the app with extended functions). Then, the webhook settings and other parameters of your choice will be available. However, these actions can be done later and you can skip this step.
After activating the channel in the limits information section, find your API token. This token is critically important for authentication when accessing the API. Typically, it's passed in the request headers as a Bearer Token or as a parameter, depending on how you access the API.
The Whapi.Cloud API provides a wide range of methods to interact with WhatsApp, truly allowing you to automate the messenger's key capabilities and functions. On the channel page, you can study and try out all the available methods. For convenience in development, you are provided with a specialized hub for developers, where each function comes with code examples and the ability to test on-site, displaying results and server responses.
This greatly simplifies and speeds up the integration process, you'll love it! One of the advantages of Whapi.Cloud is its simplicity and speed of connection, allowing you to start interacting with WhatsApp in just a few minutes.
After activating the channel in the limits information section, find your API token. This token is critically important for authentication when accessing the API. Typically, it's passed in the request headers as a Bearer Token or as a parameter, depending on how you access the API.
The Whapi.Cloud API provides a wide range of methods to interact with WhatsApp, truly allowing you to automate the messenger's key capabilities and functions. On the channel page, you can study and try out all the available methods. For convenience in development, you are provided with a specialized hub for developers, where each function comes with code examples and the ability to test on-site, displaying results and server responses.
This greatly simplifies and speeds up the integration process, you'll love it! One of the advantages of Whapi.Cloud is its simplicity and speed of connection, allowing you to start interacting with WhatsApp in just a few minutes.
What is Webhook and how do I set it up?
Your WhatsApp bot and our API gateway must communicate so that when something changes in one system, the other system is aware of it. For instance, tracking message status changes like "sent", "delivered", and "read".
This is where the webhook comes in! A properly configured webhook allows your server to be instantly informed about certain events. Depending on your settings, you can receive notifications about messages, their status, channel status, phone status, and even missed calls. One of the advantages of Whapi.Cloud is the ability to flexibly and automatically set up and manage hooks according to your desires, and many additional settings will make your job easier.
We've explored all the nuances of working with webhooks in more detail in our knowledge base: View article about webhooks


Go to the settings of your channel (button in the upper right corner). The first block is the webhooks section. Specify the URL of your server where notifications will be sent. Add other hooks if necessary. Upon receiving a message on the configured URL, a POST request with the message data will be sent, allowing your bot to process incoming messages and respond accordingly. We will learn how to process these data later on.
Creating the basis of Python WhatsApp Bot
In this chapter, we will look at how to use the Whapi.Cloud API using Python. This will allow us to send, receive, and manage messages in WhatsApp.
Send WhatsApp message using Python
Let's start with something basic – sending a text message.
import requests
url = "https://gate.whapi.cloud/messages/text?token=bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX"
payload = {
"typing_time": 0,
"to": "1234567891@s.whatsapp.net",
"body": "Hello, world!"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
Receiving Messages via Flask Webhook
To receive messages, you need to set up a Flask route that will act as a webhook endpoint. Don't forget to update the webhook URL on Whapi.Cloud with the end URL you created. In this example, it would be http://your_domain_or_ip/webhook.
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook', methods=['POST'])
def whatsapp_webhook():
incoming_message = request.json
# Process the message here
return jsonify(status='success'), 200
Webhooks can be set up both via the interface in the user dashboard and programmatically through the API. Below is a Python snippet for setup via the API:
import requests
url = "https://gate.whapi.cloud/settings?token=YOUR_TOKEN"
payload = {
"callback_backoff_delay_ms": 3000,
"max_callback_backoff_delay_ms": 900000,
"callback_persist": True,
"pass_through": True,
"sent_status": False,
"webhooks": [
{
"events": [
{
"type": "message",
"method": "post"
},
{
"type": "ack",
"method": "post"
}
],
"mode": "body",
"url": "Webhook URL, http or https"
}
]
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)
WhatsApp bot source code in Python
Below is a simple Flask application that uses the provided Python script to send messages through the Whapi.Cloud API. It listens to incoming messages and sends appropriate responses based on the content. Create an .env file with the pre-saved configuration settings.
TOKEN=Your_token # API token from your channel
API_URL=https://gate.whapi.cloud # API endpoint URL
BOT_URL=https://your_bot_url_here/messages # Webhook Link to your server. At ( {server link}/messages ), when POST is requested, processing occurs
PRODUCT_ID=6559353560856703 # The ID of the product we will send for the example. Create a product in your WhatsApp and find out the product ID: https://whapi.readme.io/reference/getproducts
GROUP_ID=120363177599599603@g.us # The ID of the group to which we will send the message. Use to find out the ID: https://whapi.readme.io/reference/getgroups
PORT=80 # example, 80 or 443
Let me remind you that the entire source code of this project can be downloaded from GitHub: https://github.com/Whapi-Cloud/python-whatsapp-chatbot
from flask import Flask, request, jsonify
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
import os
from dotenv import load_dotenv
load_dotenv() # Load environment variables from a .env file
app = Flask(__name__)
COMMANDS = {
'TEXT': 'Simple text message',
'IMAGE': 'Send image',
'DOCUMENT': 'Send document',
'VIDEO': 'Send video',
'CONTACT': 'Send contact',
'PRODUCT': 'Send product',
'GROUP_CREATE': 'Create group',
'GROUP_TEXT': 'Simple text message for the group',
'GROUPS_IDS': "Get the id's of your three groups"
}
FILES = {
'IMAGE': './files/file_example_JPG_100kB.jpg',
'DOCUMENT': './files/file-example_PDF_500_kB.pdf',
'VIDEO': './files/file_example_MP4_480_1_5MG.mp4',
'VCARD': './files/sample-vcard.txt'
}
def send_whapi_request(endpoint, params=None, method='POST'):
headers = {
'Authorization': f"Bearer {os.getenv('TOKEN')}"
}
url = f"{os.getenv('API_URL')}/{endpoint}"
if params:
if 'media' in params:
details = params.pop('media').split(';')
with open(details[0], 'rb') as file:
m = MultipartEncoder(fields={**params, 'media': (details[0], file, details[1])})
headers['Content-Type'] = m.content_type
response = requests.request(method, url, data=m, headers=headers)
elif method == 'GET':
response = requests.get(url, params=params, headers=headers)
else:
headers['Content-Type'] = 'application/json'
response = requests.request(method, url, json=params, headers=headers)
else:
response = requests.request(method, url, headers=headers)
print('Whapi response:', response.json())
return response.json()
def set_hook():
if os.getenv('BOT_URL'):
settings = {
'webhooks': [
{
'url': os.getenv('BOT_URL'),
'events': [
{'type': "message", 'method': "post"}
],
'mode': "method"
}
]
}
send_whapi_request('settings', settings, 'PATCH')
@app.route('/messages', methods=['POST'])
def handle_new_messages():
try:
messages = request.json.get('messages', [])
endpoint = None
for message in messages:
if message.get('from_me'):
continue
sender = {'to': message.get('chat_id')}
command_input = message.get('text', {}).get('body', '').strip()
command = list(COMMANDS.keys())[int(command_input) - 1] if command_input.isdigit() else None
if command == 'TEXT':
sender['body'] = 'Simple text message'
endpoint = 'messages/text'
elif command == 'IMAGE':
sender['caption'] = 'Text under the photo.'
sender['media'] = FILES['IMAGE'] + ';image/jpeg'
endpoint = 'messages/image'
elif command == 'DOCUMENT':
sender['caption'] = 'Text under the document.'
sender['media'] = FILES['DOCUMENT'] + ';application/pdf'
endpoint = 'messages/document'
elif command == 'VIDEO':
sender['caption'] = 'Text under the video.'
sender['media'] = FILES['VIDEO'] + ';video/mp4'
endpoint = 'messages/video'
elif command == 'CONTACT':
sender['name'] = 'Whapi Test'
with open(FILES['VCARD'], 'r') as vcard_file:
sender['vcard'] = vcard_file.read()
endpoint = 'messages/contact'
elif command == 'PRODUCT':
# Example: You need to replace config.product with an actual product ID
product_id = os.getenv('PRODUCT_ID') # Replace with your product ID
endpoint = f'business/products/{product_id}'
elif command == 'GROUP_CREATE':
# Example: You need to replace config.phone with an actual phone number
participants = [message.get('chat_id').split('@')[0]] # Replace with the phone number
response = send_whapi_request('groups', {'subject': 'Whapi.Cloud Test', 'participants': participants})
sender['body'] = f"Group created. Group id: {response.get('group_id')}" if response.get('group_id') else 'Error'
endpoint = 'messages/text'
elif command == 'GROUP_TEXT':
sender['to'] = os.getenv('GROUP_ID') # Replace with your group ID
sender['body'] = 'Simple text message for the group'
endpoint = 'messages/text'
elif command == 'GROUPS_IDS':
groups_response = send_whapi_request('groups', {'count': 3}, 'GET')
groups = groups_response.get('groups', [])
sender['body'] = ',\n '.join(f"{group['id']} - {group['name']}" for group in groups) if groups else 'No groups'
endpoint = 'messages/text'
else:
sender['body'] = "Hi. Send me a number from the list. Don't forget to change the actual data in the code!\n\n" + \
'\n'.join(f"{i + 1}. {text}" for i, text in enumerate(COMMANDS.values()))
endpoint = 'messages/text'
if endpoint is None:
return 'Ok', 200
response = send_whapi_request(endpoint, sender)
print(f"Response from Whapi: {response}")
return 'Ok', 200
except Exception as e:
print(e)
return str(e), 500
@app.route('/', methods=['GET'])
def index():
return 'Bot is running'
if __name__ == '__main__':
set_hook()
port = os.getenv('PORT') or (443 if os.getenv('BOT_URL', '').startswith('https:') else 80)
app.run(port=port, debug=True)
For this to work: 1. Run the Flask application. 2. Set up your WhatsApp channel to receive messages on your webhook. 3. Try sending the message "hello" to your WhatsApp bot and see how it responds.
Since the responses are in JSON format, you can easily expand the capabilities of your bot. For example, you can include additional information in the response, considering the delivery timestamp or the current status of the recipient (online, offline, etc.), your bot can easily adapt to use this data. In the documentation and the Developer Hub, we have provided full details on what response and with which parameters you should expect for any request. The list of all parameters is available in the documentation. Use this data to expand your functionality.
Advanced capabilities
In our detailed documentation, you will find step-by-step instructions and examples of using methods that allow you to send various content, from files of any format, locations, and contacts to stickers, polls, and products. Additionally, you can dynamically interact with messages (reacting with emojis), quote them, mark them as read, pin conversations, delete or set the typing status in response.
Whapi.Cloud truly offers extensive functionality when working with group automation. You can automatically create/delete groups, add members, obtain information about groups and their members, assign administrators, change any group settings, generate invitation links, block users, etc. All methods are described in the Whapi.Cloud documentation.


With such a broad range of capabilities, creating a bot that meets any level of complexity and purpose becomes an easy task. Integrate your PHP bot into any platform, be it a website, application, CRM, ERP system, and much more.
Send a message with a media image
Enhancing user interaction with your WhatsApp bot becomes significantly easier when you incorporate media messages. By sending images, you not only make the conversation richer and more interactive but also allow companies to visually showcase their products or messages. This greatly enriches the communication experience, surpassing the limitations of text-only interaction. Let's delve into the process of sending an image via the WhatsApp API using Python:
import requests
url = "https://gate.whapi.cloud/messages/image?token=bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX"
payload = {
"to": "1234567891@s.whatsapp.net",
"media": "data:image/png;name=android-chrome-192x192.png;base64,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"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
Send a file through the WhatsApp API
With the WhatsApp bot, file distribution becomes a seamless process, offering users a swift and secure way to share crucial documents. By integrating this feature, you enrich the user experience, presenting diverse communication options beyond mere text and visuals. Let's explore the method of sending a file through the WhatsApp API using Python:
import requests
url = "https://gate.whapi.cloud/messages/document?token=bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX"
payload = {
"to": "1234567891@s.whatsapp.net",
"media": "data:application/octet-stream;name=site.webmanifest;base64,ewogICAgIm5hbWUiOiAiIiwKICAgICJzaG9ydF9uYW1lIjogIiIsCiAgICAiaWNvbnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAic3JjIjogIi9hbmRyb2lkLWNocm9tZS0xOTJ4MTkyLnBuZyIsCiAgICAgICAgICAgICJzaXplcyI6ICIxOTJ4MTkyIiwKICAgICAgICAgICAgInR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0KICAgIF0sCiAgICAidGhlbWVfY29sb3IiOiAiI2ZmZmZmZiIsCiAgICAiYmFja2dyb3VuZF9jb2xvciI6ICIjZmZmZmZmIiwKICAgICJkaXNwbGF5IjogInN0YW5kYWxvbmUiCn0K"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
Conclusion and recommendations
After setting up the bot and ensuring its proper operation locally, you can deploy it. While Flask is ideal for development, consider deploying on platforms such as Gunicorn or uWSGI for a production environment. When your bot is active, it will respond to every incoming WhatsApp message.
Thanks to the extensive Python library ecosystem, there's always room for improvements. You can integrate natural language processing (NLP) for smart interactions, connect databases for persistent storage, or even implement scheduled message sending capabilities.
Creating a bot for WhatsApp using Python and its connection to Whapi.Cloud simplifies the message exchange process. This guide shows that, step by step, anyone, even without special knowledge in Python or API, can do it.
This bot is developed on a "plug-and-play" principle. Starting is very straightforward. First and foremost, you need to register with our service. We offer a free trial version, allowing you to test all the features before deciding to purchase. After registration, upload the bot's code to your server. By following the instructions in this article, your bot will be operational in no time.
Remember, if you come across any questions or hurdles along the way, our support service is always ready to help. We value every user and aim to ensure your experience with our API is as smooth and efficient as possible.