Skip to main content
Ticket replication syncs tickets, comments, status, priority, and assignee changes between Ravenna and Freshservice. Each Ravenna channel is configured for a specific Freshservice workspace.
Inbound changes from Freshservice require the Workflow Automator webhook. Connecting with OAuth alone does not set up the webhook.

How ticket replication works

When outbound replication is enabled for a channel, Ravenna:
  • 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
When inbound replication and the Freshservice webhook are enabled, Ravenna creates tickets from the selected Freshservice workspace and syncs ticket updates and notes made there. Changes performed by the dedicated OAuth agent are ignored to prevent sync loops.

Setup

1

Connect Freshservice integration

Connect Freshservice in Settings > Integrations and configure the Freshservice Workflow Automator webhook.
Follow the Freshservice setup guide for the service account, OAuth connection, and webhook
2

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 inbound and/or outbound replication for Freshservice
  4. Click Configure and select the Freshservice Workspace for this channel
3

Test replication

Create a test ticket in the channel to check outbound replication. For inbound replication, create a ticket in the selected Freshservice workspace using an agent other than the OAuth service account.

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. 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.
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.

Priority mapping

Ravenna priority levels map to Freshservice priority values:

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
Custom field synchronization is one-way (Ravenna to Freshservice). Changes to the comment in Freshservice do not sync back to Ravenna.

What syncs

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)
Freshservice to Ravenna, when the webhook and inbound replication are enabled:
  • Ticket creation from the selected Freshservice workspace
  • Ticket title, description, status, priority, and assignee updates
  • Notes and replies, including edits and deletions
Not synced:
  • 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 in the needed direction for the channel
  • Confirm the channel’s selected Freshservice Workspace matches the ticket’s workspace
  • For inbound changes, confirm the Freshservice workflow is active and sends the correct Secret header and ticket ID and event performer ID fields
  • 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 both directions with one channel first 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
Last modified on September 28, 2026