No Error No Status Sync

Hi everyone,

I’ve configured the outgoing sync script and incoming sync scrip on both Jira and Zendesk to ensure one-way synchronization. Specifically, the sync is designed so that any status updates made in Jira should reflect in Zendesk, but status updates made in Zendesk should not affect Jira.

Could someone from the community or support team help review the setup?

Out going Sync in Zendesk
// replica.status = issue.status

//replica.statusName = httpClient.get(“/api/v2/tickets/${issue.key}”)?.ticket?.status

Incoming sync of Zendesk

// STATUS MAPPING - Jira to Zendesk (one-way sync)
def statusMap = [
“OPEN”: “Escalated to L2”,
“TRIAGING IN PROGRESS”: “Escalated to L2”,
“FIX IN PROGRESS”: “Escalated to L2”,
“ADDITIONAL INFO REQUESTED FROM L1/USER”: “Pending”,
“ADDITIONAL INFO REQUESTED FROM VENDOR”: “Escalated to L2”,
“CONVERT TO PRODUCTION DEFECT”: “Escalated to L2”,
“CONVERTED TO ENHANCEMENT”: “Pending”,
“RESOLVED”: “Pending”
]

def remoteStatusName = replica.statusName ?: “Open”
log.info("Incoming status from Jira: " + remoteStatusName)

Outgoing sync in jira
// Send Jira status name to Zendesk

replica.statusName = issue.status.name

Incoming sync of Jira

// STATUS MAPPING - Zendesk to Jira

// Leave empty or do not use

def statusMap = [:]

def remoteStatusName = replica.statusName

issue.setStatus(statusMap[remoteStatusName] ?: “Open”)

Thanks in advance

Hi @Vineela,

Welcome to the Exalate community!

I’ve reviewed your script and noticed a couple of things:

  • In your Zendesk Incoming sync, the mapped status isn’t being set. You’re missing the issue.setStatus() method.

issue.setStatus(statusMap[remoteStatusName] ?: "Open")

  • You don’t need to handle status synchronization in the Jira Incoming sync, since the status is only being synced from Jira to Zendesk.

Here’s how your Incoming sync script in Zendesk should look:

def statusMap = [
  "OPEN": "Escalated to L2",
  "TRIAGING IN PROGRESS": "Escalated to L2",
  "FIX IN PROGRESS": "Escalated to L2",
  "ADDITIONAL INFO REQUESTED FROM L1/USER": "Pending",
  "ADDITIONAL INFO REQUESTED FROM VENDOR": "Escalated to L2",
  "CONVERT TO PRODUCTION DEFECT": "Escalated to L2",
  "CONVERTED TO ENHANCEMENT": "Pending",
  "RESOLVED": "Pending"
]

def remoteStatusName = replica.statusName
log.info("Incoming status from Jira: " + remoteStatusName)
issue.setStatus(statusMap[remoteStatusName] ?: "Open")

Let me know if applying these changes resolves the issue!

hey Javier,
Hope your doing good. I really appreciate your help and time
I did try the solution you have provided me
Here below I’m Going to provide to the error

