
Research
/Security News
Critical Vulnerability in NestJS Devtools: Localhost RCE via Sandbox Escape
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
sdkwa-whatsapp-api-client
Advanced tools
Python SDK for the SDKWA WhatsApp HTTP API. Send messages, files, and manage WhatsApp accounts programmatically.
pip install sdkwa-whatsapp-api-client
from sdkwa import SDKWA
# Initialize the client
client = SDKWA(
id_instance="YOUR_INSTANCE_ID",
api_token_instance="YOUR_API_TOKEN"
)
# Send a text message
response = client.send_message(
chat_id="1234567890@c.us",
message="Hello from SDKWA! 👋"
)
print(f"Message sent with ID: {response['idMessage']}")
# Send a file
response = client.send_file_by_url(
chat_id="1234567890@c.us",
url_file="https://example.com/image.jpg",
file_name="image.jpg",
caption="Check out this image!"
)
# Get account state
state = client.get_state_instance()
print(f"Account state: {state['stateInstance']}")
# Get account settings
settings = client.get_settings()
# Update settings
client.set_settings({
"webhookUrl": "https://your-webhook-url.com",
"delaySendMessagesMilliseconds": 1000
})
# Get QR code for authorization
qr_data = client.get_qr()
# Get account state
state = client.get_state_instance()
print(f"Account state: {state['stateInstance']}")
# Reboot instance
client.reboot()
# Logout
client.logout()
# Text message
client.send_message(
chat_id="1234567890@c.us",
message="Hello World!",
quoted_message_id="optional_message_id", # Reply to message
link_preview=True # Enable link previews
)
# Send contact
client.send_contact(
chat_id="1234567890@c.us",
contact={
"phoneContact": 1234567890,
"firstName": "John",
"lastName": "Doe",
"company": "Example Corp"
}
)
# Send location
client.send_location(
chat_id="1234567890@c.us",
name_location="My Location",
address="123 Main St",
latitude=40.7128,
longitude=-74.0060
)
# Send file by URL
client.send_file_by_url(
chat_id="1234567890@c.us",
url_file="https://example.com/document.pdf",
file_name="document.pdf",
caption="Important document"
)
# Upload and send file
with open("image.jpg", "rb") as file:
client.send_file_by_upload(
chat_id="1234567890@c.us",
file=file,
file_name="image.jpg",
caption="Photo from vacation"
)
# Download received file
file_data = client.download_file(
chat_id="1234567890@c.us",
id_message="MESSAGE_ID"
)
# Get notifications
notification = client.receive_notification()
if notification:
print(f"New notification: {notification}")
# Process notification...
# Delete notification after processing
client.delete_notification(notification['receiptId'])
# Get chat history
history = client.get_chat_history(
chat_id="1234567890@c.us",
count=50
)
# Create group
group = client.create_group(
group_name="My Group",
chat_ids=["1234567890@c.us", "0987654321@c.us"]
)
# Get group data
group_info = client.get_group_data("GROUP_ID@g.us")
# Add participants to group
client.add_group_participant(
group_id="GROUP_ID@g.us",
participant_chat_id="1111111111@c.us"
)
# Remove participant from group
client.remove_group_participant(
group_id="GROUP_ID@g.us",
participant_chat_id="1111111111@c.us"
)
# Set group admin
client.set_group_admin(
group_id="GROUP_ID@g.us",
participant_chat_id="1111111111@c.us"
)
# Remove admin rights
client.remove_admin(
group_id="GROUP_ID@g.us",
participant_chat_id="1111111111@c.us"
)
# Update group name
client.update_group_name(
group_id="GROUP_ID@g.us",
group_name="New Group Name"
)
# Set group picture
with open("group_pic.jpg", "rb") as file:
client.set_group_picture("GROUP_ID@g.us", file)
# Leave group
client.leave_group("GROUP_ID@g.us")
# Get contacts
contacts = client.get_contacts()
# Get chats
chats = client.get_chats()
# Get contact info
contact_info = client.get_contact_info("1234567890@c.us")
# Check if number has WhatsApp
has_whatsapp = client.check_whatsapp(1234567890)
# Get avatar
avatar = client.get_avatar("1234567890@c.us")
# Set profile picture
with open("profile_pic.jpg", "rb") as file:
client.set_profile_picture(file)
# Mark chat as read
client.read_chat("1234567890@c.us")
# Mark specific message as read
client.read_chat("1234567890@c.us", id_message="MESSAGE_ID")
# Archive chat
client.archive_chat("1234567890@c.us")
# Unarchive chat
client.unarchive_chat("1234567890@c.us")
# Delete message
client.delete_message("1234567890@c.us", "MESSAGE_ID")
# Show messages in queue
queue = client.show_messages_queue()
# Clear messages queue
client.clear_messages_queue()
# Get last outgoing messages (last 24 hours by default)
outgoing = client.last_outgoing_messages()
# Get last outgoing messages from last 60 minutes
outgoing = client.last_outgoing_messages(minutes=60)
# Get last incoming messages
incoming = client.last_incoming_messages()
from flask import Flask, request
from sdkwa import WebhookHandler, WebhookType
app = Flask(__name__)
webhook_handler = WebhookHandler()
# Register event handlers
@webhook_handler.on(WebhookType.INCOMING_MESSAGE_RECEIVED)
def handle_message(notification):
"""Handle incoming message notifications."""
sender_data = notification.get('senderData', {})
message_data = notification.get('messageData', {})
sender = sender_data.get('chatId', 'Unknown')
sender_name = sender_data.get('senderName', 'Unknown')
message_type = message_data.get('typeMessage', 'unknown')
print(f"📥 Incoming message from {sender_name} ({sender})")
if message_type == 'textMessage':
text = message_data.get('textMessageData', {}).get('textMessage', '')
print(f"Message: {text}")
@webhook_handler.on(WebhookType.OUTGOING_MESSAGE_STATUS)
def handle_status(notification):
"""Handle outgoing message status notifications."""
status = notification.get('status', 'unknown')
id_message = notification.get('idMessage', '')
print(f"📤 Message {id_message} status: {status}")
@app.route('/webhook', methods=['POST'])
def webhook():
webhook_handler.handle(request.json)
return "OK"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
export SDKWA_ID_INSTANCE="your_instance_id"
export SDKWA_API_TOKEN="your_api_token"
export SDKWA_API_HOST="https://api.sdkwa.pro" # Optional
client = SDKWA(
id_instance="your_instance_id",
api_token_instance="your_api_token",
api_host="https://api.sdkwa.pro", # Optional, defaults to official API
user_id="your_user_id", # Optional, for additional authentication
user_token="your_user_token", # Optional, for additional authentication
timeout=30, # Request timeout in seconds
verify_ssl=True # SSL verification
)
from sdkwa import APIError, AuthenticationError, ValidationError
try:
response = client.send_message(
chat_id="invalid_chat_id",
message="Test message"
)
except AuthenticationError:
print("Invalid credentials")
except ValidationError as e:
print(f"Validation error: {e}")
except APIError as e:
print(f"API error: {e}")
# Clone the repository
git clone https://github.com/sdkwa/whatsapp-api-client-python.git
cd whatsapp-api-client-python
# Install in development mode
pip install -e .
# Format code
python scripts/dev.py format
# Clean build artifacts
python scripts/dev.py clean
# Build package
python scripts/dev.py build
# Publish to PyPI (requires API token)
python scripts/dev.py publish
We welcome contributions! Please see our Contributing Guide for details.
This project is licensed under the MIT License - see the LICENSE file for details.
FAQs
Python SDK for SDKWA WhatsApp HTTP API
We found that sdkwa-whatsapp-api-client demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
/Security News
A flawed sandbox in @nestjs/devtools-integration lets attackers run code on your machine via CSRF, leading to full Remote Code Execution (RCE).
Product
Customize license detection with Socket’s new license overlays: gain control, reduce noise, and handle edge cases with precision.
Product
Socket now supports Rust and Cargo, offering package search for all users and experimental SBOM generation for enterprise projects.