Skip to main content

Conversation Attributes

Conversation Attributes are custom fields that belong to one conversation. You design them once for the whole account — Reason for contact, Outcome, Order number, Refund amount — and agents fill them in from the right side of the conversation while they work.

The important word is conversation. A contact field describes a person and follows them for ever. A conversation attribute describes this exchange: why they wrote in today, what you did about it, which order was involved. The same customer writing again next week starts with a clean, empty set — because it is a new conversation with a new reason and a new outcome.

That is what makes them worth reporting on. "How many conversations were about billing this month?" is a question about conversations, and only a field stored on the conversation can answer it.

One set of attributes per account

Unlike CRM objects, where you can create Deals, Tasks and Contracts side by side, an account has exactly one set of conversation attributes. Every conversation in the account — every channel, every inbox — can carry the same attributes. There is nothing to choose before you start filling them in.

Key facts

FactMeaning
Stored on the conversationValues live with that one conversation, never on the contact or the customer.
Fresh every conversationA new conversation with the same person starts empty. Nothing is inherited or copied forward.
One set per accountYou design one layout in Settings; it applies to every conversation.
One field per rowThe conversation panel is a narrow column, so attributes always stack one per line. The builder previews it exactly that way.
Filled in by people or automationAgents type them in the panel; Studio flows set them automatically.
Available to automationEvery attribute becomes a {{conversation.custom_attributes.…}} variable for later Studio blocks, including HTTP requests.
ReportableAttributes appear in Analytics as fields you can group by, measure and filter on.
Kept after resolveValues travel with the conversation into the resolved archive and stay readable there.
Permission-controlledA separate role permission decides who can see, fill in, and change attributes.

What people use them for

AttributeTypeWhy
Reason for contactDropdown — Billing, Technical, Sales, ComplaintThe single most useful reporting field most support teams are missing.
OutcomeDropdown — Solved, Escalated, Refunded, No actionLets you measure resolution quality, not just resolution speed.
Order numberTextTies a conversation to an order in your own system, and can be pushed there by Studio.
Refund amountCurrencySum it in Analytics to see money moved per month, per agent, per channel.
Follow-up dateDateA date you can filter and report on.
Products discussedMulti-selectWhich products come up most often, per channel.
Handled by (specialist)Agent pickerRecords who really solved it when it passed through several people.
Escalated to vendorCheckbox / dropdownA simple flag you can count.
Attributes, labels, or tags?

All three organize a conversation, but they answer different questions.

  • Labels are a flat, free-growing list agents add on the fly. Great for loose themes; hard to report on consistently because anyone can invent a new one.
  • Attributes are a structured form: a fixed set of named fields, each with its own type and its own allowed values. Use them when you want the same answer in the same place on every conversation.
  • Tags behave like labels.

A good rule: if you would put it in a spreadsheet column, it is an attribute.


Part 1 — Build your attributes (Settings)

Designing the attributes is an admin job you do once. Agents never see this screen.

Open Settings → Conversation Attributes from the sidebar.

The Conversation Attributes builder in Teloring Settings, with the layout on the left, the live preview underneath it, and the toolbox of attribute types on the right

The screen has three parts:

AreaWhat it is
Left — layoutYour sections and the attributes inside them. This is the thing you are building.
Left, below — previewA live mock-up of the panel agents will see in the conversation. It updates as you work.
Right — toolboxOne draggable block per attribute type, plus a Section block.

If you have used the CRM field editor, this is the same idea with one deliberate difference: conversation attributes are always one per row, because the conversation panel is a narrow column and a two-column form would not fit.

Add an attribute

  1. Drag an attribute type from the toolbox on the right into a section on the left.
  2. The edit popover opens automatically. Set the Label, and the API ID if you want something friendlier than the generated one.
  3. For a choice type, add your Options.
  4. Tick Required if agents must fill it in.
  5. Click Save in the popover to close it.
  6. Repeat for every attribute, then click Save Attributes at the top right.

Nothing is live until you click Save Attributes.

Drag to a specific spot

Dropping an attribute onto an existing card inserts it above that card. Dropping it into the empty area of a section adds it at the end. Drag existing cards around the same way to reorder them, or into another section to move them.

Attribute properties

Click any attribute card to open its editor.

The attribute edit popover showing Label, API ID, Options and the Required checkbox

PropertyWhat it doesNotes
LabelThe name agents see above the field.Write it the way your team talks — Reason for contact, not reason_code. Change it whenever you like; it does not affect stored data.
API IDThe stable technical name — used in Studio variables, Analytics field names, and the API.Lowercase letters, numbers and underscores, starting with a letter (for example reason_for_contact). See the warning below before changing one.
OptionsThe allowed values for a choice attribute.Only shown for Dropdown, Radio, Multi-select and Checkbox. At least one option is required.
RequiredMarks the attribute with a red * for agents.A visual signal for the team. It does not block an agent from saving the rest of the panel.
Changing an API ID does not move existing data

