View a markdown version of this page

Implementazione delle operazioni di interfaccia del connettore C2C - Integrazioni gestite per AWS IoT Device Management

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementazione delle operazioni di interfaccia del connettore C2C

Managed Integrations for AWS IoT Device Management definisce quattro operazioni da gestire per qualificarsi come connettore. AWS Lambda Il connettore C2C deve implementare ognuna delle seguenti operazioni:

  1. AWS.ActivateUser- Managed Integrations for AWS IoT Device Management service richiama questa API per recuperare un identificatore utente univoco a livello globale. Per OAuth 2.0, questo è associato al token OAuth 2.0 fornito. Questa operazione può essere utilizzata opzionalmente per eseguire eventuali requisiti aggiuntivi per il processo di collegamento degli account.

  2. AWS.DiscoverDevices- Le integrazioni gestite per il AWS IoT Device Management servizio richiamano questa API al connettore per scoprire i dispositivi dell'utente

  3. AWS.SendCommand- Le integrazioni gestite per il AWS IoT Device Management servizio richiamano questa API al connettore per l'invio di comandi per i dispositivi dell'utente

  4. AWS.DeactivateUser- Managed Integrations for AWS IoT Device Management service richiama questa API al connettore per disattivare il token di accesso dell'utente da decollegare nel server di autorizzazione.

Dettagli di chiamata

Managed Integrations for AWS IoT Device Management always richiama la funzione Lambda con un payload di stringa JSON tramite l'azione. AWS Lambda invokeFunction Le operazioni di richiesta devono includere un operationName campo in ogni payload della richiesta.

Impostazioni di chiamata:

  • Timeout: 2 secondi per chiamata

  • Tentativi: 5 tentativi in caso di fallimento

Esempio di implementazione

La Lambda implementata per il connettore analizzerà an operationName dal payload della richiesta e implementerà la funzionalità corrispondente da mappare al cloud di terze parti:

public ConnectorResponse handleRequest(final ConnectorRequest request) throws OperationFailedException { Operation operation; try { operation = Operation.valueOf(request.payload().operationName()); } catch (IllegalArgumentException ex) { throw new ValidationException( "Unknown operation '%s'".formatted(request.payload().operationName()), ex ); } return switch (operation) { case ActivateUser -> activateUserManager.activateUser(request); case DiscoverDevices -> deviceDiscoveryManager.listDevices(request); case SendCommand -> sendCommandManager.sendCommand(request); case DeactivateUser -> deactivateUser.deactivateUser(request); }; }
Nota

Lo sviluppatore del connettore deve implementare le deactivateUser.deactivateUser operazioniactivateUserManager.activateUser(request), deviceDiscoveryManager.listDevices(request)sendCommandManager.sendCommand(request), e elencate nell'esempio precedente.

Esempi di formati di richiesta

Gli esempi seguenti descrivono in dettaglio le richieste di connettori generiche provenienti da Managed Integrations, in cui sono presenti campi comuni a ogni interfaccia richiesta. Dagli esempi, puoi vedere che esistono sia un'intestazione di richiesta che un payload della richiesta. Le intestazioni di richiesta sono comuni a tutte le interfacce operative.

Esempio OAuth 2.0:

{ "header": { "auth": { "token": "ashriu32yr97feqy7afsaf", "type": "OAuth2.0" } }, "payload":{ "operationName": "AWS.SendCommand", "operationVersion": "1.0", "connectorId": "exampleId", … } }

Esempio di autorizzazione generale:

{ "header": { "auth": { "secretsManager": { "arn": "string", "versionId": "string" }, "type": "GeneralAuthorization" } }, "payload":{ "operationName": "AWS.SendCommand", "operationVersion": "1.0", "connectorId": "exampleId", … } }

Intestazioni di richiesta predefinite

I campi di intestazione predefiniti variano a seconda del tipo di autorizzazione. Il connettore deve gestire sia le intestazioni di richiesta OAuth 2.0 che quelle di autorizzazione generale.

Intestazione predefinita OAuth 2.0:

