English
Table — append a comment
Appends timestamped text at the bottom of a cell, never overwriting what it holds. One action = one comment.
Appends a line of text at the bottom of a cell of a Table, without ever overwriting what the cell already holds. It keeps a per-case history: one action, one comment. To set a value that replaces the previous one (a status, a date), use Table — update a row or Table — insert or update instead.
At a glance
- Type:
table.append_text· version 1 - Category: Actions
- Kind: Step — one stage of a run
- Effect: Writes outside (
external_write) — writes outside Mankomail; described instead of performed during a test run - Needs a carrier email: No
- Connection: None
- Inputs:
main - Outputs:
main
Parameters
table
Table — Picked from the list, or by its short identifier (its “slug”), which may come from a template.
- Type: Remote resource (
resourceLocator) - Required: Yes
- Ways to choose: pick from a list, type an ID (
table)
key
Row key — The row to comment on, designated by the values of its “key” columns.
- Type: List of items (
collection) - Required: Yes
- Default:
[] - At most 8 items
- Each item has:
column— Key column- Type: Text (
string) - Required: Yes
- Default:
""(empty) - 60 characters at most
- Expressions:
{{ }}not accepted
- Type: Text (
value— Value to match- Type: Text (
string) - Required: No
- Default:
""(empty) - 10000 characters at most
- Type: Text (
column
Column to append to — A text column. What it already holds is never replaced.
- Type: Text (
string) - Required: Yes
- Default:
""(empty) - 60 characters at most
- Expressions:
{{ }}not accepted
text
Text to append — One line per action. Write what happened, not the resulting state — the state has its own column.
- Type: Long text (
text) - Required: Yes
- Default:
""(empty) - 4000 characters at most
- Expressions:
{{ }}accepted
withTimestamp
Prefix with date and time — The date is written in a short universal format (2026-04-03 14:30), not in the member’s language: a cell is read by different people and exported as is.
- Type: Yes / no (
boolean) - Required: No
- Default:
true
createIfMissing
Create the row if it does not exist — Handy for a per-case log: the first comment creates the row.
- Type: Yes / no (
boolean) - Required: No
- Default:
true
Outputs
main
Data produced
What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).
{{ data.<step>.rowId }}—string. The identifier of the row commented on. In a test run, when the row would be created:simulated:<table identifier>.{{ data.<step>.row.<column> }}—object. The whole row after the write, by column machine key; the appended column holds the full log, new entry last.{{ data.<step>.created }}—boolean. true when the row did not exist and was created by this comment.{{ data.<step>.reused }}—boolean. true when the step was replayed after an incident: the comment had already been added and was not added again.{{ data.<step>.simulated }}—boolean. true in a test run: nothing was written.{{ data.<step>.summary }}—string. A one-line summary:Comment added.,Would have added the comment.orComment already added on an earlier attempt.
Example
Each time a workflow chases a client, it logs the action in the history column of the table cases (key column case_number). The node is named "Log reminder".
text
table cases
key case_number = {{ data.read_case.case_number }}
column history
text Reminder sent to {{ data.read_case.client_email }}
withTimestamp on
createIfMissing onAfter two runs, the cell reads:
text
2026-04-03 14:30 — Reminder sent to ada@example.com
2026-04-10 09:05 — Reminder sent to ada@example.comTips
- Nothing is ever replaced. The new entry goes on a new line below the existing content. Write what happened, not the resulting state — the state belongs in its own column.
- Timestamp. With Prefix with date and time on, each entry starts with
YYYY-MM-DD HH:MM —. The time is in UTC and the format does not depend on the member's language, so the cell sorts and exports cleanly. - Creating the row. With Create the row if it does not exist on (the default), the first comment creates the row with its key values. Off, a missing row fails the step with
table.row_not_found. - The column is named by its machine key and should be a Text column. An unknown column fails with
table.unknown_column. - Cell size. The whole log counts toward the cell limit (4,000 characters by default, set by the instance administrator). Once a log reaches it, further comments fail with
table.invalid_value. - Empty text. If the text is empty once expressions are resolved, the step fails rather than adding a line with a date only.
- Replays never add twice. The comment is recorded with the step's idempotency key: a replay after an incident returns the row already written (
reused: true) instead of adding the same comment again. - Key lookup ignores case, accents and punctuation, and relies on the table option Refuse two rows with the same key.
- Test runs. Nothing is written. The row is really looked up, and the step returns it as it would be with the comment appended, with
simulated: true. See Test runs.