The API ID is the key the values are stored under. Renaming reason to contact_reason gives you a new, empty attribute — the values already saved under the old name are no longer shown, and any Studio block or report referring to the old name stops finding data.

Set the API ID when you create the attribute, then leave it alone. The Label is the safe thing to change later — rename it as often as you want.

Attribute types

TypeAgent seesBest forIn Analytics
TextA single-line boxOrder number, reference, external IDFilter only
Text AreaA multi-line boxA short free-text note about the conversationFilter only
NumberA numeric boxCounts, quantities, scoresSum, average, min, max
CurrencyA numeric boxRefund amount, order value, credit givenSum, average, min, max
DropdownA single-choice listReason for contact, outcome, departmentGroup by, filter
RadioA single-choice listThe same as Dropdown — in the narrow conversation panel both are shown as a dropdown listGroup by, filter
Multi-selectA checkbox for each option, several allowedProducts discussed, systems affectedGroup by, filter
CheckboxA checkbox for each option, several allowedMultiple yes/no flags from one listGroup by, filter
DateA date pickerFollow-up date, promised dateTime grouping
Date & TimeA date and time pickerScheduled callbackTime grouping
EmailA box with email keyboardAn alternative contact address for this issue onlyFilter only
PhoneA box with phone keyboardA callback number for this issue onlyFilter only
URLA link boxA ticket link in another systemFilter only
Agent PickerA list of your agentsWho really handled it, second-line ownerGroup by, filter
CaptionRead-only helper textAn instruction or divider inside the panelNot stored, not reported
Choose Dropdown over Text whenever you can

A dropdown gives you consistent, countable answers. A text box gives you billing, Billing, billling and bill q. If you ever want to chart the field, make it a choice type.

About Caption

A caption is a note to the agent — "Only fill the refund fields when money was actually returned." It is never stored on a conversation, never appears in Studio, and never appears in Analytics. It cannot be marked required.

Sections

Sections group attributes under a small heading in the agent's panel. Use them when you have more than a handful of attributes — for example Why they wrote and What we did.

ActionHow
Add a sectionClick ➕ Add Section and type a name, or drag the Section block from the toolbox.
Rename a sectionClick the ✏️ button on the section header.
Reorder sectionsDrag a section header up or down.
Move an attribute between sectionsDrag its card into the other section.
Delete a sectionClick the ✕ on the section header. Its attributes move to the first section — they are not deleted.

With a single section, agents see no heading at all — just the fields. Section headings only appear when there is more than one.

The live preview

Under the layout you get a Conversation panel preview: exactly what agents will see, in the same one-per-row order, with your section headings and your * marks.

Use it to sanity-check length. A panel with twenty attributes is a panel nobody fills in. Most teams do well with four to eight.

Limits

LimitValue
Sections20
Attributes60
Options per choice attribute100

Deleting an attribute

Remove an attribute by clicking the on its card, then Save Attributes.

What happensDetail
It disappears from the agent panelImmediately, on the next conversation opened.
Existing values are keptThe data stays on the conversations that already had it — it is history, and deleting a field should not destroy the record of what happened.
Put it back and the data returnsRe-create the attribute with the same API ID and the old values are visible again.
Studio blocks that set itSkip it silently and keep running. Your flow does not break.
Reports that use itStop finding new values. Edit the report to point at something else.
PermissionRemoving an attribute needs Conversation attributes → Delete, which is separate from editing.

Part 2 — Fill attributes in (the conversation)

Agents work with attributes in the right sidebar of a conversation, in a section called Conversation Attributes, just above AI Copilot.

The Conversation Attributes section in the conversation right sidebar, above AI Copilot

  1. Open a conversation.
  2. Expand Conversation Attributes in the right sidebar.
  3. Fill in the fields.
  4. Click Save.

That is the whole workflow. Values save to this conversation only.

BehaviorDetail
CollapsibleClick the section header to open or close it, like the other sidebar sections.
Saves what you seeOnly the fields shown are saved. An attribute added after this conversation started is never wiped by an older panel.
Does not bump the queueSaving an attribute is bookkeeping, not a customer message — the conversation does not jump to the top of anyone's list.
Partial is fineFill in what you know now and come back later. * marks an attribute your team considers important; it does not block saving.
Read-only for some rolesWith Read but not Update, the fields are visible but greyed out.
Hidden when emptyIf your account has not defined any attributes, the section does not appear at all.

Where it is not shown

SituationWhy
The account has no attributes yetNothing to show. Build them in Settings first.
The role has no Conversation attributes → ReadThe whole section is hidden.
A resolved conversationIt becomes read-only — see below.