The below error was trigger after the change in code

  • Impact: ISSUE
  • Local entity: 97704
  • Remote entity: TEFGS-5
  • Connection: test zendesk_to_Jira
  • Error type: Issue Tracker Error
  • Error Creation Time: Jun 10, 2025 14:31:17
  • Error Detail Message: Custom status is invalid
  • Error Stack Trace: zendesknode.services.exception.TicketErrorCollectionException: Custom status is invalid at zendesknode.services.node.client.ZendeskClient.filterResponse(ZendeskClient.scala:1266) at zendesknode.services.node.client.ZendeskClient.$anonfun$updateIssue$5(ZendeskClient.scala:1217) at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:470) at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:63) at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:100) at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18) at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94) at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:100) at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:49) at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:48) at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source) at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source) at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
  • Incoming sync data:
    Summary: test 5
    1.Entity Key:* TEFGS-5(id: 1103712)
    2.Encoded payload:* eyJ2ZXJzaW9uIjp7Im1ham9yIjoxLCJtaW5vciI6MTQsInBhdGNoIjowfSwiaHViSXNzdWUiOnsic3RhdHVzTmFtZSI6IkZpeCBpbiBQcm9ncmVzcyIsInZvdGVycyI6W10sImZpeFZlcnNpb25zIjpbXSwiaW50ZXJuYWxNYXAiOnsic3RhdHVzTmFtZSI6IkZpeCBpbiBQcm9ncmVzcyJ9LCJwcmlvcml0eSI6eyJpZCI6IjQiLCJuYW1lIjoiTG93In0sImxhYmVscyI6W10sImN1c3RvbUtleXMiOnt9LCJpc3N1ZVR5cGUiOnsiaWQiOiIxMDA1OSIsIm5hbWUiOiJJbmNpZGVudCJ9LCJlbnRpdHlQcm9wZXJ0aWVzIjp7fSwiY29tcG9uZW50cyI6W10sImF0dGFjaG1lbnRzIjpbXSwiY3VzdG9tRmllbGRzIjp7IkdXIENhdGVnb3J5Ijp7ImlkIjoxMDEwNSwibmFtZSI6IkdXIENhdGVnb3J5IiwidWlkIjoiMTAxMDUiLCJ0eXBlIjoiT1BUSU9OIiwidmFsdWUiOnsiaWQiOiIxMDM0NyIsInZhbHVlIjoiQW5vbWFseSJ9fSwiQnJhbmNoIG9yIERlcGFydG1lbnQiOnsiaWQiOjEwMTExLCJuYW1lIjoiQnJhbmNoIG9yIERlcGFydG1lbnQiLCJ1aWQiOiIxMDExMSIsInR5cGUiOiJPUFRJT04iLCJ2YWx1ZSI6eyJpZCI6IjEwMzU0IiwidmFsdWUiOiJBY3R1YXJpYWwtRGF0YSBTY2llbmNlIn19LCJHdWlkZXdpcmUgTnVtYmVyIjp7ImlkIjoxMDEwNiwibmFtZSI6Ikd1aWRld2lyZSBOdW1iZXIiLCJ1aWQiOiIxMDEwNiIsInR5cGUiOiJTVFJJTkciLCJ2YWx1ZSI6IjAxMjM2In0sIkxpbmUgb2YgQnVzaW5lc3MiOnsiaWQiOjEwMDUwLCJuYW1lIjoiTGluZSBvZiBCdXNpbmVzcyIsInVpZCI6IjEwMDUwIiwidHlwZSI6Ik9QVElPTiIsInZhbHVlIjp7ImlkIjoiMTAwODIiLCJ2YWx1ZSI6IlBhY2thZ2UifX0sIlRyYW5zYWN0aW9uIFR5cGUiOnsiaWQiOjEwMTA5LCJuYW1lIjoiVHJhbnNhY3Rpb24gVHlwZSIsInVpZCI6IjEwMTA5IiwidHlwZSI6Ik9QVElPTiIsInZhbHVlIjp7ImlkIjoiMTAzNDAiLCJ2YWx1ZSI6IkJDIFRyYW5zYWN0aW9ucyJ9fSwiU3lzdGVtIEVycm9yIE1lc3NhZ2UiOnsiaWQiOjEwMTA0LCJuYW1lIjoiU3lzdGVtIEVycm9yIE1lc3NhZ2UiLCJ1aWQiOiIxMDEwNCIsInR5cGUiOiJURVhUIn0sIlNlcnZpY2UgV29yayBBcmVhIjp7ImlkIjoxMDEwOCwibmFtZSI6IlNlcnZpY2UgV29yayBBcmVhIiwidWlkIjoiMTAxMDgiLCJ0eXBlIjoiT1BUSU9OIiwidmFsdWUiOnsiaWQiOiIxMDMxNyIsInZhbHVlIjoiQmlsbGluZyBDZW50ZXIifX19LCJldmVudFRyaWdnZXJDb250ZXh0Ijp7fSwiZGVzY3JpcHRpb24iOiJuZXcgdGVzdCBvbiBzeW5jIHN0YXR1cyIsIndhdGNoZXJzIjpbXSwia2V5IjoiVEVGR1MtNSIsInN1bW1hcnkiOiJ0ZXN0IDUiLCJjb21tZW50cyI6W10sIndvcmtMb2dzIjpbXSwiYWZmZWN0ZWRWZXJzaW9ucyI6W119LCJpc3N1ZVVybCI6Imh0dHBzOi8vZ255amlyYS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9URUZHUy01In0

also I’m providing you the local replica and remote replica

