视觉画布设计
canvas-design
基于设计原则创作静态视觉作品,用于海报与品牌图形。
moltflow-ai【文档与办公】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.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
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 -- 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 Free tier available. Sign up
AI-powered capabilities for WhatsApp automation: voice transcription, RAG knowledge base, style profile learning, and intelligent reply generation.
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."
https://apiv2.waiflow.app/api/v2/ai prefix| Scope | Access |
|---|---|
ai | read/manage |
Every request must include one of:
Authorization: Bearer <jwt_token>
or
X-API-Key: <your_api_key>
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 |
POST /ai/voice/transcribe
{
"message_id": "msg-uuid-..."
}
Response 200 OK:
{
"task_id": "celery-task-id-...",
"message_id": "msg-uuid-...",
"status": "queued"
}
GET /ai/voice/status/{task_id}
{
"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 /ai/messages/{message_id}/transcript
{
"message_id": "msg-uuid-...",
"transcript": "Hello, I wanted to ask about...",
"language": "en",
"confidence": 0.95,
"transcribed_at": "2026-02-11T10:05:00Z"
}
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 |
POST /ai/knowledge/ingest (multipart/form-data)
| Field | Type | Description |
|---|---|---|
file | File | PDF or TXT file (max 100MB) |
Response 200 OK:
{
"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)
POST /ai/knowledge/search
{
"query": "What is the return policy?",
"top_k": 5
}
Response 200 OK:
{
"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:
{
"query": "shipping costs",
"filters": {"source_type": "application/pdf"},
"top_k": 10
}
GET /ai/knowledge/sources
[
{
"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 /ai/knowledge/{source_id} -- Returns 204 No Content
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 |
POST /ai/style/train
{
"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:
{
"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 /ai/style/profile?contact_id=5511999999999@c.us
{
"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"
}
GET /ai/style/profiles
[
{
"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 /ai/style/profile/{profile_id} -- Returns 204 No Content
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 |
POST /ai/generate-reply
{
"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:
{
"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
}
| 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.
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.
AI reply generation includes built-in safety:
curl -X POST https://apiv2.waiflow.app/api/v2/ai/knowledge/ingest \
-H "X-API-Key: $MOLTFLOW_API_KEY" \
-F "file=@product-catalog.pdf"
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
}'
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-..."
}'
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"
}'
| 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 |
| 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 |