Understanding Contacts: Roles, Automatic and Manual Creation

A contact is an end-user record in your RapidPro.app workspace who can be created manually, automatically when a new address interacts through a channel, or imported in bulk, and whose fields, addresses (URNs), and preferred channel settings determine how you store data and how messages are delivered across SMS, Telegram, Messenger, and other channels.

Understand contacts in a few steps

If you just need the essentials, follow this:

  1. Know what a contact is and how it connects to channels
  2. Create contacts manually, automatically via channels, or by bulk import
  3. Use contact fields (default + custom) to store project data
  4. Manage contact addresses (URNs) and their priority for correct delivery
  5. Reference contact data in flows with @contact and the last message with @input

You’re done. You can now structure contact data cleanly and understand how RapidPro.app decides where to send messages.

Step-by-Step Process

1
Understand what a contact is

A contact is an end-user who has interacted (or will interact) with your RapidPro.app workspace. Communication with contacts happens through a channel
(SMS, Telegram, Messenger, and more).

[CAPTURE: Contacts tab overview showing the contacts list.]

💡
Tip: Keep contacts clean from day one. Decide early which fields you’ll collect (name, location, role, etc.) so imports and automation stay consistent.

2
Create contacts (manual, automatic, or bulk)

A contact can be created in three main ways:

  1. Manually in the Contacts tab.
  2. Automatically when a new address (for example, a phone number) interacts with your workspace through a channel.
  3. Imported in bulk (for example, via an XLS/XLSX spreadsheet).

3
Use contact fields to store data

Each contact has attributes called contact fields. Fields can store values such as names, phone numbers, and any other data you collect.
RapidPro.app contact fields fall into two types: default fields and custom fields (created by you).

Fields can hold different value types, such as text, numeric, and date/time.

[CAPTURE: Contact fields section showing default + custom fields.]

⚙️
Note: Use custom fields for project data such as age, district, preferred_clinic, or farmer_type.

Default fields

Default fields typically include items like Name, Channel / Preferred Channel, Language, and Status (for example, active/blocked).

[CAPTURE: Default fields visible on a contact profile.]

Custom fields

Custom fields are fields you create to store project-specific information, such as age (numeric), registered_on (date/time), or village (text).

[CAPTURE: Custom fields list or “Add field” interface.]

💡
Tip: Use consistent naming. Prefer simple lowercase field keys like village, age, role to avoid confusion in flows.

4
Manage contact addresses (URNs) and priority

A contact’s address (also called a URN) is where RapidPro.app sends messages to reach that contact. Common URN types include phone numbers (SMS/Voice),
Telegram identifiers, Facebook/Messenger IDs, email addresses, and external identifiers for custom integrations.

A contact can have multiple addresses, including multiple addresses of the same type (for example, two phone numbers). If a contact has multiple addresses,
you can prioritize them to control which address is preferred.

[CAPTURE: Contact profile showing multiple URNs/addresses.]

Prioritizing addresses

  1. Prioritized addresses appear in order on the contact profile.
  2. Only the top prioritized address typically appears in the main contacts list view.

[CAPTURE: Contact profile showing URNs ordered by priority.]
[CAPTURE: Contacts list showing only the prioritized URN.]

⚠️
Warning: Messaging uses the prioritized address. If messages go to the “wrong” number/channel, check the contact’s URN priority and preferred channel.

Channels, URN types, and preferred channel behavior

RapidPro.app maps channel types to corresponding address types (URN types). A contact’s preferred channel and URN priority help determine how messages are sent.
If you have multiple channels of the same type (for example, multiple SMS numbers), RapidPro.app typically prioritizes the channel the contact last initiated contact with,
depending on configuration.

Contacts can become “locked” to a specific channel when multiple channels of the same type exist, the contact’s URN priority matches that channel type,
and the contact initiates contact via an incoming message.

[CAPTURE: Table or diagram showing channel types mapped to URN types.]

💡
Tip: In multi-number deployments, use triggers/flows to set preferred channel behavior deliberately.

5
Use contact data inside flows (@contact and @input)

RapidPro.app lets you reference contact data using variables. @contact refers to the active contact (the person currently in the flow),
and @input refers to the last message received from the contact.

@contact basics

Common examples include:

  • @contact / @contact.name — name (or fallback identifier)
  • @contact.first_name — first name (if set)
  • @contact.groups — groups the contact belongs to
  • @contact.uuid — unique identifier
  • @contact.display — name or URN shown in UI
  • @contact.language — language code (ISO)
  • @contact.created_on — creation timestamp
  • @contact.channel — preferred channel
  • @contact.fields.[field_name] — custom field value (for example, @contact.fields.age)

[CAPTURE: Flow editor showing a message using @contact fields.]

⚙️
Note: Field names must match exactly. If your custom field is age, reference it as @contact.fields.age.

Referencing the last incoming message with @input

Common examples include:

  • @input.text — message text
  • @input.created_on — timestamp of the input
  • @input.type — input type
  • @input.uuid — input ID
  • @input.channel — channel where the input was received
  • @input.attachments — attachments from the last message

[CAPTURE: Flow showing a rule or split using @input.text.]

💡
Tip: Temporarily send yourself @input.text or @input.channel inside a test flow to confirm what RapidPro.app is receiving.

Common Issues & Quick Fixes

Problem: New contacts aren’t appearing in my workspace.

Fix: Confirm you have an active channel connected and that the contact is messaging the correct channel; contacts are created automatically when a new address interacts through a channel.

Problem: Messages go to the wrong number or platform for a contact.

Fix: Check the contact’s URN list and ensure the correct address is prioritized, then review the contact’s preferred channel configuration.

Problem: A custom field shows blank in a flow.

Fix: Verify the field key matches exactly in your expression (for example, @contact.fields.age), and confirm the field is populated on the contact record.