{ "header": { "auth": { "token": string, // End user's Access Token "type": "OAuth2.0" } } }

Intestazione predefinita di autorizzazione generale:

{ "header": { "auth": { "secretsManager": { "arn": "string", "versionId": "string" }, "type": "GeneralAuthorization" } } }
Parametri dell'intestazione
Campo Required/Optional Descrizione

header:auth

Sì

Informazioni di autorizzazione fornite dal costruttore di connettori C2C durante la registrazione dei connettori.

header:auth:token

Condizionale

Token di autorizzazione dell'utente generato dal provider di servizi cloud di terze parti e collegato a. connectorAssociationID Richiesto per OAuth 2.0, non presente per l'autorizzazione generale.

header:auth:secretsManager

Condizionale

AWS Secrets Manager ARN e ID di versione contenenti le credenziali di autorizzazione. Richiesto per l'autorizzazione generale, non presente per OAuth 2.0.

header:auth:type

Sì

Il tipo di autorizzazione: OAuth2.0 o. GeneralAuthorization

Nota

Tutte le richieste al connettore includeranno informazioni di autorizzazione. Per OAuth 2.0, questo include il token di accesso dell'utente finale. Per l'autorizzazione generale, sono inclusi l' AWS Secrets Manager ARN e l'ID della versione. Si può presumere che l'autorizzazione appropriata sia già stata stabilita.

Richiedi Payload

Oltre alle intestazioni comuni, ogni richiesta avrà un payload. Sebbene questo payload abbia campi unici per ogni tipo di operazione, ogni payload ha una serie di campi predefiniti che saranno sempre presenti.

Richiedi i campi del payload:
  • operationName: L'operazione di una determinata richiesta, pari a uno dei seguenti valori:AWS.ActivateUser,, AWS.SendCommandAWS.DiscoverDevices,AWS.DeactivateUser.

  • operationVersion: Ogni operazione è suddivisa in versioni per consentirne l'evoluzione nel tempo e fornire una definizione di interfaccia stabile per connettori di terze parti. Managed Integrations inserisce un campo di versione nel payload di tutte le richieste.

  • connectorId: L'ID del connettore a cui è stata inviata la richiesta.

Intestazioni di risposta predefinite

Ogni operazione risponderà con una risposta ACK alle integrazioni gestite per AWS IoT Device Management che confermerà che il connettore C2C ha ricevuto la richiesta e ha iniziato a elaborarla.

Esempio Esempio di risposta generica
{ "header":{ "responseCode": 200 }, "payload":{ "responseMessage": “Example response!” } }
Esempio Formato dell'intestazione della risposta
{ "header": { "responseCode": Integer } }
Campo di intestazione della risposta
Intestazione e campo di risposta predefiniti
Campo Required/Optional Commento

header:responseCode

Sì

ENUM di valori che indicano lo stato di esecuzione della richiesta.

Nelle varie interfacce di connettore e schemi API descritti in questo documento è presente un responseMessage campo or. Message Questo è un campo opzionale utilizzato dal connettore C2C Lambda per rispondere con qualsiasi contesto relativo alla richiesta e alla sua esecuzione. Preferibilmente, qualsiasi errore che dia origine a un codice di stato diverso da 200 dovrebbe includere un valore di messaggio che descriva l'errore.

Rispondi alle richieste di funzionamento del connettore C2C con l'API SendConnectorEvent

Managed Integrations for AWS IoT Device Management prevede che il connettore si comporti in modo asincrono per ogni operazione. AWS.SendCommand AWS.DiscoverDevices Ciò significa che la risposta iniziale a queste operazioni «riconosce» semplicemente che il connettore C2C ha ricevuto la richiesta.

Utilizzando l'SendConnectorEventAPI, ci si aspetta che il connettore invii i tipi di eventi indicati nell'elenco seguente relativi AWS.SendCommand alle operazioni AWS.DiscoverDevices e alle operazioni, nonché gli eventi proattivi del dispositivo (come l'accensione e lo spegnimento manuale di una luce).

Esempio di workflow

Se il connettore C2C riceve una DiscoverDevices richiesta, Managed Integrations for AWS IoT Device Management prevede che:

  • Rispondi in modo sincrono con il formato di risposta definito sopra

  • Invoca l'SendConnectorEventAPI con un evento DEVICE_DISCOVERY

La chiamata SendConnectorEvent API può avvenire ovunque sia possibile accedere alle credenziali Lambda del connettore C2C. Account AWS Il flusso di rilevamento dei dispositivi non ha esito positivo finché le integrazioni gestite per AWS IoT Device Management non ricevono questo evento.

Nota

In alternativa, la chiamata SendConnectorEvent API può avvenire prima della risposta alla chiamata Lambda del connettore C2C, se necessario. Tuttavia, questo flusso contraddice il modello asincrono per lo sviluppo del software.

SendConnectorEvent API

Il connettore chiama queste integrazioni gestite per l'API AWS IoT Device Management per inviare eventi ai dispositivi. Sono accettati solo 3 tipi di eventi:

  • «DEVICE_DISCOVERY»: utilizzato per inviare l'elenco dei dispositivi rilevati all'interno del cloud di terze parti per un token di accesso specifico

  • «DEVICE_COMMAND_RESPONSE»: utilizzato per inviare un evento specifico del dispositivo a seguito dell'esecuzione del comando

  • «DEVICE_EVENT»: utilizzato per qualsiasi evento che proviene dal dispositivo che non è il risultato diretto di un comando basato sull'utente. Questo può servire come tipo di evento generale per segnalare in modo proattivo le modifiche allo stato del dispositivo o le notifiche