Attributes system
The attributes system is the central key-value store that holds all configuration, state, and metadata for agents on the Newo platform. Every piece of data an agent needs -- from business hours to conversation history -- lives in one of three attribute namespaces, each scoped to a different entity.
Overview
Attributes are typed key-value pairs organized into namespaces (Customer, Persona, Project) and groups (Business, Agent, Knowledge Base, etc.). They drive agent behavior at every level: platform configuration, per-conversation state, and deployment-specific settings.
The attribute service stores each attribute as an AttributeDocumentValue -- a JSON document with a consistent schema across all three namespaces. NSL skills read and write attributes through dedicated commands such as GetCustomerAttribute and SetPersonaAttribute.
Three attribute namespaces
Every attribute belongs to exactly one of three namespaces. Each namespace is scoped to a different entity and has its own API surface.
| Namespace | Scoped to | Purpose | Example attributes |
|---|---|---|---|
| Customer | Customer account (organization) | Business configuration, agent settings, knowledge base content, reporting rules | project_business_name, project_business_working_hours, project_representative_agent_name |
| Persona | Individual end-user (caller/chatter) | Per-user conversation state, extracted information, session tracking | conversation_meta, rag, bookings, last_session_ended_datetime_utc |
| Project | Deployed project (agent deployment) | Deployment-specific settings, initialization flags, demo links | project_attributes_chat_link_demo, project_attributes_setting_init_attributes_metadata_enabled |
Customer attributes
Customer attributes contain the bulk of agent configuration. They are shared across all projects and personas within a customer account. When a business owner fills in their agent's name, working hours, or escalation rules in the Newo dashboard, those values are stored as customer attributes.
Customer attributes are the only namespace that supports the is_read_only flag, which prevents modification through the standard API.
Persona attributes
Persona attributes track per-user state across conversations. The platform creates and updates these automatically as conversations progress. For example, the system extracts user phone numbers, tracks booking status, and stores RAG (retrieval-augmented generation) context as persona attributes.
At the end of each session, the platform can optionally reset transient persona attributes (controlled by the project_attributes_setting_session_ended_reset_persona_attributes customer attribute).
Project attributes
Project attributes hold deployment-level configuration. They are scoped to a specific project within a customer account and are identified by both a customer_id and a project_idn. Project attributes are typically used for initialization flags and project-specific links.
Attribute fields
Every attribute has the following fields:
| Field | Description |
|---|---|
idn | Identifying name, unique within the namespace. This is the key used in GetCustomerAttribute, SetPersonaAttribute, and all other NSL attribute commands. |
value | The attribute value. Always stored as a string, regardless of the logical type. |
title | Display label shown in the Attributes page in Builder. |
description | Human-readable explanation of the attribute's purpose. |
group | The sidebar group this attribute appears under in the Attributes page. |
is_hidden | When true, the attribute is hidden from the UI unless Show Hidden is toggled on. |
is_read_only | When true, the attribute cannot be modified via the standard API (Customer namespace only). |
possible_values | For enum-type attributes, the list of allowed values. Empty for free-form attributes. |
value_type | Hint for how to interpret the value: string, enum, bool, number, or json. |
:::
🗒️ NOTE
Although attributes have a value_type field, the value is always stored as a string. The value_type serves as a hint to the UI and to NSL skills for how to interpret or validate the value.
:::
ValueType enum
The ValueType enum defines how an attribute's value should be interpreted:
| ValueType | Description | Example value |
|---|---|---|
string | Free-form text (default) | "Menlo Tavern" |
enum | One of a predefined set of values (listed in possible_values) | "restaurant_industry" |
bool | Boolean flag stored as string | "True" or "False" |
number | Numeric value stored as string | "42" |
json | Structured JSON stored as string | '["13334445556", "12223334455"]' |
:::
⚠️ CAUTION
Boolean values in attributes are stored as the strings "True" and "False" (capitalized), not as native booleans. NSL comparisons must use these exact string values.
:::
Customer attribute groups
Customer attributes are organized into numbered groups that appear in the Attributes page sidebar in the dashboard. Each group contains related configuration attributes.
| Group | Purpose | Key attributes |
|---|---|---|
| 1. Business | Core business information -- name, address, hours, phone, industry, language | project_business_name, project_business_working_hours, project_business_time_zone, project_business_industry |
| 1. Business - Advanced | Extended business settings -- multi-location, HIPAA mode, known employees | project_attributes_known_employees, project_business_locations, project_attributes_setting_hipaa_mode_enabled |
| 2. Agent | Agent identity and voice -- name, title, tone of voice, greeting phrases, voice provider settings | project_representative_agent_name, project_representative_agent_voice_greeting_phrase, project_representative_agent_chat_speaking_style |
| 2. Agent - Advanced | Phone number provisioning, voice integration service selection, voice mode | project_attributes_setting_voice_integration_service, project_attributes_setting_voice_integration_service_voice_mode |
| 3. Knowledge Base | Products, services, specials, FAQs, website scraping configuration | project_attributes_products_and_services, project_attributes_current_specials, project_attributes_faq |
| 3. Knowledge Base - Advanced | Dynamic knowledge base content, served areas, ZIP code validation | project_attributes_products_and_services_served_zip_codes, project_attributes_products_and_services_served_area |
| 4. Agent Behavior | Booking, escalation, call transfer, SMS behavior, manager email | project_attributes_setting_booking_enabled, project_attributes_setting_escalation_phone_number, project_business_manager_email |
| 4. Agent Behavior - Advanced | Detailed booking settings, spam limits, follow-up timers, availability checking | project_attributes_setting_booking_cancellation_type, project_attributes_setting_spam_limit, project_attributes_setting_follow_up_timer |
| 5. Reports | Session-end report settings, average lead value, report destinations | project_attributes_setting_session_ended_report_enabled, project_attributes_setting_asr_average_lead_value |
| 5. Reports - Advanced | Report schema customization, Google Sheets integration, webhook endpoints | project_attributes_setting_session_ended_report_additional_schema, project_attributes_setting_session_ended_report_google_sheet_url |
| 6. Support | SuperAgent version, internal notes | project_attributes_private_sa_version, project_attributes_private_notes |
| 6. Support - Advanced | Debug and monitoring flags | project_attributes_setting_uct_enabled, project_attributes_setting_magic_browser_notifications_enabled |
| 7. Customer Account | Account metadata set during provisioning | project_attributes_setting_account_email, project_attributes_setting_account_owner_name |
| 8. System | Internal system attributes, dynamic content, voice-to-voice function definitions | project_attributes_private_dynamic_business_context, project_attributes_private_sa_version |
Attributes in Advanced groups are hidden by default in the UI. Toggle Show Hidden in the dashboard to reveal them.
:::
🗒️ NOTE
Groups with an Unassigned label contain attributes that have an empty or missing group field. These appear in the dashboard under a special "Unassigned" section.
:::
Persona attributes overview
Persona attributes are session-level state that track an individual user's interaction context. Unlike customer attributes (which are configured by the business owner), persona attributes are primarily set and read by the agent system during conversations.
Common persona attributes include:
Attribute idn | Purpose |
|---|---|
conversation_meta | Accumulated conversation metadata and extracted information |
rag | Retrieved knowledge context for the current conversation |
bookings | User's active bookings |
last_session_ended_datetime_utc | Timestamp of the user's last session end |
integrationIdn | The integration channel for the current session (e.g., newo_voice, telegram) |
connectorIdn | The specific connector used in the current session |
custom_user_data | Extracted user information (name, phone, email) |
voicemail_checked | Whether voicemail detection was performed |
conversation_concluded | Whether the agent has concluded the current conversation |
working_hours_status | Current business hours status for the user's session |
Persona attributes do not support the is_read_only flag.
Project attributes overview
Project attributes are scoped to a specific deployment and are used primarily for:
- Initialization control -- The
project_attributes_setting_init_attributes_metadata_enabledflag triggers one-time metadata setup when set toTrue - Deployment-specific links -- For example,
project_attributes_chat_link_demostores the demo chat widget URL - Auto-update settings -- The
project_attributes_setting_init_on_auto_update_enabledflag controls whether initialization runs during automatic version updates
Project attributes do not support the is_read_only flag. They include denormalized customer_id and project_idn fields to enable efficient lookups by project identifier.
NSL access patterns
NSL (Newo Scripting Language) skills read and write attributes using built-in commands. Each namespace has dedicated getter and setter commands.
Reading attributes
{# Read a customer attribute #}
{% set business_name = GetCustomerAttribute(field="project_business_name") %}
{% set timezone = GetCustomerAttribute(field="project_business_time_zone") %}
{# Read a persona attribute (requires user ID) #}
{% set user_bookings = GetPersonaAttribute(id=user_id, field="bookings") %}
{% set conversation_meta = GetPersonaAttribute(id=user_id, field="conversation_meta") %}
{# Read a project attribute #}
{% set init_enabled = GetProjectAttribute(field="project_attributes_setting_init_attributes_metadata_enabled") %}Writing attributes
{# Set a customer attribute value #}
{{SetCustomerAttribute(field="project_business_name", value="Menlo Tavern")}}
{# Set a persona attribute (requires user ID) #}
{{SetPersonaAttribute(id=user_id, field="conversation_concluded", value="True")}}
{{SetPersonaAttribute(id=user_id, field="rag", value=rag_context)}}
{# Set a project attribute #}
{{SetProjectAttribute(field="project_attributes_setting_init_attributes_metadata_enabled", value="False")}}Common patterns
Conditional logic based on attribute values:
{% if GetCustomerAttribute(field="project_attributes_setting_session_ended_report_enabled") != "True" %}
{{Return()}}
{% endif %}Using attribute values in expressions:
{% set current_datetime = GetDateTime(
timezone=GetCustomerAttribute(field="project_business_time_zone"),
format="date"
) %}Resetting persona attributes at session end:
{{SetPersonaAttribute(id=userId, field="rag", value="")}}
{{SetPersonaAttribute(id=userId, field="bookings", value="")}}
{{SetPersonaAttribute(id=userId, field="conversation_concluded", value="False")}}NSL command reference
| Command | Namespace | Operation | Parameters |
|---|---|---|---|
GetCustomerAttribute | Customer | Read | field (attribute idn) |
SetCustomerAttribute | Customer | Write | field, value |
SetCustomerMetadataAttribute | Customer | Write with metadata | idn, field, value (supports multiple_fields) |
GetPersonaAttribute | Persona | Read | id (persona UUID), field |
SetPersonaAttribute | Persona | Write | id, field, value |
GetProjectAttribute | Project | Read | field |
SetProjectAttribute | Project | Write | field, value |
Metadata attributes
Metadata attributes define the schema (title, description, group, value type, possible values) for customer attributes. They are set using SetCustomerMetadataAttribute with the field="multiple_fields" parameter, which allows writing all metadata fields in a single call.
{{SetCustomerMetadataAttribute(
idn="project_business_name",
field="multiple_fields",
value={
"title": "1-01-A. Business Name [A]",
"description": "Short business name (2-5 words) for email headers, SMS, and signatures.",
"group": "1. Business",
"value_type": "string",
"is_hidden": False
}
)}}Metadata initialization is a resource-intensive operation. It is gated behind the project attribute project_attributes_setting_init_attributes_metadata_enabled:
- Set the attribute to
True - Press Publish in the dashboard
- The initialization flow runs once, writing metadata for all defined attributes
- The system automatically sets the flag back to
Falseafter completion
::: ❗❗ IMPORTANT Metadata initialization writes schema information (titles, descriptions, groups, value types) for all standard attributes. It does not overwrite existing attribute values. If attribute metadata needs to be refreshed after a platform update, the flag must be manually re-enabled. :::
Attribute naming conventions
Attribute idn values follow a consistent prefix convention:
| Prefix | Meaning |
|---|---|
project_business_ | Core business configuration |
project_representative_agent_ | Agent identity and behavior |
project_attributes_setting_ | Configurable settings and feature flags |
project_attributes_private_ | Internal/system attributes (typically hidden) |
project_attributes_static_ | Static supplementary content |
project_attributes_private_dynamic_ | System-generated dynamic content |
project_attributes_products_and_services | Knowledge base content for products/services |
Managing attributes in the dashboard
The Attributes page in the Newo dashboard provides a three-tab interface for managing attributes across all namespaces:
- Customer -- View and edit customer-scoped attributes, grouped by category
- Personas -- Select a persona, then view and edit their attributes
- Projects -- Select a project, then view and edit project-scoped attributes
Each tab supports:
- Group navigation -- Filter attributes by group using the sidebar
- Search -- Filter by
idn,title, orgroupusing the search field - Show Hidden toggle -- Reveal advanced and system attributes
- Create/Edit/Delete -- Manage attributes through the drawer form
See Manage agents for information about how attributes are configured during initial agent setup.
Updated about 6 hours ago
