{"templateId":"markdown","sharedDataIds":{},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Passthrough Handler","description":"Accelerate E&P application development and protect your innovation by consuming our Data and Domain APIs / Platform APIs.","lang":"en-US","meta":[{"name":"robots","content":"noindex"}],"llmstxt":{"hide":true,"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"passthrough-handler","__idx":0},"children":["Passthrough Handler"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"introduction","__idx":1},"children":["Introduction"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Passthrough-Handler Edge App makes it easy to send message ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["through"]}," Agora Cloud by converting the"," ","message into an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IoDataReportPassThroughMsg"]}," and sending it to Agora Cloud. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IoDataReportPassThrough"]}," ","is a special type of message that allows messages to go through, untouched, to a webhook registered"," ","with Agora Cloud for a particular Agora Group / Gateway ID."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Data passed through Agora Cloud is queued for delivery to the registered webhook, and once delivered"," ","the message is removed from Agora Cloud."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"how-it-works","__idx":2},"children":["How it Works"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["IoDataReportPassThroughMsg"]}," is a special message type that Passthrough-Handler Edge App uses to construct a Passthrough message."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Currently, any MQTT message can be sent through the Passthrough-Handler, but the following message types are processed"," ","to allow filtering and optimization before sending:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["EventMsg"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RequestMsg"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["IoDataReportMsg - Device filtering provided via configuration"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["FileUpload"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Passthrough-Handler Edge App expects the message sent to it on respective topic for that particular"," ","type of message which needs to be sent as a passthrough message. For Ex. for IoDataReport Message originating"," ","from an Edge App should be sent on \"DataOut\" Topic to passthrough handler."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"supported-end-pointstopics","__idx":3},"children":["Supported End points/Topics"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Any message should be sent to the Passthrough-Handler Edge App over these topics depending on the above type of message."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["EventOut -> Event,"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RequestOut ->  Request/Response,"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["DataOut -> IODataReport,"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["File-> FileUpload."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["FIle-Upload"]},":- The Sender Edge App is expected to send the content of the file to be wrapped in json. For example:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"File\": \"File Content\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"iodatareportpassthrough---device-filtering","__idx":4},"children":["IoDataReportPassthrough - Device Filtering"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["It is possible to filter IoDataReport messages in the Passthrough app so that only particular device data is passed through Passthrough. If a virtual device is created in Nimbus with a specified slaveId for the passthrough application, the Passthrough App may be set for such devices in its configuration. This configuration can be modified from the outside by uploading an alternate configuration (AEA.json) through OpsAgent & FileManager."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"configuration-setting","__idx":5},"children":["Configuration setting:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Comma(',')-separated deviceIds can be provided in this parameter for devices that are permitted to send messages via the Passthrough App."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the Passthrough App's default configuration, no devices are defined, therefore messages will be sent to all devices unless they are set to filter."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n    \"App\" : {\n         \"Passthrough-Allowed-Devices\": \"256,258\"\n    }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"message-format","__idx":6},"children":["Message Format"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After receiving messages over these topics, Passthrough-Handler Edge App converts it to an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IoDataReportPassThroughMsg"]}," payload."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Message"]}," --> ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["This is test passthrough event"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["IODataPassThroughTelemetry"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/assets/iodatapassthroughtelemetry.8b5d393627f76c89e0077209b3a8a979bbe5e13fd3778fe948ba8a7ca0f38e1d.49ec4e1c.png"},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/iodatapassthroughtelemetry.8b5d393627f76c89e0077209b3a8a979bbe5e13fd3778fe948ba8a7ca0f38e1d.49ec4e1c.png","alt":"Passthrough-Handler"},"children":[]},"{ .img-thumbnail }"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["IODataReportPassThroughMsg"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/assets/iodatareportpassthroughmsg.3981c1c7d1fd3cf191dbd4e2451912f184296302e3297ee3dfb3857037c0eea0.49ec4e1c.png"},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/iodatareportpassthroughmsg.3981c1c7d1fd3cf191dbd4e2451912f184296302e3297ee3dfb3857037c0eea0.49ec4e1c.png","alt":"Passthrough-Handler"},"children":[]},"{ .img-thumbnail }"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Such payload is sent to ION as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IODataReportPassthrough"]}," message type which indicates Nimbus to forward message to Onesite, Onesite can decode the protobuf message and show data."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"data-flow","__idx":7},"children":["Data Flow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/assets/data-flow.cd9ed33e28a65582882d93aff1caa5c22fc5435cba2486183d000754156fbd6a.49ec4e1c.png"},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/data-flow.cd9ed33e28a65582882d93aff1caa5c22fc5435cba2486183d000754156fbd6a.49ec4e1c.png","alt":"Passthrough-Handler"},"children":[]},"{ .img-thumbnail }"]}]}]},"headings":[{"value":"Passthrough Handler","id":"passthrough-handler","depth":2},{"value":"Introduction","id":"introduction","depth":3},{"value":"How it Works","id":"how-it-works","depth":3},{"value":"Supported End points/Topics","id":"supported-end-pointstopics","depth":4},{"value":"IoDataReportPassthrough - Device Filtering","id":"iodatareportpassthrough---device-filtering","depth":4},{"value":"Configuration setting:","id":"configuration-setting","depth":4},{"value":"Message Format","id":"message-format","depth":4},{"value":"Data Flow","id":"data-flow","depth":3}],"frontmatter":{"seo":{"title":"Passthrough Handler"}},"lastModified":"2025-09-17T21:07:24.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/solutions/agora/components/passthrough-handler","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}