Part 3 — Resolved conversations

When a conversation is resolved, its attributes go with it.

Open the Resolved queue and select a conversation: the right panel shows a read-only Conversation Attributes block alongside the timeline, labels, emotion and contact details.

Conversation Attributes shown read-only in the resolved conversation properties panel

BehaviorDetail
Read-onlyA resolved conversation is a record of what happened. Re-open it if you genuinely need to correct a value.
Only filled attributesAttributes nobody answered are left out, so the block stays short and readable.
Agent names, not IDsAn Agent Picker value shows the person's name.
Multi-select valuesShown as a comma-separated list.
Resolving does not force you to fill anything in

Teloring does not block the Resolve button on an empty attribute. If your process needs "no resolve without a disposition", enforce it with team policy — or build a Studio flow that reacts to a resolve and notifies the agent when a key attribute is empty.

Attributes are also included in the conversation.resolved webhook, in full — not just the ones the closing action happened to change — so an external system receiving a resolved conversation gets the whole picture in one payload.


Part 4 — Automation (Studio)

Studio can both read and write conversation attributes.

Setting attributes from a flow

Attributes are set inside the existing Change Conversation action — there is no separate block. They are fields on the conversation, exactly like priority and subject, so a flow that sets three attributes and a label stays one readable node.

The Conversation attributes picker inside the Change Conversation action in Studio

  1. Add or open a Change Conversation block.
  2. Scroll to Conversation attributes.
  3. Click Add field, choose an attribute from the Select a field list, and type its value.
  4. Values accept {{variables}} — for example {{webhook.body.order_id}} or {{answers.reason}}.

If the account has no attributes yet, the picker says "No conversation attributes are set up for this account yet." Build them in Settings first.

Common uses:

FlowWhat it sets
A bot asks "what is this about?" and offers three buttonsReason for contact = the button the customer pressed
A form is submitted and starts a conversationOrder number = the order number from the form answers
An HTTP request looks the customer up in your ERPAccount tier = the tier the API returned
A conversation is auto-resolved by the botOutcome = Solved by bot
RuleBehavior
Values are validatedA dropdown value that is not one of your options fails the block, so a flow can never write something the agent panel would refuse to display.
Deleted attributes are skippedIf an attribute is removed from Settings after the flow was built, the block skips that line and keeps running.
Existing values are mergedSetting one attribute does not clear the others.
Multi-select valuesSeparate them with commas or new lines.

Reading attributes in a flow

Every attribute becomes a variable named after its API ID:

{{conversation.custom_attributes.reason_for_contact}}
{{conversation.custom_attributes.order_number}}

And the whole set is available as one object:

{{conversation.custom_attributes}}
Where they come fromDetail
The triggerIncoming Message, Incoming Call and Conversation Changed all load the conversation's current attributes. You do not need a Change Conversation block to read them.
A Change Conversation blockAfter the block runs, the variables hold the new values, so every block below it sees what was just written.
An attribute nobody filled inResolves to an empty value, not to the raw {{placeholder}}.

This is what makes attributes useful to an HTTP Request: put {{conversation.custom_attributes.order_number}} in the URL or body to look the order up, or send {{conversation.custom_attributes}} to push the whole disposition into your own system in one field.

Branch on them with a Condition If/Else block — for example, route every conversation whose Reason for contact is Billing to the finance team.

A flow can react to an agent filling one in

Saving the attributes panel counts as a conversation change, so a Conversation Changed trigger fires. Use it for rules like "when Outcome is set to Escalated, notify the duty manager".


Part 5 — Reporting (Analytics)

Conversation attributes are first-class fields in Analytics.

  1. Create a report and choose the Conversations data source.
  2. Your attributes appear in the field lists, named with their labels.
  3. Use them as Group by, as a measure, or as a filter.

There is nothing to select first — an account has one attribute set, so they are always available on the Conversations source.

QuestionReport
What are people contacting us about?Pie, Conversations, Group by Reason for contact
Which reasons take longest to resolve?Bar, Conversations, Average of Resolution time, Group by Reason for contact
How much did we refund this month?Value card, Conversations, Sum of Refund amount
Billing conversations per weekLine, Conversations, Count, Group by time, filtered to Reason for contact = Billing
Which agent handles the most complaints?Bar, Conversations, Count, Group by Assigned agent, filtered to Reason for contact = Complaint
Outcomes by channelStacked bar, Conversations, Count, Group by Channel type, stacked by Outcome

What each type can do is in the attribute types table above. In short: choice and agent-picker attributes can be grouped by; number and currency attributes can be summed and averaged; date attributes can drive time grouping; text attributes are for filtering.

Reports only see what was filled in

