Upgrading custom app to V3.0 for FreshDesk Omni: Agent Status Dashboard not rendering

{
“platform-version”: “3.0”,
“engines”: {
“node”: “24.x”,
“fdk”: “10.x”
},
“modules”: {
“chat_conversation”: {
“location”: {
“conversation_sidebar”: {
“url”: “index.html”,
“icon”: “styles/images/icon.svg”
}
}
},
“common”: {
“requests”: {
“sendDataToBackend”: {}
}
}
},
“whitelisted-domains”: [
https://your-external-backend.com
]
}

What we beleive the correct load should be :
{
“platform-version”: “3.0”,
“engines”: {
“node”: “24.x”,
“fdk”: “10.x”
},
“modules”: {
“common”: {
“location”: {
“full_page_app”: {
“url”: “index.html”,
“icon”: “styles/images/icon.svg”
}
},
“requests”: {
“sendDataToBackend”: {}
}
},
“chat_conversation”: {}
},
“whitelisted-domains”: [
https://your-external-backend.com
]
}

Hi everyone,

I’m currently building a custom app intended to run within FreshDesk Omni. The goal of the app is to fetch and actively display real-time Agent Statuses on a landing page hosted on our server. Specifically, we need to display:

  • Agent Name

  • Conversation Group

  • Current Status

  • Time spent in the current status

The Challenge: We understand that to live within FreshDesk Omni, the app needs to be on platform version 3.0. We’ve built the app and attempted to structure our manifest for FDK 10.x and Node 24.x, but the app does not run or render in the Omni environment. We suspect there might be a mismatch in how we are declaring the product locations for Omni, or how V3.0 handles these specific module locations compared to the classic FDK.

Here is the current manifest.json payload we are trying to use: Attached into the HTML Box.

App Location: Is chat_conversationconversation_sidebar the correct module location for a FreshDesk Omni app? Since this is a dashboard to view all agents, would a global location (like the left navigation bar) be more appropriate, and if so, what is the correct V3.0 module key for Omni? We ideally would like to host it on a different page outside of the FreshDesk Omni isntance.

  1. Payload Structure: Are there any glaring issues with the manifest.json payload above for FDK 10 / V3.0?
  2. API Access: Are there any specific Omni-centric API endpoints or SMI (Server Method Invocation) configurations we should use to poll the active agent status and time spent?

Hi @Fernando_Garcia,

App location

chat_conversation → conversation_sidebar is not the right placement for an all-agent dashboard. That placeholder is conversation-scoped (per chat), not global.

For a dashboard in Freshdesk Omni, modules.common.location.full_page_app is the correct global placement. It appears in the left navigation as a standalone page inside Omni—not outside the Freshworks instance.

The proposed structure is closer, but support_agent should be included (not only chat_conversation) because agent status data and events live on that module.

Suggested manifest shape:

{
  "platform-version": "3.0",
  "engines": {
    "node": "24.11.0",
    "fdk": "10.0.1"
  },
  "modules": {
    "common": {
      "location": {
        "full_page_app": {
          "url": "index.html",
          "icon": "styles/images/icon.svg"
        }
      },
      "requests": {
        "sendDataToBackend": {}
      },
      "functions": {
        "getAgentStatuses": {}
      }
    },
    "support_agent": {},
    "chat_conversation": {}
  }
}

Manifest issues in the current payload

  1. whitelisted-domains — Removed in Platform 3.0. Outbound calls must use request templates in config/requests.json, declared under modules.common.requests, and invoked from server code via $request.invokeTemplate().
  2. conversation_sidebar — Not listed under chat_conversation in Platform 3.0 (valid placeholders there are conversation_message_editor, conversation_user_info, conversation_background). This mismatch can prevent rendering.
  3. Missing product module — At least one product module block is required (e.g. "support_agent": {}).
  4. Engines — Pin exact versions ("node": "24.11.0", "fdk": "10.0.1"), not "24.x" / "10.x".

Hosting outside Omni

Custom app UI cannot be hosted on an external domain outside Freshworks. The UI must run inside the product iframe. An external server can still be used as a backend via request templates + SMI; the dashboard itself should use full_page_app.

API / SMI for agent status

Need Approach
Agent list + profile Freshdesk REST via request template: GET /api/v2/agents (support_agent module)
Real-time status changes Serverless events on support_agent: onAgentAvailabilityUpdate, onAgentStatusUpdate
Omni/unified channel availability user_agent_availability module event: onUserAgentAvailabilityUpdate (where the subscription supports it)
Frontend polling SMI (client.request.invoke) → server handler → $request.invokeTemplate() — not direct frontend HTTP

“Time spent in current status” is not returned as a single field by default. It is usually derived by recording status-change timestamps from onAgentAvailabilityUpdate / onAgentStatusUpdate payloads and computing duration client-side or in serverless handlers.

Checks if the app still does not render

  1. fdk validate — 0 platform errors, 0 lint errors
  2. App installed on the Omni account with the correct modules subscribed
  3. app/index.html includes the Crayons CDN
  4. app/styles/images/icon.svg exists
  5. App opened from Apps → [your app] in the left nav (full-page placement), not from inside a conversation