|
Node
|
Plain Message |
|---|---|
|
Description |
The Plain Message node The node supports multiple digital channels configured in CCM (Channel Connection Manager). Commonly used channels include:
Any other non-voice digital channel configured in CCM (excluding CX Voice and Cisco CC) can also be selected from the Channel dropdown. |
Overview
When a contact reaches the Plain Message node (typically from the Init node), the node:
-
Reads the contact from
msg.outboundMetadata.contact.cxCustomer -
Resolves the customer's channel identifier (e.g. phone number, email) using Customer Identifier and Identifier Index
-
Personalizes content by replacing
{{fieldName}}placeholders with contact data -
For WhatsApp, builds an approved message template body (with mapped parameters) instead of plain text
-
Schedules the message for delivery via the Scheduler (
POST /scheduled-activities) -
Optionally forwards delivery notifications and customer responses to a downstream node when wired
If the contact is missing or has no valid identifier for the selected channel, the message is not sent and the contact is skipped.
|
Category |
Inputs |
Outputs |
Default Label |
|---|---|---|---|
|
Channel Action |
1 |
1 |
Your node's name, or Plain Message if left blank |
Supported Digital Channels
The Channel dropdown is populated from CCM at edit time. Voice channels (CX_VOICE, CISCO_CC) are excluded — this node is for digital messaging only.
|
Channel |
Typical use |
Customer identifier |
Notes |
|---|---|---|---|
|
|
WhatsApp Business messaging |
Mobile number / phone field |
Can send as TEMPLATE (if a template is selected) |
|
SMS |
SMS via configured gateway (e.g. SMPP) |
Mobile number / phone field |
Message sent as plain text ( |
|
|
Outbound email campaigns |
Email address field |
Uses |
|
Other CCM channels |
Any additional digital channel in your tenant |
Depends on contact schema |
Shown as |
Prerequisite: The channel must be configured in CCM before it appears. If no digital channels are configured, the node editor shows an error.
Configuration Options
|
Setting |
Default |
What it does |
|---|---|---|
|
Name |
(blank) |
Optional label for the node. |
|
Channel |
— |
CCM digital channel (WhatsApp, SMPP, Email, etc.). Loaded from |
|
Customer Identifier |
|
Contact field for the destination address ( |
|
Identifier Index |
1 (index 0) |
Which value to use when the field has multiple values (e.g. two phones). UI is 1-based; stored as 0-based. |
|
Subject |
(blank) |
Email only. Hidden for WhatsApp, SMPP, and other non-email channels. Supports |
|
WhatsApp Template |
(none) |
WhatsApp only. Approved CCM message templates for the selected channel’s service identifier. |
|
Template Parameters |
(none) |
WhatsApp + template with |
|
Message |
(blank) |
Message body for |
Plain Message configuration setup
-
Open the node editor — channels and contact fields load from CCM and the contact schema.
-
Select the Channel (WhatsApp, SMPP, Email, etc.).
-
Set Customer Identifier to the destination field (e.g.
mobileNumberfor WhatsApp/SMPP,emailfor Email). -
If contacts can have multiple values for that field, set Identifier Index (1 = first, 2 = second, …).
-
For Email, fill in Subject.
-
For WhatsApp:
-
Select a WhatsApp Template (approved templates for that service).
-
If the template has placeholders, use Template Parameters to map each
{{n}}to a customer attribute.
-
-
Write your Message using
{{placeholder}}syntax (and/or@attribute picker).
WhatsApp Templates
When templates are used
|
Condition |
Schedule body |
|---|---|
|
WhatsApp channel and a valid template is saved on the node |
|
|
SMS / other digital |
Always |
|
|
Always |
Templates are loaded from CCM (/get-whatsapp-templates?serviceIdentifier=...) for the selected WhatsApp channel.
Placeholders and parameter mapping
-
CCM provides a
parametersarray (component + index). The UI shows one row per unique index (e.g.{{1}}shared by HEADER and BODY). -
If
parametersis empty, the template has no mappable placeholders → schedulecomponents: []. -
At send time, mapped attributes are resolved from the contact and sent in CIM format (
parameterType+additionalParameterDetails). -
Footer text is part of the approved template on Meta; the scheduler does not send a footer component (only
header,body,button).
Example schedule body (TEMPLATE)
{
"type": "TEMPLATE",
"namespace": "null",
"name": "ef_campaign_full_test",
"language": {
"code": "en_US",
"policy": "deterministic"
},
"components": [
{
"type": "header",
"parameters": [
{
"parameterType": "text",
"additionalParameterDetails": { "text": "Nasir Hussain" }
}
]
},
{
"type": "body",
"parameters": [
{
"parameterType": "text",
"additionalParameterDetails": { "text": "Nasir Hussain" }
},
{
"parameterType": "text",
"additionalParameterDetails": { "text": "923165392101" }
}
]
}
]
}
When Does It Send?
The node runs each time it receives a message from an upstream node (usually Init, one message per contact).
Normal send path
-
Contact exists in
msg.outboundMetadata.contact.cxCustomerwith a valid_id -
The configured Customer Identifier has a non-empty value at the selected Identifier Index
-
The node builds a schedule request and posts it to the Scheduler
-
The Scheduler delivers on the selected channel (for WhatsApp templates, via the WhatsApp connector / Meta)
Skipped (no send)
-
Contact missing, or missing
_id -
Customer identifier missing or empty at the selected index
→ Counted in metrics asMISSING_CONTACT
Pass-through path (no re-send)
If msg.type is DELIVERY_NOTIFICATION or CUSTOMER_RESPONSE, the node forwards the message to its output without scheduling again. Use a downstream Post Attempt Decision (or similar) to branch on status / response.
Output
On successful schedule
The node does not emit a new message on the normal send path — it schedules and completes. Wire a delivery-notification path if you need post-send branching.
On delivery notification / customer response (when wired)
{
"payload": {
"body": {
"status": "DELIVERED",
"type": "DELIVERYNOTIFICATION"
},
"channelType": {
"name": "WHATSAPP"
}
},
"outboundMetadata": {
"contact": {},
"schedulingNodeId": "<plain-message-node-id>",
"flowId": "<flow-id>"
},
"type": "DELIVERY_NOTIFICATION"
}
|
Field |
Notes |
|---|---|
|
|
|
|
|
Delivery result (e.g. |
|
|
Channel that sent the message |
|
|
Preserved from the original send (contact, flow context) |
Message Personalization
Use double curly braces in Message and Subject (Email):
Hello {{firstName}}, your appointment is confirmed.
Type @ in the Message / Subject editors to pick a customer attribute from the schema.
|
Placeholder |
Replaced with |
|---|---|
|
|
Contact’s |
|
|
Contact’s |
|
|
First value if the field is an array ( |
|
|
Display name of the first label ( |
|
|
Any field on the contact object |
Missing values: If a placeholder has no matching value, it is replaced with an empty string (not left as {{fieldName}}).
Labels: Customer records store label IDs. When Message/Subject contains {{labels}}, or a WhatsApp template parameter is mapped to labels, the node resolves labels[0] to its name via GET {CX_CUSTOMER_URL}/label. Results are cached using CACHE_TTL_MINS (same as other studio caches).
Channel-Specific Behavior
|
Channel |
Schedule body type |
Extra fields / notes |
|---|---|---|
|
WhatsApp (template selected) |
|
|
|
SMPP (SMS) |
|
|
|
|
|
|
|
Other digital |
|
|