Local Replica:
{
“version”: {
“major”: 1,
“minor”: 14,
“patch”: 0
},
“hubIssue”: {
“statusName”: {
“id”: “open”,
“name”: “open”
},
“voters”: ,
“fixVersions”: ,
“internalMap”: {
“statusName”: {
“id”: “open”,
“name”: “open”
}
},
“priority”: {
“id”: “low”,
“name”: “low”
},
“labels”: ,
“customKeys”: {},
“issueType”: {
“id”: “incident”,
“name”: “incident”
},
“entityProperties”: {},
“components”: ,
“attachments”: ,
“customFields”: {
“GW Category”: {
“id”: 27911742802071,
“name”: “GW Category”,
“uid”: “27911742802071”,
“type”: “OPTION”,
“value”: {
“id”: “27911742802071”,
“value”: “anomaly”
}
},
“Branch/Dept.”: {
“id”: 1500009729141,
“name”: “Branch/Dept.”,
“uid”: “1500009729141”,
“type”: “OPTION”,
“value”: {
“id”: “1500009729141”,
“value”: “branch_actuarial-data_science”
}
},
“Guidewire Number”: {
“id”: 27907735181207,
“name”: “Guidewire Number”,
“uid”: “27907735181207”,
“type”: “STRING”,
“value”: “01236”
},
“Jira Assignee”: {
“id”: 27913186415895,
“name”: “Jira Assignee”,
“uid”: “27913186415895”,
“type”: “STRING”
},
“Line of Business”: {
“id”: 27580743394455,
“name”: “Line of Business”,
“uid”: “27580743394455”,
“type”: “OPTION”,
“value”: {
“id”: “27580743394455”,
“value”: “line_of_business_package”
}
},
“Transaction Type”: {
“id”: 27908768496407,
“name”: “Transaction Type”,
“uid”: “27908768496407”,
“type”: “OPTION”,
“value”: {
“id”: “27908768496407”,
“value”: “bc_transactions”
}
},
“System Error Message”: {
“id”: 27909663503511,
“name”: “System Error Message”,
“uid”: “27909663503511”,
“type”: “TEXT”
},
“Service Work Area”: {
“id”: 27769226286231,
“name”: “Service Work Area”,
“uid”: “27769226286231”,
“type”: “OPTION”,
“value”: {
“id”: “27769226286231”,
“value”: “work_area_billing_center”
}
}
},
“eventTriggerContext”: {},
“description”: “new test on sync status”,
“watchers”: ,
“key”: “97704”,
“summary”: “test 5”,
“comments”: ,
“workLogs”: ,
“affectedVersions”:
},
“issueUrl”: “https://gny.zendesk.com/agent/tickets/97704
}

Remote Replica:

{
“version”: {
“major”: 1,
“minor”: 14,
“patch”: 0
},
“hubIssue”: {
“statusName”: “Fix in Progress”,
“voters”: ,
“fixVersions”: ,
“internalMap”: {
“statusName”: “Fix in Progress”
},
“priority”: {
“id”: “4”,
“name”: “Low”
},
“labels”: ,
“customKeys”: {},
“issueType”: {
“id”: “10059”,
“name”: “Incident”
},
“entityProperties”: {},
“components”: ,
“attachments”: ,
“customFields”: {
“GW Category”: {
“id”: 10105,
“name”: “GW Category”,
“uid”: “10105”,
“type”: “OPTION”,
“value”: {
“id”: “10347”,
“value”: “Anomaly”
}
},
“Branch or Department”: {
“id”: 10111,
“name”: “Branch or Department”,
“uid”: “10111”,
“type”: “OPTION”,
“value”: {
“id”: “10354”,
“value”: “Actuarial-Data Science”
}
},
“Guidewire Number”: {
“id”: 10106,
“name”: “Guidewire Number”,
“uid”: “10106”,
“type”: “STRING”,
“value”: “01236”
},
“Line of Business”: {
“id”: 10050,
“name”: “Line of Business”,
“uid”: “10050”,
“type”: “OPTION”,
“value”: {
“id”: “10082”,
“value”: “Package”
}
},
“Transaction Type”: {
“id”: 10109,
“name”: “Transaction Type”,
“uid”: “10109”,
“type”: “OPTION”,
“value”: {
“id”: “10340”,
“value”: “BC Transactions”
}
},
“System Error Message”: {
“id”: 10104,
“name”: “System Error Message”,
“uid”: “10104”,
“type”: “TEXT”
},
“Service Work Area”: {
“id”: 10108,
“name”: “Service Work Area”,
“uid”: “10108”,
“type”: “OPTION”,
“value”: {
“id”: “10317”,
“value”: “Billing Center”
}
}
},
“eventTriggerContext”: {},
“description”: “new test on sync status”,
“watchers”: ,
“key”: “TEFGS-5”,
“summary”: “test 5”,
“comments”: ,
“workLogs”: ,
“affectedVersions”:
},
“issueUrl”: “Jira
}

It shows that the custom status is invalid,
But i have provided the exact values of status on Zendesk and Jira
On zendesk I was only using these 2 field values

Sorry i have missed my jira work flow

the field values are typed in exaclty same idk why does it even says custom status INVALID

Do you exalate cannot sync the custom field values? or am i missing out something

Hi @Vineela,

Thanks for the update!

Just a quick clarification regarding the status mapping in the Incoming Sync for Zendesk. I noticed that the statuses you used match the ones from your workflow, but not the actual values returned by the Jira API.

You can view the correct status values from your instance using this endpoint:
{Jira base URL}/rest/api/2/status

For example, instead of "OPEN", the API would return "name": "Open". Similarly, in the Jira Cloud replica you shared, the status appears as "statusName": "Fix in Progress"—not "FIX IN PROGRESS".

To ensure proper mapping, you’ll need to update the statuses in your Zendesk Incoming sync to reflect the actual API values. Based on what I’ve seen, the mappings should likely look something like this:

def statusMap = [
"To Do": "Escalated to L2",
"Triage in Progress": "Escalated to L2",
"Fix in Progress": "Escalated to L2",
// Add the rest of the mappings as needed...
]

Let me know if you have any questions or if you’d like help validating the correct values.