An attribute added in March cannot describe a conversation from January, and conversations nobody filled in group under (none). That is a good early signal — a large (none) slice usually means the attribute is not part of the team's routine yet.


Permissions

Conversation attributes have their own row on the System permissions tab of a role, under Workspace.

ActionWhat it grants
ReadSee the Conversation Attributes section in a conversation and on a resolved conversation, and open the Settings page to look at the design.
UpdateFill values in on a conversation, and add or edit attributes in Settings.
DeleteRemove an attribute from the account's design.

There is no Create, because an attribute is part of one account-wide design — adding one is editing that design.

"Update" covers both filling in and designing

This mirrors how Customers → Update also covers the CRM field editor. If you want front-line agents to fill attributes in without being able to redesign them, that separation does not exist today — the practical control is that the Settings page is not somewhere agents normally go.

Default roles:

RoleAccess
OwnerEverything, always.
Team LeaderRead, Update, Delete.
MarketingRead, Update.
AgentRead, Update — so front-line agents can fill attributes in.
ViewerRead.
Existing accounts must grant it once

This is a new permission. Roles that already existed before it was added do not have it ticked, so at first only the Owner sees the feature. Open Roles & Permissions, tick Conversation attributes on the roles that need it, and save. New accounts get the defaults above automatically.


Attributes vs. everything else

Store it asWhenLives on
Conversation attributeIt is true of this conversation — the reason, the outcome, the order being discussed.The conversation
Contact field (field editor)It is true of the person — their department, their preferred language.The contact
Customer field (CRM)It is true of the business — their plan, their industry, their account manager.The customer
CRM object record (CRM)It is a thing with its own life — a deal, a service call, a contract. It can outlive the conversation and there can be many per customer.Its own record under the customer
LabelA loose, quickly-added theme.The conversation

A quick test: if the same person contacted you again tomorrow, should this value still be there? If yes, it is a contact or customer field. If no, it is a conversation attribute.


Worked example — a support desk disposition

A five-minute setup most support teams can copy.

In Settings → Conversation Attributes:

SectionAttributeTypeOptions
Why they wroteReason for contact reason_for_contactDropdown, requiredBilling · Technical · Sales · Complaint · Other
Why they wroteOrder number order_numberText
What we didOutcome outcomeDropdown, requiredSolved · Escalated · Refunded · No action needed
What we didRefund amount refund_amountCurrency
What we didFollow-up needed by follow_up_byDate

For agents: fill the two dropdowns before resolving. Thirty seconds a conversation.

In Studio: a welcome flow asks "What can we help with?" with three buttons and writes the answer straight into Reason for contact, so most conversations arrive pre-classified.

In Analytics: a board with a pie of Reason for contact, a bar of average resolution time by reason, and a value card summing Refund amount this month.

Within a month you can answer "what do people actually contact us about, how long does each type take, and how much is it costing us" — from data your team was already producing.


Tips

TipWhy it helps
Start with two attributesReason and Outcome answer most questions. Add more once the habit sticks.
Prefer choice typesConsistent values are the difference between a chart and a mess.
Keep the panel shortFour to eight attributes get filled in. Twenty do not.
Add an Other optionWithout it, people pick the nearest wrong answer and quietly poison the data.
Use a Caption for instructionsOne line of guidance in the panel beats a training document nobody re-reads.
Pre-fill with StudioAnything the bot, a form, or an API already knows should not be typed by a human.
Watch the (none) sliceIt tells you how well the team has adopted the field.
Set API IDs deliberatelyThey are the names in your reports, your flows, and your API. Choose them once.

Troubleshooting

ProblemWhat to check
I don't see the section in a conversationThe account may have no attributes yet, or your role is missing Conversation attributes → Read. Existing roles do not get the new permission automatically.
The fields are greyed outYour role has Read but not Update.
I can't open the Settings pageYour role needs Conversation attributes → Read to view it and Update to change it.
Saving fails with "not one of the allowed options"The value does not match the attribute's option list. This usually means a Studio block sends a value that was later renamed in Settings.
A Studio block will not save the attributeCheck the attribute still exists in Settings and that its API ID has not been renamed. A renamed API ID is a different attribute.
My old values disappearedAn API ID was probably renamed. Rename it back to the original and the values reappear — the data was never deleted.
The attribute isn't in my reportMake sure the data source is Conversations. Text and text-area attributes can only be filtered on, not grouped by — use a choice type for grouping.
A big (none) group in a reportThose conversations have no value for that attribute — usually conversations from before the attribute existed, or conversations nobody filled in.
I deleted an attribute by mistakeRe-create it with the same API ID. The values were kept and become visible again.
Values from an old conversation appeared on a new oneThey cannot. Attributes are per conversation. If two conversations show the same value, both were filled in — check whether a Studio flow is setting it.