findIntentsByContext
Desktop Agent bridging message exchange for a findIntent API call on the DesktopAgent. Generated by API call:
Message Exchange Type: Request Response (collated)
E.g. An application with appId agentA-app1 makes the following API call:
let appIntentArr = await fdc3.findIntentsByContext(context);
The message exchanges for this API call are nearly identical to that used for findIntent(), differing only by the lack of an intent field in the request message payload and the structure of the response message (where an array of AppIntents is returned).
Message exchange
Request format
Request message schemas
- https://fdc3.finos.org/schemas/next/bridging/findIntentsByContextAgentRequest.schema.json
- https://fdc3.finos.org/schemas/next/bridging/findIntentsByContextBridgeRequest.schema.json
Example
Outward message to the DAB:
// agent-A -> DAB
{
"type": "findIntentsByContextRequest",
"payload": {
"context": {/*contextObj*/},
"resultType": "fdc3.instrument"
},
"meta": {
"requestUuid": "<requestUuid>",
"timestamp": "2020-03-...",
"source": {
"appId": "agentA-app1",
"instanceId": "c6ad5174-6f78-4582-8e96-728d93a4d7d7"
}
}
}
The DAB fills in the source.desktopAgent field and forwards the request to the other Desktop Agents (agent-B AND agent-C).
// DAB -> agent-B
// DAB -> agent-C
{
"type": "findIntentsByContextRequest",
"payload": {
"context": {/*contextObj*/},
"resultType": "fdc3.instrument"
},
"meta": {
"requestUuid": "<requestUuid>",
"timestamp": "2020-03-...",
"source": {
"appId": "agentA-app1",
"instanceId": "c6ad5174-6f78-4582-8e96-728d93a4d7d7",
"desktopAgent": "agent-A" //added by DAB
}
}
}
Response format
Response message schemas
- https://fdc3.finos.org/schemas/next/bridging/findIntentsByContextAgentResponse.schema.json
- https://fdc3.finos.org/schemas/next/bridging/findIntentsByContextAgentErrorResponse.schema.json
- https://fdc3.finos.org/schemas/next/bridging/findIntentsByContextBridgeResponse.schema.json
- https://fdc3.finos.org/schemas/next/bridging/findIntentsByContextBridgeErrorResponse.schema.json
Example
An individual agent (for example agentB) would generate a local response as an array of AppIntent objects:
[
{
"intent": { "name": "StartChat" },
"apps": [
{ "appId": "Skype", "title": "Skype" /* other AppMetadata fields may be included */},
{ "appId": "Symphony", "title": "Symphony" },
{ "appId": "Symphony",
"instanceId": "93d2fe3e-a66c-41e1-b80b-246b87120859",
"title": "Symphony" },
{ "appId": "Slack", "title": "Slack" }
]
},
{
"intent": { "name": "ViewProfile" },
"apps": [
{ "appId": "myCRM", "title": "My CRM" },
{ "appId": "myCRM",
"instanceId": "93d2fe3e-a66c-41e1-b80b-246b87120859",
"title": "My CRM" }
]
}
]
This response is encoded and sent to the bridge as:
// agent-B -> DAB
{
"type": "findIntentsByContextResponse",
"payload": {
"appIntents": [
{
"intent": { "name": "StartChat" },
"apps": [
{ "appId": "Skype", "title": "Skype" /* other AppMetadata fields may be included */},
{ "appId": "Symphony", "title": "Symphony" },
{ "appId": "Symphony",
"instanceId": "93d2fe3e-a66c-41e1-b80b-246b87120859",
"title": "Symphony" },
{ "appId": "Slack", "title": "Slack" }
]
},
{
"intent": { "name": "ViewProfile" },
"apps": [
{ "appId": "myCRM", "title": "My CRM" },
{ "appId": "myCRM",
"instanceId": "93d2fe3e-a66c-41e1-b80b-246b87120859",
"title": "My CRM" }
]
}
]
},
"meta": {
"requestUuid": "<requestUuid>",
"responseUuid": "<responseUuidAgentB>",
"timestamp": "2020-03-...",
}
}
Each AppMetadata object is augmented by the bridge with a desktopAgent field, the responding DesktopAgentIdentifier value is added to the meta.sources element and the message payload is collated with responses from other agents into a response to the requesting agent:
// DAB -> agent-A
{
"type": "findIntentsByContextResponse",
"payload": {
"appIntents": [
{
"intent": { "name": "StartChat" },
"apps": [
//agent-B responses
{ "appId": "Skype", "title": "Skype", "desktopAgent": "agent-B" },
{ "appId": "Symphony", "title": "Symphony", "desktopAgent": "agent-B" },
{ "appId": "Symphony",
"instanceId": "93d2fe3e-a66c-41e1-b80b-246b87120859",
"title": "Symphony",
"desktopAgent": "agent-B" },
{ "appId": "Slack", "title": "Slack", "desktopAgent": "agent-B" },
//agent-C response
{ "appId": "WebIce", "desktopAgent": "agent-C"}
]
},
{
"intent": { "name": "ViewProfile" },
"apps": [
//agent-A responses
{ "appId": "myCRM", "title": "My CRM", "desktopAgent": "agent-B" },
{ "appId": "myCRM",
"instanceId": "93d2fe3e-a66c-41e1-b80b-246b87120859",
"title": "My CRM",
"desktopAgent": "agent-B" }
//agent-C responses
{ "appId": "riskToolkit", "title": "Client Risk Toolkit", "desktopAgent": "agent-C" },
{ "appId": "linkedIn", "title": "LinkedIn", "desktopAgent": "agent-C" }
]
}
]
},
"meta": {
"requestUuid": "<requestUuid>",
"responseUuid": "<responseUuidDAB>",
"timestamp": "2020-03-...",
"sources": [
{ "desktopAgent": "agent-B" },
{ "desktopAgent": "agent-C" }
]
}
}
Finally agent-A combines the payload received with it own response and returns it to the requesting application.