> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ravenna.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Ticket replication

> Replicate Ravenna tickets to Freshservice with automatic outbound sync of comments, status changes, priority, and assignee updates by channel.

Ticket replication sends Ravenna tickets to Freshservice with automatic sync of comments, status, priority, and assignee changes. When you enable replication for a channel, new tickets and their updates automatically push to your Freshservice instance.

<Info>
  Freshservice ticket replication is **outbound only** (Ravenna to Freshservice). Changes made directly in Freshservice do not sync back to Ravenna.
</Info>

## How ticket replication works

When replication is enabled for a channel, Ravenna automatically:

* **Creates tickets** in Freshservice when new Ravenna tickets are created
* **Syncs comments** from Ravenna to Freshservice (create, edit, and delete)
* **Updates status** using the built-in status mapping
* **Maps priority** from Ravenna priority levels to Freshservice priority values
* **Syncs assignee** when users exist in both systems

## Setup

<Steps>
  <Step title="Connect Freshservice integration">
    Install and configure the Freshservice integration in **Settings** > **Integrations**.

    <Callout icon="link" color="#6B7280">
      Follow the [Freshservice setup guide](/integrations/freshservice/setup) to connect your Freshservice instance
    </Callout>
  </Step>

  <Step title="Enable replication for a channel">
    Navigate to the channel where you want to enable replication:

    1. Open **Channel Settings**
    2. Go to **Ticket Replication**
    3. Enable replication for Freshservice
    4. Click **Configure** to set channel-specific preferences
  </Step>

  <Step title="Test replication">
    Create a test ticket in the channel to verify replication works correctly.
  </Step>
</Steps>

## Status mapping

Ravenna applies a fixed status mapping between Ravenna status groups and Freshservice statuses. You don't need to configure anything — Ravenna applies the mapping automatically whenever a ticket's status changes.

| Ravenna status group | Freshservice status |
| -------------------- | ------------------- |
| Open                 | Open (2)            |
| In Progress          | Pending (3)         |
| Waiting              | Pending (3)         |
| Done                 | Resolved (4)        |
| Closed               | Closed (5)          |

When Ravenna receives a Freshservice status change via webhook, it maps the value back using the reverse mapping: Open (2) → Open, Pending (3) → In Progress, Resolved (4) → Done, and Closed (5) → Closed.

<Info>
  Status mapping uses Ravenna's built-in status groups rather than individual statuses, so any custom status that belongs to one of these groups syncs through the same mapping.
</Info>

## Priority mapping

Ravenna priority levels map to Freshservice priority values:

| Ravenna priority | Freshservice priority |
| ---------------- | --------------------- |
| Low              | Low (1)               |
| Medium           | Medium (2)            |
| High             | High (3)              |
| Urgent           | Urgent (4)            |

## Custom fields synchronization

Custom fields from Ravenna tickets sync to Freshservice as formatted HTML comments on the linked ticket. This ensures your custom field data is visible in Freshservice without requiring native custom field configuration.

**How it works:**

* When a ticket with custom fields is replicated to Freshservice, a comment is created with a formatted table showing all custom field values
* When custom fields are updated in Ravenna, the comment in Freshservice is automatically updated
* The comment displays as a formatted HTML table with field names and values

<Info>
  Custom field synchronization is one-way (Ravenna to Freshservice). Changes to the comment in Freshservice do not sync back to Ravenna.
</Info>

## What syncs

**Automatically synced (Ravenna to Freshservice):**

* Ticket creation
* Comments (create, edit, and delete)
* Status changes (using the built-in status mapping)
* Priority updates
* Assignee changes (when users exist in both systems)
* Custom fields (synced as formatted HTML comments)

**Not synced:**

* Changes from Freshservice back to Ravenna
* Attachments
* Ticket history and audit logs

## Empty title and description fallbacks

If a Ravenna ticket is replicated to Freshservice without a title or description, the integration substitutes placeholder values so Freshservice's required fields are always populated:

* Missing title (and subject) → `Empty title`
* Missing description → `Empty description`

This prevents replication from failing when Freshservice rejects empty required fields. Update the ticket in Ravenna to push the real values to the linked Freshservice ticket.

## Troubleshooting

**Tickets not syncing:**

* Verify the integration is connected in Settings > Integrations
* Check that replication is enabled for the channel
* Ensure the Freshservice domain is correct

**Status changes not syncing:**

* Confirm the Ravenna status belongs to one of the mapped status groups (Open, In Progress, Waiting, Done, Closed)
* Check that the mapped status code (2, 3, 4, or 5) is enabled in your Freshservice instance
* Confirm the issue type supports the status transition

**Comments not appearing:**

* Comments sync with a short delay
* Check that the Freshservice ticket is linked to the Ravenna ticket
* Verify the integration connection is active

**Assignee not mapping:**

* The user must exist in Freshservice as an agent
* Ravenna matches users by email address
* If a user is not found in Freshservice, the assignee field is left empty

## Best practices

* **Test with one channel first** to verify configuration before enabling across multiple channels
* **Verify agent accounts** exist in Freshservice for users who will be assigned tickets
* **Monitor initial tickets** to confirm replication, status mapping, and priority mapping work as expected
