Evolution API and erpnext integration for Whatsapp

Integrating WhatsApp with ERPNext 15 using the open-source Evolution API and the frappe_whatsapp app allows you to establish a cost-effective communication system without relying on official APIs. Below is a comprehensive guide to set up this integration in a self-hosted environment.


:toolbox: Prerequisites

  • A self-hosted ERPNext 15 instance
  • Linux-based server (e.g., Ubuntu 20.04+)
  • Node.js (v16 or higher) and npm installed
  • MongoDB and Redis installed
  • Optional: Cloudflare Tunnel for secure remote access

1. :rocket: Install Evolution API

a. Clone the Repository

git clone https://github.com/EvolutionAPI/evolution-api.git
cd evolution-api

b. Install Dependencies

npm install

c. Configure Environment Variables

Create a .env file in the root directory with the following content:

PORT=3000
MONGODB_URI=mongodb://localhost:27017/evolutionapi
REDIS_URI=redis://localhost:6379

d. Start the Server

npm run start

The Evolution API should now be running on http://localhost:3000.



2. :package: Install frappe_whatsapp App in ERPNext

a. Get the App

cd ~/frappe-bench/apps
git clone https://github.com/shridarpatil/frappe_whatsapp.git

b. Install the App

cd ~/frappe-bench
bench --site your-site-name install-app frappe_whatsapp

c. Restart Bench

bench restart

3. :hammer_and_wrench: Create a Custom Provider for Evolution API

a. Create Provider File

Create a new file at frappe_whatsapp/frappe_whatsapp/providers/evolution.py with the following content:

import frappe
import requests
from frappe_whatsapp.providers.base import BaseProvider

class EvolutionProvider(BaseProvider):
    def __init__(self, settings):
        super().__init__(settings)
        self.api_base = settings.get("evolution_api_base")
        self.token = settings.get("evolution_api_token")

    def send_message(self, to_number, message, **kwargs):
        url = f"{self.api_base}/messages"
        payload = {
            "to": to_number,
            "text": message
        }
        headers = {
            "Authorization": f"Bearer {self.token}",
            "Content-Type": "application/json"
        }
        response = requests.post(url, json=payload, headers=headers)
        response.raise_for_status()
        return response.json()

    def parse_incoming(self, data):
        return {
            "from": data["from"],
            "body": data["text"],
            "message_id": data["id"],
            "timestamp": data["timestamp"]
        }

b. Register the Provider

In frappe_whatsapp/frappe_whatsapp/providers/__init__.py, add:

from .evolution import EvolutionProvider

PROVIDERS = {
    # ... existing providers
    "Evolution": EvolutionProvider,
}

4. :gear: Configure WhatsApp Settings in ERPNext

a. Access WhatsApp Settings

Navigate to WhatsApp Settings in the ERPNext UI.

b. Set Provider and Credentials

  • Provider: Evolution
  • Evolution API Base URL: https://evolution.example.com
  • Evolution API Token: Your Evolution API token(easypanel.io)

c. Save Settings

Click Save to apply the settings.


5. :arrows_counterclockwise: Set Up Webhook for Incoming Messages

a. Create Webhook Handler

In frappe_whatsapp/frappe_whatsapp/providers/evolution.py, add:

@frappe.whitelist(allow_guest=True)
def handle_webhook():
    data = frappe.local.request.get_json()
    provider = EvolutionProvider(frappe.get_single("WhatsApp Settings").as_dict())
    msg = provider.parse_incoming(data)
    from frappe_whatsapp.incoming import handle_incoming_message
    handle_incoming_message(msg)
    return "OK"

b. Expose Webhook Endpoint

In hooks.py, add:

override_whatsapp_webhook = {
    "Evolution": "frappe_whatsapp.providers.evolution.handle_webhook"
}

c. Configure Webhook in Evolution API

Set the webhook URL in Evolution API to:

https://your-erpnext-domain.com/api/method/frappe_whatsapp.providers.evolution.handle_webhook

6. :white_check_mark: Test the Integration

a. Send a Message

Use the ERPNext UI to send a WhatsApp message to a test number.

b. Receive a Message

Reply from the test number and verify that the message appears in ERPNext.


:jigsaw: Additional Tips

  • Security: Ensure that your webhook endpoint is secured and only accessible by trusted sources.
  • Logging: Implement logging in your custom provider to monitor message flow and troubleshoot issues.
  • Updates: Regularly update both Evolution API and frappe_whatsapp to benefit from new features and security patches.

By following this guide, you can establish a robust and cost-effective WhatsApp integration with ERPNext 15 using Evolution API and frappe_whatsapp in a self-hosted environment.

2 Likes

any suggestion or help!!!

What? Sounds you already have all the information needed to solve your problem!

I had implanted it all even use the webhook /api/method/frappe_whatsapp.utils.webhook.webhook by HTTPS and still not working

These AI generated “guides” that people have started posting are so unhelpful. Most of the time, they have glaring errors, and yet they present like a tested solution.

If you want help, get it the right way. Tell us what’s not working. Tell us what you’ve tried, what you expected, and what actually happened.

4 Likes