Protel
Protel – End User Manual
Overview
The Protel Manager integration connects a Protel hotel management system with Maileon email marketing. It receives guest profile and reservation events from Protel in real time, creates and updates contacts in Maileon, and sends reservation transactions that can trigger automated email workflows.
Availability: Currently only Protel On-Premise is available and supported. Protel Air support is planned but not yet released.
Setup and Configuration
Configuration is managed per hotel account. Each hotel account has one settings record that controls all integration behaviour for that account.
You can find the settings in your Maileon account: Settings → Plugins → Protel
Required Settings
Setting | Description |
|---|---|
Maileon API Key | API key for the Maileon account where contacts and transactions are written. |
Protel Bearer Token | Authentication token this application uses when sending data back to Protel. |
Maileon Bearer Token | Authentication token Protel must include when sending events to this application. Must be configured on the Protel side. |
Product | Protel variant: |
Hotel ID | The hotel's identifier in Protel. |
Contact and Subscription Settings
Setting | Default | Description |
|---|---|---|
Initial Permission |
| The Maileon permission level assigned to new contacts (1–6). |
DOI Process | off | Enable Double Opt-In for newly created contacts. When enabled, Maileon sends the configured DOI mailing to the guest. |
DOI Plus | off | Enable DOI+ variant instead of standard DOI. |
DOI Key | — | The key identifying the DOI mailing to send. Required when DOI Process is enabled. |
Deactivate for Import | off | When enabled, no contacts are created or updated and no DOI mailings are triggered. Use during bulk imports to prevent unwanted DOI sends. |
Reservation Transaction Settings
Setting | Default | Description |
|---|---|---|
Send Transactions to Guest | off | When enabled, reservation transactions are also sent to the arriving guest's email address, not only to the booker. |
Each reservation transaction type can be enabled or disabled independently. All are disabled by default.
Setting | Transaction Sent |
|---|---|
Reservation Requested enabled |
|
Reservation Waitlisted enabled |
|
Reservation Reserved enabled |
|
Reservation In House enabled |
|
Reservation Checked Out enabled |
|
Reservation Cancelled enabled |
|
Reservation No Show enabled |
|
Reservation Data Changed enabled |
|
Required Maileon Account Settings
The following settings must be disabled in Maileon to prevent unwanted DOI mailings from being re-sent on every profile update:
Allow DOI process restart if the contact has not yet completed it successfully — must be disabled
Permission update: Allow DOI process despite existing double opt-in permission — must be disabled
Events from Protel
Guest Created
Triggered when a new guest profile is added in Protel.
When the contact is created in Maileon:
For Protel On-Premise, the guest profile must meet all of the following conditions:
The global marketing opt-out flag (
ShareAllOptOutInd) must not be set toYesThe guest must have a default private email address (email type 1) with the per-email marketing consent flag (
ShareMarketInd) set toYes
If any condition is not met, no contact is created in Maileon.
When DOI is triggered:
DOI is sent only if all of the following are true:
DOI Process is enabled in settings
The contact does not already exist in Maileon with a completed DOI or DOI+ permission
This combination of email address and Protel guest ID has not had a previous subscription attempt recorded for this account
Deactivate for Import is not enabled
If the contact already exists with DOI or DOI+ permission, the contact data is updated but no new DOI mailing is sent.
Fields set in Maileon when a contact is created or updated:
Standard fields (built into every Maileon account):
Maileon Standard Field | Source in Protel | Notes |
|---|---|---|
Default private email address (email type 1) | On-Premise: | |
Permission | Configured Initial Permission setting | Set on creation; not overwritten if contact already has DOI or DOI+ permission |
| Guest first name |
|
| Guest last name |
|
| Guest name title |
|
| Salutation from guest profile extensions |
|
| Guest gender | Mapped: |
| Guest language | Normalised to two-letter ISO 639-1 code; cleared if not a recognised language |
| Guest birth date |
|
| Guest address line |
|
| Guest street number |
|
| Guest postal code |
|
| Guest city |
|
| Guest country |
|
Custom fields (created by the plugin in the Maileon account):
Maileon Custom Field | Source in Protel | Notes |
|---|---|---|
| Guest landline phone number | On-Premise: |
| Guest mobile phone number | On-Premise: |
| Keywords assigned to guest (context: protelIO, type: KEYWORD) | Comma-separated list |
| Marketing codes assigned to guest (context: protelIO, type: MARKETINGCODE) | Comma-separated list |
| VIP codes assigned to guest (context: protelIO, type: VIPCODE) | Comma-separated list |
Guest Profile Updated
Triggered when an existing guest's data changes in Protel (e.g. email address, name, address, phone number, marketing codes).
Subscription logic: The same marketing consent flags are evaluated again. If they now indicate opt-out, the contact is unsubscribed in Maileon. If they indicate opt-in and the contact does not yet have DOI or DOI+ permission, DOI is triggered subject to the same conditions as above.
Fields updated in Maileon: the same fields as listed under Guest Created above.
Reservation Changed
Triggered when a reservation is created, modified, or its status changes in Protel.
The integration tracks the state of each reservation. On each incoming event it compares the new data against the last known state to determine which transaction to send.
Status change transactions — one sent per status transition, if the corresponding setting is enabled:
New Reservation Status | Transaction Sent |
|---|---|
Requested |
|
Waitlisted |
|
Reserved / Confirmed |
|
In House (checked in) |
|
Checked Out |
|
Cancelled |
|
No Show |
|
Data change transaction — sent when the status did not change but one of the following changed:
Arrival date
Departure date
Number of guests (any category: adults, children, infants, teenagers, juniors, seniors)
Guest contact email
Rates
Transaction sent: protel_reservation_data_changed
Events that are ignored:
Duplicate events: if Protel sends the same event twice with the same modification timestamp, the duplicate is discarded.
Out-of-order events: if an event is older than the last processed event for the same reservation, it is discarded.
Events where the guest profile is not a customer profile.
Unsubscription Forwarded from Maileon to Protel
When a guest unsubscribes in Maileon, the unsubscription is automatically forwarded to Protel to keep the marketing consent flags in sync. No manual action is required.
For Protel On-Premise, the following is updated in Protel upon unsubscription:
The per-email marketing consent flag (
ShareMarketInd) is set toNoon the guest's email address in Protel.
Conditions for the unsubscription to be forwarded:
The contact must have had a completed DOI or DOI+ permission in Maileon. Contacts that never completed DOI are not affected.
Deactivate for Import must not be enabled.
Data Sent to Maileon
Transaction Attributes
All reservation transaction types carry the same set of attributes:
Attribute | Type | Description |
|---|---|---|
| String | Unique identifier for this transaction. |
| String | Reservation number from Protel. |
| JSON | Which data fields changed (populated for data-changed transactions). |
| Date | Arrival date. |
| Date | Departure date. |
| Integer | Total guest count. |
| Integer | Adult count. |
| Integer | Child count. |
| Integer | Infant count. |
| Integer | Teenager count. |
| Integer | Junior count. |
| Integer | Senior count. |
| JSON | Gender, name, and email of each arriving guest. |
| JSON | Gender, name, and email of the booker. |
| JSON | Assigned room numbers. |
| String | Room numbers as comma-separated string. |
| JSON | Room type codes. |
| String | Room type codes as comma-separated string. |
| Integer | Number of rooms reserved. |
| Decimal | Total reservation price before tax. |
| Decimal | Total reservation price after tax. |
| JSON | Per-night prices. |
| JSON | Rate plan information. |
| JSON | Rate details. |
| String | Hotel name. |
| JSON | Room comments from the reservation. |
| String | Market code from the room stay. |
| String | Source of business. |
| JSON | Reservation codes. |
| String | Reservation code names as CSV. |
| String | Reservation code types as CSV. |
| String | Guest gender ( |