AI-powered WhatsApp features: auto-replies, voice transcription, RAG knowledge base, and style profiles. Use when: ai reply, transcribe voice, knowledge base, upload document, build style, learn mode.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add LeoYeAI/openclaw-master-skills --skill moltflow-ai --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Moltflow Ai?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/leoyeai-moltflow-ai-b7ceb72d)More formats (shields.io, HTML) on the badges page.
---
name: moltflow-ai
description: "AI-powered WhatsApp features: auto-replies, voice transcription, RAG knowledge base, and style profiles. Use when: ai reply, transcribe voice, knowledge base, upload document, build style, learn mode."
source: "MoltFlow Team"
version: "2.16.1"
risk: safe
requiredEnv:
- MOLTFLOW_API_KEY
primaryEnv: MOLTFLOW_API_KEY
disable-model-invocation: true
---
> **MoltFlow** -- WhatsApp Business automation for teams. Connect, monitor, and automate WhatsApp at scale.
> ***Due to high demand and a recent registration issue, we're offering our top-tier Business plan with unlimited quotas for just $19.90/month on yearly billing — for a limited time only.*** [**Claim the deal**](https://buy.stripe.com/cNifZibX7gpQebJ0nsfnO00)
> Free tier available. [Sign up](https://molt.waiflow.app/checkout?plan=free)
# MoltFlow AI Features
AI-powered capabilities for WhatsApp automation: voice transcription, RAG knowledge base, style profile learning, and intelligent reply generation.
## Real-World Scenarios
**Healthcare clinic** — "Transcribe patient voice notes sent via WhatsApp and save them as searchable text records I can pull up later."
**Law firm** — "Upload our service agreements to the knowledge base so the AI can answer client questions about terms and pricing accurately."
**Sales team** — "Clone my top closer's writing style so AI replies to leads sound like him — casual, confident, uses emojis."
**Customer support** — "Auto-reply to common questions like 'What are your hours?' and 'Where are you located?' using our FAQ document."
## When to Use
- "Transcribe a voice message" or "convert audio to text"
- "Upload a document to knowledge base" or "ingest PDF"
- "Search knowledge base" or "find in documents"
- "Build style profile" or "learn my writing style"
- "Generate an AI reply" or "auto-reply to customer"
- "Preview AI response" or "test reply generation"
- "List knowledge sources" or "delete document"
## Prerequisites
1. **MOLTFLOW_API_KEY** -- Generate from the [MoltFlow Dashboard](https://molt.waiflow.app) under Settings > API Keys
2. **Pro plan or higher** ($29.90/mo) -- AI features are not available on the Starter plan
3. Base URL: `https://apiv2.waiflow.app/api/v2`
4. All AI endpoints are under the `/ai` prefix
## Required API Key Scopes
| Scope | Access |
|-------|--------|
| `ai` | `read/manage` |
## Authentication
Every request must include one of:
```
Authorization: Bearer <jwt_token>
```
or
```
X-API-Key: <your_api_key>
```
---
## Voice Transcription
Transcribe WhatsApp voice messages using Whisper AI. Transcription runs asynchronously via a Celery worker.
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | `/ai/voice/transcribe` | Queue a voice message for transcription |
| GET | `/ai/voice/status/{task_id}` | Check transcription task status |
| GET | `/ai/messages/{message_id}/transcript` | Get the transcript for a message |
### Queue Transcription
**POST** `/ai/voice/transcribe`
```json
{
"message_id": "msg-uuid-..."
}
```
**Response** `200 OK`:
```json
{
"task_id": "celery-task-id-...",
"message_id": "msg-uuid-...",
"status": "queued"
}
```
### Check Status
**GET** `/ai/voice/status/{task_id}`
```json
{
"task_id": "celery-task-id-...",
"status": "completed",
"result": {
"transcript": "Hello, I wanted to ask about...",
"language": "en",
"confidence": 0.95
}
}
```
Status values: `queued`, `processing`, `completed`, `failed`
### Get Transcript
**GET** `/ai/messages/{message_id}/transcript`
```json
{
"message_id": "msg-uuid-...",
"transcript": "Hello, I wanted to ask about...",
"language": "en",
"confidence": 0.95,
"transcribed_at": "2026-02-11T10:05:00Z"
}
```
---
## RAG Knowledge Base
Build a searchable knowledge base for AI-powered replies grounded in your business data.
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | `/ai/knowledge/ingest` | Upload and index a document |
| POST | `/ai/knowledge/search` | Semantic search across documents |
| GET | `/ai/knowledge/sources` | List all indexed documents |
| DELETE | `/ai/knowledge/{source_id}` | Delete a document |
### Upload Document
**POST** `/ai/knowledge/ingest` (multipart/form-data)
| Field | Type | Description |
|-------|------|-------------|
| `file` | File | PDF or TXT file (max 100MB) |
**Response** `200 OK`:
```json
{
"id": "src-uuid-...",
"name": "product-catalog.pdf",
"source_type": "application/pdf",
"chunk_count": 47,
"status": "indexed",
"task_id": "celery-task-id-..."
}
```
Supported file types: `application/pdf`, `text/plain` (`.pdf`, `.txt`)
### Search Knowledge Base
**POST** `/ai/knowledge/search`
```json
{
"query": "What is the return policy?",
"top_k": 5
}
```
**Response** `200 OK`:
```json
{
"query": "What is the return policy?",
"results": [
{
"source_id": "src-uuid-...",
"content_type": "application/pdf",
"content_preview": "Our return policy allows returns within 30 days...",
"metadata": {"page": 12, "chunk": 3},
"similarity": 0.92
}
],
"count": 1
}
```
Optional filters:
```json
{
"query": "shipping costs",
"filters": {"source_type": "application/pdf"},
"top_k": 10
}
```
### List Documents
**GET** `/ai/knowledge/sources`
```json
[
{
"id": "src-uuid-...",
"name": "product-catalog.pdf",
"source_type": "application/pdf",
"chunk_count": 47,
"status": "indexed",
"created_at": "2026-02-11T09:00:00Z",
"indexed_at": "2026-02-11T09:02:00Z"
}
]
```
Document status values: `processing`, `indexed`, `failed`
### Delete Document
**DELETE** `/ai/knowledge/{source_id}` -- Returns `204 No Content`
---
## Style Profiles (Learn Mode)
Configure AI writing style profiles scoped to individual chats or as a general profile. The AI auto-selects the best matching profile when generating replies.
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | `/ai/style/train` | Start building a style profile |
| GET | `/ai/style/status/{task_id}` | Check build status |
| GET | `/ai/style/profile` | Get a style profile |
| GET | `/ai/style/profiles` | List all style profiles |
| DELETE | `/ai/style/profile/{profile_id}` | Delete a style profile |
### Build Style Profile
**POST** `/ai/style/train`
```json
{
"session_id": "session-uuid-...",
"wa_chat_id": "5511999999999@c.us",
"name": "Sales"
}
```
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `contact_id` | string | No | Legacy — use `wa_chat_id` instead |
| `session_id` | UUID | No | Session to scope the build to |
| `wa_chat_id` | string | No | Chat to scope the build to (WhatsApp JID). Omit for general profile |
| `name` | string | No | Profile name (e.g., "Sales", "Support", "Family") |
**Note:** Omit both `session_id` and `wa_chat_id` to build a general profile from all conversations.
**Response** `200 OK`:
```json
{
"task_id": "celery-task-id-...",
"tenant_id": "tenant-uuid-...",
"contact_id": "5511999999999@c.us",
"status": "queued"
}
```
The build runs asynchronously. Check progress with the status endpoint.
### Get Style Profile
**GET** `/ai/style/profile?contact_id=5511999999999@c.us`
```json
{
"id": "profile-uuid-...",
"tenant_id": "tenant-uuid-...",
"contact_id": "5511999999999@c.us",
"name": "Sales",
"session_id": "session-uuid-...",
"wa_chat_id": "5511999999999@c.us",
"features": {
"avg_sentence_length": 12.5,
"formality_score": 0.7,
"emoji_frequency": 0.15,
"vocabulary_richness": 0.82
},
"sample_count": 150,
"last_trained_at": "2026-02-11T09:30:00Z"
}
```
### List All Profiles
**GET** `/ai/style/profiles`
```json
[
{
"id": "profile-uuid-1",
"tenant_id": "tenant-uuid-...",
"name": "Sales",
"session_id": "session-uuid-...",
"wa_chat_id": "5511999999999@c.us",
"features": { "formality_score": 0.7 },
"sample_count": 150,
"last_trained_at": "2026-02-11T09:30:00Z"
},
{
"id": "profile-uuid-2",
"tenant_id": "tenant-uuid-...",
"name": "General",
"session_id": null,
"wa_chat_id": null,
"features": { "formality_score": 0.5 },
"sample_count": 420,
"last_trained_at": "2026-02-11T10:00:00Z"
}
]
```
### Delete Profile
**DELETE** `/ai/style/profile/{profile_id}` -- Returns `204 No Content`
---
## AI Reply Generation
Generate intelligent reply suggestions using RAG context and style profiles.
| Method | Endpoint | Description |
|--------|----------|-------------|
| POST | `/ai/generate-reply` | Generate a reply suggestion |
| GET | `/ai/preview` | Preview a reply without tracking usage |
### Generate Reply
**POST** `/ai/generate-reply`
```json
{
"contact_id": "5511999999999@c.us",
"context": "Customer asks: Do you offer international shipping?",
"use_rag": true,
"apply_style": true,
"profile_id": "profile-uuid-...",
"session_id": "session-uuid-..."
}
```
**Response** `200 OK`:
```json
{
"reply": "Yes, we ship internationally to over 50 countries! Shipping typically takes 7-14 business days. You can find our full shipping policy on our website.",
"rag_sources": ["product-catalog.pdf"],
"style_applied": true,
"model": "gpt-4o-mini",
"tokens_used": 245,
"requires_approval": false
}
```
### Parameters
| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `contact_id` | string | required | WhatsApp JID of the contact |
| `context` | string | required | Customer question or prompt for reply generation (max 2000 chars) |
| `use_rag` | boolean | `true` | Include knowledge base context in generation |
| `apply_style` | boolean | `true` | Apply style profile to response |
| `profile_id` | UUID | `null` | Specific style profile to use (skips auto-selection cascade) |
| `session_id` | UUID | `null` | Session for cascade profile resolution |
| `approved` | boolean | `false` | Set `true` to confirm an approval-required reply |
**Note:** If `profile_id` is omitted and `apply_style` is true, the API auto-selects the best profile using the cascade: exact chat match → session-level → tenant-level general → no style.
### Preview Reply
**GET** `/ai/preview?contact_id=5511999999999@c.us&context=What+are+your+hours&use_rag=true&apply_style=true`
Same response format as `generate-reply`, but does not count toward usage metrics.
### Safety Features
AI reply generation includes built-in safety:
- **Input sanitization** -- Detects and blocks prompt injection attempts
- **Intent verification** -- Flags ambiguous or high-risk intents for confirmation
- **Output filtering** -- Screens generated content for PII, secrets, and policy violations
- **Content policy** -- Tenant-configurable rules (see moltflow-a2a skill)
---
## Examples
### Upload a knowledge base document
```bash
curl -X POST https://apiv2.waiflow.app/api/v2/ai/knowledge/ingest \
-H "X-API-Key: $MOLTFLOW_API_KEY" \
-F "file=@product-catalog.pdf"
```
### Generate an AI reply using RAG
```bash
curl -X POST https://apiv2.waiflow.app/api/v2/ai/generate-reply \
-H "X-API-Key: $MOLTFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contact_id": "5511999999999@c.us",
"context": "Customer asks: What is your return policy?",
"use_rag": true,
"apply_style": true
}'
```
### Generate reply with specific profile
```bash
curl -X POST https://apiv2.waiflow.app/api/v2/ai/generate-reply \
-H "X-API-Key: $MOLTFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contact_id": "5511999999999@c.us",
"context": "Customer asks: What is your return policy?",
"use_rag": true,
"apply_style": true,
"profile_id": "profile-uuid-..."
}'
```
### Build a style profile
```bash
curl -X POST https://apiv2.waiflow.app/api/v2/ai/style/train \
-H "X-API-Key: $MOLTFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"session_id": "session-uuid-...",
"wa_chat_id": "5511999999999@c.us",
"name": "Sales"
}'
```
---
## Plan Requirements
| Feature | Starter | Pro ($29.90/mo) | Business ($69.90/mo) |
|---------|---------|-----------------|------------|
| Voice Transcription | -- | Yes | Yes |
| RAG Knowledge Base | -- | Yes (10 docs) | Yes (unlimited) |
| Style Profiles | -- | Yes (3 profiles) | Yes (unlimited) |
| AI Reply Generation | -- | Yes | Yes |
---
## Error Responses
| Status | Meaning |
|--------|---------|
| 400 | Bad request (invalid input, unsupported file type) |
| 401 | Unauthorized (missing or invalid auth) |
| 403 | Forbidden (feature requires Pro plan or higher) |
| 404 | Resource not found (message, document, profile) |
| 413 | File too large (exceeds 100MB limit) |
| 429 | Rate limited |
---
## Related Skills
- **moltflow** -- Core API: sessions, messaging, groups, labels, webhooks
- **moltflow-outreach** -- Bulk Send, Scheduled Messages, Custom Groups
- **moltflow-leads** -- Lead detection, pipeline tracking, bulk operations, CSV/JSON export
- **moltflow-a2a** -- Agent-to-Agent protocol, encrypted messaging, content policy
- **moltflow-reviews** -- Review collection and testimonial management
- **moltflow-admin** -- Platform administration, user management, plan configuration
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!