Custom Objects EAP Feedback

Below is a list of feature request and remarks for the Custom Objects EAP.

Custom Objects EAP Feedback
🗓️
Last update: April 24th 2023

Below is a list of feature request and remarks for the Custom Objects EAP.

To make the requests "easier" to understand I'll use a fictional scenario of Pokemon.

Preview: Creating a Pokédex with Zendesk Custom Objects
The awesome people at Zendesk just made the Custom Objects v2 EAP available.So why not build a Pokédex inside Zendesk to get to know the APIs 😉

Object Viewer

Create ticket for object

Scenario: I'm an agent who wants to create a ticket for an Asset. In our demo here: I know it's a Pokemon, it's a Charmander, and it's when I browse the list, Ash's Charmander.
If I already did the work of browsing the objects and finding the right Pokemon, a button to create a new ticket for this record would be handy.
Similar to the button to create a new ticket for a user when looking at their profile.

🤔
This might not be as straightforward as I thought. You could create multiple lookup fields referencing one Object Type, and then re-use these in one or more custom objects.
Creating a option to create a ticket for that objects would then almost require rebuilding the entire Form sidebar UI from the ticket view, at which point it’s easier to just use the Ticket UI anyhow since as a user you’re already halfway there.

Object overview

The Custom Object overview page currently shows only name, created_at, updated_at values in the table. It would be nice to be able to also show the details fields in this column to give more context.

(Or show the object on hover like tickets do)

Lookup Fields Search in ticket view

Currently only the name field is exposed. Searching on other objects could be useful to e.g.

  • Show a list all Pokemon owner by a trainer ( custom_object_fields.trainer lookup field for users ) by entering their name in the lookup field
  • Show a list of all fire Pokemon ( custom_object_fields.type lookup field for Type Object)

Similar users might search for Microsoft and expect Office365 license to show up.

Duplicate Object

Zendesk Community post

It might be useful to have a duplicate button next to edit and delete. Customers who have complex objects (e.g. licenses with lots of conditions,  or assets that exist multiple times like laptops or printers) might be easier duplicated than recreated if a similar record needs to be added to the inventory.

API

List records for user

Community Post Link

When using Custom Objects via API to

  • create an overview for an end-user of their pokemon
  • to create a sidebar app that lists all pokemon owned by that user.

Currently the Custom Object search only searches by name, and the relationships API endpoint for lookup fields only applies to ticket, user or organization fields.

Something akin to this would be handy. Searching custom_object_fields and the owner field (user lookup) returns all records matching that relationship.

curl https://{subdomain}.zendesk.com/api/v2/custom_objects/{custom_object_key}/records/autocomplete?custom_object_fields.trainer=12345678

Sideloading

Zendesk Community link

Imagine doing a request to /api/v2/custom_objects/pokemon_captured/records/{record_id}.json

This now returns the following object:

{
	"custom_object_record": {
		"url": "https://d3v-verschoren.zendesk.com/api/v2/custom_objects/pokemon_captured/records/01GXXWZ8GWTDSTNEQHFZV02RAQ.json",
		"id": "01GXXWZ8GWTDSTNEQHFZV02RAQ",
		"name": "Ash's Bulbasaur",
		"custom_object_key": "pokemon_captured",
		"custom_object_fields": {
			"hp": 42,
			"pokeball": "01GXXWVG2SG5QNFE6KEG9S0S5B",
			"pokemon_species": "01GXXWN869WA5X6SSQKHSC7RJD",
			"shiny": false,
			"trainer": "10992004688146"
		},
		"created_by_user_id": "362397585840",
		"updated_by_user_id": "362397585840",
		"created_at": "2023-04-13T18:10:17Z",
		"updated_at": "2023-04-13T18:10:17Z",
		"external_id": null
	}
}

With pokeball and trainer and pokemon_species linked objects via lookup fields.

To gather that data to show in a sidebar app or user profile we would need to make 3 additional API calls to gather those object records.

As a developer, something akin to this would be faster:

/api/v2/custom_objects/pokemon_captured/records/{record_id}.json?include=trainer,pokeball,pokemon_species

Which would then return a more complete object. Probably a lot heavier on your server/databases, but a bit more lean to develop against?

{
	"custom_object_record": {
		"url": "https://d3v-verschoren.zendesk.com/api/v2/custom_objects/pokemon_captured/records/01GXXWZ8GWTDSTNEQHFZV02RAQ.json",
		"id": "01GXXWZ8GWTDSTNEQHFZV02RAQ",
		"name": "Ash's Bulbasaur",
		"custom_object_key": "pokemon_captured",
		"custom_object_fields": {
			"hp": 42,
			"pokeball": {
                "id": "01GXXWVG2SG5QNFE6KEG9S0S5B",
                "name": "Ultra ball",
				...
            },
			"pokemon_species": {
            	"id":"01GXXWN869WA5X6SSQKHSC7RJD",
                "name":"Bulbasaur",
                ...
            },
			"shiny": false,
			"trainer": {
				"id":"10992004688146",
                "name":"Ash",
                ...
            }
		},
		"created_by_user_id": "362397585840",
		"updated_by_user_id": "362397585840",
		"created_at": "2023-04-13T18:10:17Z",
		"updated_at": "2023-04-13T18:10:17Z",
		"external_id": null
	}
}

Create or Update endpoint

Our customers (we're a Zendesk Partner) often require us to regularly import new data.

For end-users the create_or_update or create_or_update_many endpoints are pretty cool. They allow us to bulk upload a hunderd records at a time, and records in Zendesk are then created or updated based on matching email.

Similarly an endpoint for Custom Object Records where external_id or name are the key identifiers would make bulk import/update a lot faster than the current flow where we need to create the items 1 by 1.

Custom Object Records

Additional Field Types

  • URL
  • Image (URL)
  • Attachment (Base64 blob or real Zendesk attachment)

One-to-many Lookup Fields

Zendesk Community Post

A lookup field on ticket level currently can contain only one object. E.g. This ticket is about my order X.

There might be a scenario where a customer wants to log an issue against multiple items.

  • Water damage and my laptop and iphone are broken
  • Certificate experation for both our website and webshop that needs renewal
  • An order with two missing items
  • ...

Update:

You can get this to work with a junction object that basically links Orders and Products by creating an Orderline object. Or a Team members object that links a trainers' team and the captured Pokemon.