Skip to main content

Initial Setup & Configuration

This section guides you through the initial setup process, from cloning the repository to configuring all the necessary environment variables.

1. Clone the Repository

First, clone the project repository to your local machine:

git clone https://gitlab.com/castlecraft/whatsapp_agent.git
cd whatsapp-agent

2. Configure Environment Variables

The application is configured using environment variables defined in a .env file. You will need to create this file in the deploy/ directory.

Create a file named deploy/deploy.env and populate it with the following content. You must replace the placeholder values with your actual credentials and settings.

deploy/deploy.env
# --- Application Settings ---
APP_NAME=whatsapp-agent

# --- PostgreSQL Credentials ---
POSTGRES_USER=your_db_user
POSTGRES_PASSWORD=your_db_password
POSTGRES_DB=whatsapp_agent_db

# --- Webhook Settings ---
WEBHOOK_VERIFY_TOKEN="a-very-strong-and-secret-token"
# Optional: For end-to-end encrypted webhooks. See Encryption Setup section.
WEBHOOK_E2E_PRIVATE_KEY_B64=""

# --- Exotel API Credentials ---
EXOTEL_API_KEY="your-exotel-api-key"
EXOTEL_API_TOKEN="your-exotel-api-token"
EXOTEL_ACCOUNT_SID="your-exotel-account-sid"
EXOTEL_SUBDOMAIN="@api.in.exotel.com"
EXOTEL_FROM_NUMBER="+919876543210"
EXOTEL_STATUS_CALLBACK_URL=""

# --- WhatsApp Flow Decryption ---
# See Encryption Setup section.
WHATSAPP_FLOW_PRIVATE_KEY_B64="your-base64-encoded-private-key-for-flows"

# --- Third-Party CRM Integration ---
CRM_API_URL="https://your-crm.com/api"
CRM_API_KEY="your-crm-api-key"
CRM_API_SECRET="your-crm-api-secret"
CRM_DOCTYP="Lead"

# --- S3-Compatible Storage ---
S3_ENDPOINT_URL="" # e.g., 'https://s3.amazonaws.com'
S3_ACCESS_KEY_ID="your-s3-access-key"
S3_SECRET_ACCESS_KEY="your-s3-secret-key"
S3_BUCKET_NAME="your-bucket-name"
S3_REGION_NAME="ap-south-1"

3. Encryption Setup

The application uses a single private key to decrypt both end-to-end encrypted webhook notifications and data submitted from WhatsApp Flows. You will generate a key pair locally and register the public key with Meta. The provided setup_whatsapp_encryption.py script automates this entire process.

Generating and Configuring Your Key

  1. Set Your API Token: The setup script needs a temporary System User access token with whatsapp_business_management permission. Export it in your terminal:

    export WHATSAPP_API_TOKEN='your-temporary-api-token'
  2. Run the Setup Script: Execute the script, replacing YOUR_PHONE_NUMBER_ID with the ID from your Meta App Dashboard.

    python scripts/setup_whatsapp_encryption.py YOUR_PHONE_NUMBER_ID

    This script generates a private key (whatsapp_private_key.pem), derives the public key, and registers the public key with Meta's API for your phone number.

  3. Encode and Configure the Key: The content of the generated whatsapp_private_key.pem file must be base64 encoded.

    # For Linux/macOS
    cat whatsapp_private_key.pem | base64 -w 0

    Copy the resulting base64 string. You must paste this same string as the value for both of the following variables in your deploy/deploy.env file:

    • WEBHOOK_E2E_PRIVATE_KEY_B64 (for encrypted webhooks)
    • WHATSAPP_FLOW_PRIVATE_KEY_B64 (for encrypted Flow data)