Customer Support Inbox via SMS & WhatsApp
Overview
DIDfarm turns any SMS- or WhatsApp-enabled phone number into a full customer support channel. Inbound messages from your customers appear in the portal inbox and can optionally be forwarded to your helpdesk (Zendesk, Freshdesk, Intercom, or any system with a webhook intake).
There are two approaches to handling support messages:
| Approach | How it works | Best for |
|---|---|---|
| Portal-based | View conversations and reply directly in the DIDfarm portal | Small teams, low volume, no existing helpdesk |
| API-based | Receive inbound messages via webhook, reply via API, integrate into your own tools | Engineering teams, high volume, existing helpdesk integration |
Prerequisites
- A DIDfarm account with at least one active phone number.
- SMS enabled on the number (toggle in the portal under My Numbers → number settings).
- For WhatsApp support: a WhatsApp-enabled number (request via the portal or contact support).
- For API integration: a DIDfarm API key (generate under Account → API Keys).
- For webhook forwarding: a publicly reachable HTTPS endpoint on your server.
Portal Inbox
Enable SMS or WhatsApp on your number
Navigate to My Numbers in the portal, click on a number, and toggle SMS and/or WhatsApp to enabled. Once activated, the number will start receiving inbound messages.
Open the Inbox view
Go to My Numbers → SMS tab and select Inbox. You will see a list of conversations grouped by customer phone number. Each conversation shows the most recent message, the timestamp, and the number of unread messages.
The inbox displays conversations for all your SMS- and WhatsApp-enabled numbers in a single unified view. You can filter by number, channel (SMS or WhatsApp), and read/unread status.
Receive Messages
Customer sends a message to your number
When a customer sends an SMS or WhatsApp message to your DIDfarm number, three things happen simultaneously:
- The message appears in your portal inbox in real time.
- If a webhook URL is configured on the number, DIDfarm sends an HTTP POST with the message payload to your endpoint.
- If email forwarding is enabled, a copy of the message is sent to your configured email address.
Inbound webhook payload
{
"id": "msg_a1b2c3d4",
"event": "message.received",
"from": "+31612345678",
"to": "+31201234567",
"body": "Hi, I ordered a product last week and haven't received it yet. Order #4521.",
"channel": "sms",
"received_at": "2026-04-05T14:22:08Z",
"conversation_id": "conv_x7y8z9",
"metadata": {
"country": "NL",
"carrier": "KPN"
}
}message_type (text, image, document, location), media_url for attachments, and profile_name with the sender's WhatsApp display name.
Reply via Portal
Reply directly from the inbox
Click on any conversation in the portal inbox to open it. Type your reply in the message box at the bottom and click Send. The message is delivered via the same channel the customer used (SMS or WhatsApp).
The portal shows the full conversation history, including timestamps, delivery status indicators, and channel badges so you can see which messages were sent over SMS versus WhatsApp.
Reply via API
Send a reply programmatically
For teams that integrate messaging into their own helpdesk or CRM, use the DIDfarm API to send replies. The API automatically threads the reply into the existing conversation.
curl -X POST https://didfarm.com/api/v1/sms/messages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "+31201234567",
"to": "+31612345678",
"body": "Hi! Thanks for reaching out. I can see your order #4521 — it shipped yesterday and should arrive by Friday. I will send you the tracking link shortly."
}'Reply via API — Node.js
const axios = require('axios');
async function replyToCustomer(fromNumber, toNumber, message) {
const response = await axios.post(
'https://didfarm.com/api/v1/sms/messages',
{
from: fromNumber,
to: toNumber,
body: message,
},
{
headers: {
Authorization: `Bearer ${process.env.DIDFARM_API_KEY}`,
'Content-Type': 'application/json',
},
}
);
return response.data;
}
// Example usage in a helpdesk integration
app.post('/helpdesk/reply', async (req, res) => {
const { ticketId, agentReply } = req.body;
const ticket = await db.tickets.findById(ticketId);
await replyToCustomer(
ticket.didfarmNumber,
ticket.customerPhone,
agentReply
);
res.json({ success: true });
});Webhook Forwarding
Configure a webhook URL on each number to push inbound messages to your helpdesk or custom application. This is the recommended approach for integrating DIDfarm messaging with tools like Zendesk, Freshdesk, Intercom, or your own ticketing system.
Configure the webhook
In the portal, go to My Numbers, click a number, and enter your webhook URL under Messaging Settings → Inbound Webhook URL. DIDfarm will POST every inbound message to this URL.
Auto-reply webhook handler
A common pattern is to send an immediate auto-reply acknowledging receipt, then forward the message to your support team for manual follow-up:
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());
const DIDFARM_API = 'https://didfarm.com/api/v1/sms/messages';
const API_KEY = process.env.DIDFARM_API_KEY;
app.post('/webhooks/didfarm/inbound', async (req, res) => {
const { from, to, body, channel, conversation_id } = req.body;
// 1. Send an immediate auto-reply
await axios.post(DIDFARM_API, {
from: to, // Reply from the same DIDfarm number
to: from, // Back to the customer
body: 'Thank you for contacting us! A support agent will '
+ 'reply shortly. For urgent matters, call +31 20 123 4567.',
}, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
// 2. Create a ticket in your helpdesk
await axios.post(process.env.HELPDESK_WEBHOOK_URL, {
subject: `SMS from ${from}`,
description: body,
channel: channel,
customer_phone: from,
didfarm_number: to,
conversation_id: conversation_id,
priority: 'normal',
});
// 3. Optionally forward to email as a backup
await axios.post('https://didfarm.com/api/v1/sms/forward-to-email', {
number: to,
email: 'support@yourcompany.com',
message: {
from: from,
body: body,
received_at: req.body.received_at,
},
}, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
res.sendStatus(200);
});200 status within 10 seconds. If it returns an error or times out, DIDfarm will retry delivery up to 3 times with exponential backoff. Process time-consuming work asynchronously (e.g. push to a queue) to avoid timeouts.
Forwarding to email
For teams that prefer email-based support, you can configure per-number email forwarding so every inbound SMS or WhatsApp message is also delivered to an email address. Configure this in the portal under Messaging Settings → Forward to Email.
Conversation Threading
DIDfarm automatically groups messages into conversations based on the phone number pair (your DIDfarm number + the customer's number). Every message between the same two numbers belongs to the same conversation thread.
How threading works
- Each conversation has a unique
conversation_idthat is included in all webhook payloads and API responses. - Conversations are per-number-pair: if a customer messages two different DIDfarm numbers, those are two separate conversations.
- SMS and WhatsApp messages to/from the same number pair are merged into a single thread with channel badges on each message.
- Conversations are kept open indefinitely. A new message from the same customer continues the existing thread.
Fetching conversation history via API
curl -X GET "https://didfarm.com/api/v1/sms/conversations/conv_x7y8z9/messages?limit=50" \ -H "Authorization: Bearer YOUR_API_KEY"
{
"data": [
{
"id": "msg_a1b2c3d4",
"direction": "inbound",
"from": "+31612345678",
"to": "+31201234567",
"body": "Hi, I ordered a product last week...",
"channel": "sms",
"status": "delivered",
"created_at": "2026-04-05T14:22:08Z"
},
{
"id": "msg_e5f6g7h8",
"direction": "outbound",
"from": "+31201234567",
"to": "+31612345678",
"body": "Hi! Thanks for reaching out...",
"channel": "sms",
"status": "delivered",
"created_at": "2026-04-05T14:22:09Z"
}
],
"conversation_id": "conv_x7y8z9",
"has_more": false
}Best Practices
Response time
- Reply within 5 minutes for WhatsApp — WhatsApp allows free-form replies only within a 24-hour window after the customer's last message. After 24 hours, you must use a pre-approved template (which incurs a per-message fee). Responding quickly keeps you within the free session window.
- Set up auto-replies — even if your agents cannot respond immediately, send an automatic acknowledgement so the customer knows their message was received.
- Track first-response time — use the webhook timestamps and your reply timestamps to measure and improve response times.
WhatsApp 24-hour session window
Message management
- Use templates for common replies — if your agents find themselves typing the same responses repeatedly (order status, return instructions, opening hours), create saved reply templates in your helpdesk or use the DIDfarm API to maintain a template library.
- Forward to email as backup — enable email forwarding on all support numbers so messages are never missed, even if your webhook endpoint is temporarily down.
- Tag conversations — when forwarding to your helpdesk, include the
conversation_idand customer phone number so agents have full context.
After-hours handling
- Configure your auto-reply webhook to check the current time and send a different message outside business hours: "Thanks for your message. Our support team is available Mon–Fri 09:00–18:00 CET. We will reply on the next business day."
- For urgent after-hours issues, include a phone number or emergency contact in the auto-reply.
Multi-number support routing
- Use different DIDfarm numbers for different departments (sales, support, billing) and route each number's webhook to the appropriate team or queue.
- Include the
tofield (your DIDfarm number) in your helpdesk ticket so agents know which department the customer contacted.
FAQ
Can I assign conversations to specific agents?
The DIDfarm portal inbox does not have built-in agent assignment. For agent routing, forward messages via webhook to your helpdesk (Zendesk, Freshdesk, Intercom, etc.) where you can use their native assignment and routing rules. The DIDfarm API provides the conversation context your helpdesk needs to route and track conversations.
Is there a chatbot integration?
DIDfarm does not include a built-in chatbot, but you can build one using the webhook and API integration. Your webhook endpoint receives every inbound message — route it through your chatbot engine (Dialogflow, Rasa, OpenAI, or a custom solution), then send the bot's response via the DIDfarm API. When the bot cannot handle a query, escalate to a human agent.
What about after-hours messages?
Messages sent outside your business hours are stored in the portal inbox and delivered via webhook as usual. Configure your auto-reply handler to detect after-hours messages and send an appropriate response with your business hours and expected reply time. See the after-hours handling section in Best Practices above.
Can I use the same number for reminders and support?
Yes. A single DIDfarm number can handle both outbound reminders and inbound support conversations. The conversation_id in webhook payloads lets your system distinguish between reminder replies and new support inquiries based on whether the customer's number has an active appointment reminder thread.
What happens if my webhook is down?
DIDfarm retries failed webhook deliveries up to 3 times with exponential backoff (30 seconds, 2 minutes, 10 minutes). If all retries fail, the message is still visible in the portal inbox, and an email notification is sent to your account email. Enable email forwarding as a safety net.
How many conversations can I handle per number?
There is no limit on the number of concurrent conversations per DIDfarm number. Each number can handle thousands of active conversation threads. For high-volume support, the API-based approach with webhook forwarding to your helpdesk is recommended over the portal inbox.
Are messages stored? For how long?
All messages are stored in DIDfarm for 90 days and visible in the portal inbox. After 90 days, messages are archived but conversation metadata is retained. For compliance purposes, you can export conversation history via the API or configure webhook forwarding to store messages in your own systems indefinitely.
Set up your support inbox
Enable SMS on your DIDfarm numbers and start receiving customer messages today.