Package Information
Available Nodes
Documentation generating…
Documentation
n8n-nodes-kirimchat
This is an n8n community node for KirimChat - a messaging platform that integrates WhatsApp Business API, Instagram DM, and Facebook Messenger.
Features
- Send Message - Send text, image, document, audio, video, template, or interactive messages via WhatsApp, Instagram, or Messenger
- List Templates - List all WhatsApp message templates with filtering
- Get Template - Get a specific template by ID
- Mark as Read - Mark messages as read and send read receipts
- Send Typing Indicator - Show typing indicator to customers
- Flexible Customer Lookup - Find customers by ID, phone number, or Instagram username
Installation
Community Nodes (Recommended)
- Go to Settings > Community Nodes
- Select Install
- Enter
@kichat/n8n-nodes-kirimchatand confirm
Credentials
You need a KirimChat API key to use this node:
- Log in to your KirimChat dashboard
- Go to Settings > Developers > API Keys
- Click Create API Key and copy the key (shown only once)
- In n8n, create new credentials for KirimChat API
- Paste your API key (starts with
kc_live_)
Operations
Send Message
Send a message to a customer via WhatsApp, Instagram, or Messenger.
Customer Lookup Options
| Method | Description | Example |
|---|---|---|
| Customer ID | KirimChat customer ID | cust_abc123 |
| Phone Number | Phone with country code | +6281234567890 |
| Instagram Username | Instagram username | johndoe |
Channels & Message Types
| Channel | Message Types |
|---|---|
text, image, document, audio, video, template, interactive |
|
text, image, media_share |
|
| Messenger | text, image, video, audio, file |
Parameters
| Parameter | Description |
|---|---|
| Customer Lookup | How to identify the customer |
| Channel | whatsapp, instagram, or messenger |
| Message Type | Type of message (varies by channel) |
| Content | Text content for text messages |
| Media URL | URL of media file for media messages |
| Caption | Optional caption for media messages |
| Filename | Filename for document/file messages |
WhatsApp Template Messages
Templates can be selected from a dropdown or entered manually.
| Parameter | Description |
|---|---|
| Template | Select from approved templates. Shows variable count e.g. [2 var] |
| Template Variables | Comma-separated values. Example: John, ORD-123 |
| Enter Template Manually | Toggle to type template name/language |
Example:
Template: Hello {{1}}, your order {{2}} is ready!
Template Variables: John, ORD-123
Result: "Hello John, your order ORD-123 is ready!"
Advanced (Manual Mode with JSON):
[
{
"type": "body",
"parameters": [
{ "type": "text", "text": "John" },
{ "type": "text", "text": "12345" }
]
}
]
WhatsApp Interactive Messages
Send buttons with your messages:
CTA URL Button:
| Parameter | Description |
|---|---|
| Interactive Type | cta_url |
| Body Text | Main message text (max 1024 chars) |
| Header Text | Optional header (max 60 chars) |
| Footer Text | Optional footer (max 60 chars) |
| Button Text | Text on button (max 20 chars) |
| Button URL | URL to open |
Reply Buttons:
| Parameter | Description |
|---|---|
| Interactive Type | button |
| Body Text | Main message text |
| Buttons (JSON) | Array of 1-3 buttons |
Example Reply Buttons:
[
{ "id": "yes", "title": "Yes" },
{ "id": "no", "title": "No" },
{ "id": "maybe", "title": "Maybe" }
]
Example Response:
{
"success": true,
"data": {
"message_id": "msg_xyz789",
"status": "sent",
"channel": "whatsapp",
"timestamp": "2025-11-26T10:31:00.000Z"
}
}
Mark as Read
Mark a message as read and send read receipt to the customer.
| Parameter | Description |
|---|---|
| Message ID | The ID of the message to mark as read (e.g., msg_xyz789) |
List Templates
List all WhatsApp message templates with optional filtering.
| Parameter | Description |
|---|---|
| Filter by Status | All, APPROVED, PENDING, or REJECTED |
| Filter by Category | All, MARKETING, UTILITY, or AUTHENTICATION |
| Limit | Maximum templates to return (1-500, default 100) |
Example Response:
{
"success": true,
"data": {
"templates": [
{
"id": "tpl_abc123",
"templateName": "order_confirmation",
"language": "en",
"status": "APPROVED",
"category": "UTILITY",
"content": "Your order {{1}} has been confirmed.",
"headerType": "TEXT",
"headerContent": "Order Update",
"footerContent": "Thank you for shopping!",
"variables": ["order_number"],
"createdAt": "2025-01-15T10:00:00.000Z"
}
],
"total": 1
}
}
Get Template
Get a specific WhatsApp message template by ID.
| Parameter | Description |
|---|---|
| Template ID | The ID of the template (e.g., tpl_abc123) |
Example Response:
{
"success": true,
"data": {
"id": "tpl_abc123",
"templateName": "order_confirmation",
"language": "en",
"status": "APPROVED",
"category": "UTILITY",
"content": "Your order {{1}} has been confirmed.",
"headerType": "TEXT",
"headerContent": "Order Update",
"footerContent": "Thank you for shopping!",
"buttons": [
{ "type": "URL", "text": "Track Order", "url": "https://..." }
],
"variables": ["order_number"],
"createdAt": "2025-01-15T10:00:00.000Z",
"updatedAt": "2025-01-15T10:00:00.000Z"
}
}
Send Typing Indicator
Show typing indicator to a customer before sending a message.
| Parameter | Description |
|---|---|
| Customer Lookup | How to identify the customer |
| Customer ID/Phone/Username | Customer identifier |
| Channel | whatsapp, instagram, or auto-detect |
Note: Rate limited to 1 request per customer per 3 seconds.
Webhook Trigger
KirimChat supports outbound webhooks for real-time event notifications. Configure webhooks in your KirimChat dashboard under Settings > Developers > Webhooks.
Supported Events
message.received- New message from customermessage.sent- Message sent to customermessage.delivered- Message deliveredmessage.read- Message read by customermessage.failed- Message delivery failed
Webhook Headers
KirimChat sends the following headers with each webhook:
| Header | Description |
|---|---|
X-KirimChat-Signature |
HMAC-SHA256 signature for verification |
X-KirimChat-Event |
Event type (e.g., message.received) |
X-KirimChat-Delivery |
Unique delivery ID |
X-KirimChat-Idempotency-Key |
Idempotency key for deduplication |
Webhook Payload Example
{
"event_type": "message.received",
"event_id": "evt_abc123",
"timestamp": "2025-11-26T10:30:00.000Z",
"data": {
"message_id": "msg_xyz789",
"customer_id": "cust_123",
"customer_phone": "+6281234567890",
"direction": "inbound",
"message_type": "text",
"content": "Hello!",
"channel": "whatsapp"
}
}
Handling Duplicate Events
KirimChat implements server-side deduplication, but in rare cases (network retries), duplicates may occur. To handle this in n8n:
Option 1: Use Idempotency Key (Recommended)
- Add a Code node after your Webhook trigger
- Check if you've seen this idempotency key before:
const idempotencyKey = $input.first().headers['x-kirimchat-idempotency-key'];
const eventId = $input.first().json.event_id;
// Use event_id or idempotency key to deduplicate
// Store in a Set, Redis, or database to track processed events
return $input.all();
Option 2: Use message_id + event_type
The combination of data.message_id + event_type is unique per event. Store these in your workflow state or external storage to detect duplicates.
Using with n8n Webhook Node
- Create a new workflow with Webhook trigger node
- Copy the webhook URL
- In KirimChat, create a webhook endpoint with this URL
- Select the events you want to receive
- Connect the webhook to your KirimChat node for automated responses
Rate Limits
| Limit Type | Rate |
|---|---|
| Global | 100 requests per minute per API key |
| 60 messages per minute | |
| 180 messages per hour | |
| Messenger | 180 messages per hour |
| Typing Indicator | 1 request per customer per 3 seconds |
Error Handling
The node returns standard error responses:
| Code | Description |
|---|---|
| 401 | Invalid or expired API key |
| 403 | Account disconnected or forbidden |
| 404 | Resource not found |
| 400 | Invalid request or messaging window closed |
| 429 | Rate limit exceeded |
Common Error Codes
| Error Code | Description |
|---|---|
ValidationError |
Invalid input parameters |
WindowClosed |
24-hour messaging window expired |
ConfigurationError |
Channel not configured |
ConnectionError |
Account disconnected |
RateLimitExceeded |
Too many requests |
Changelog
v1.2.0 (Latest)
- ✅ Added Template Dropdown - Select templates from dropdown (auto-loaded from API)
- ✅ Added Simple Variables - Add template variables without writing JSON
- ✅ Added List Templates operation - List all WhatsApp templates with filtering
- ✅ Added Get Template operation - Get template details by ID
- ✅ Filter templates by status (Approved, Pending, Rejected)
- ✅ Filter templates by category (Marketing, Utility, Authentication)
- ✅ Improved template UX - No more manual JSON for simple use cases
v1.1.0
- ✅ Added Messenger channel support
- ✅ Added customer lookup by phone number and Instagram username
- ✅ Added WhatsApp Interactive messages (CTA URL buttons, Reply buttons)
- ✅ Improved typing indicator with flexible customer lookup
- ✅ Enhanced error messages
v1.0.5
- Enhanced validation for media URLs
- Template components structure validation
v1.0.1
- Initial security improvements
- JSON validation for templates
- Base URL security warning
Resources
License
MIT