Esempio di codice Javascript per recuperare l’ID client, convalidarlo e quindi restituirlo nell’intestazione della risposta
Novità
Introduzione
- Guida introduttiva per gli amministratori
- Guida introduttiva per gli utenti
- Per gli sviluppatori
- Libreria tutorial video
- Domande frequenti
Amministrazione
- Panoramica su Admin Console
- Gestione degli utenti
- Aggiunta di utenti
- Creare utenti con funzioni specifiche
- Verificare la presenza di utenti con errori di provisioning
- Modificare il nome/l’indirizzo e-mail
- Modificare l’iscrizione a un gruppo di un utente
- Modificare l’iscrizione a un gruppo di un utente tramite l’interfaccia del gruppo
- Promuovere un utente a un ruolo di amministratore
- Tipi di identità utente e SSO
- Cambiare l’identità utente
- Autenticare gli utenti con Microsoft Azure
- Autenticare gli utenti con la Federazione Google
- Profili di prodotti
- Esperienza di accesso
- Impostazioni account/gruppo
- Panoramica delle impostazioni
- Impostazioni generali
- Livello e ID account
- Nuova esperienza del destinatario
- Flussi di lavoro per firma autonoma
- Invia in modalità collettiva
- Moduli web
- Flussi di lavoro di invio personalizzati
- Flussi di lavoro Power Automate
- Documenti libreria
- Raccogliere i dati modulo con gli accordi
- Visibilità limitata dei documenti
- Allegare una copia PDF dell’accordo firmato
- Includere un collegamento nell’e-mail
- Includere un’immagine nell’e-mail
- Denominazione dei file allegati alle e-mail
- Allegare report di audit ai documenti
- Unire più documenti in uno solo
- Scarica documenti singoli
- Caricare un documento firmato
- Delega per utenti nel mio account
- Consentire la delega ai destinatari esterni
- Autorizzazione a firmare
- Autorizzazione a inviare
- Autorizzazione all’aggiunta di sigilli elettronici
- Impostare un fuso orario predefinito
- Impostare un formato data predefinito
- Utenti in più gruppi
- Autorizzazioni amministratore gruppo
- Sostituzione del destinatario
- Report di audit
- Messaggi e assistenza nel prodotto
- PDF accessibili
- Nuova esperienza di creazione
- Cliente nel settore sanitario
- Configurazione dell’account
- Aggiungere un logo
- Personalizzare nome host/URL dell’azienda
- Aggiungere il nome dell’azienda
- Reindirizzamento URL post-accordo
- Preferenze firma
- Firme formattate correttamente
- Consentire ai destinatari di firmare
- I firmatari possono cambiare il nome
- Consentire ai destinatari di usare la propria firma salvata
- Personalizzare le Condizioni d'uso e l’Informativa cliente
- Guida per i destinatari ai campi del modulo
- Rifiuto di firmare
- Consentire flussi di lavoro con timbri
- Chiedere ai firmatari di fornire il proprio Titolo o Azienda
- Consentire ai firmatari di stampare e apporre una firma manuale
- Mostrare i messaggi durante la firma elettronica
- Chiedere ai firmatari di creare la firma con un dispositivo mobile
- Richiedere indirizzo IP dei destinatari
- Escludere il nome dell’azienda e il titolo dai timbri di partecipazione
- Firme digitali
- Sigilli elettronici
- Identità digitale
- Impostazioni report
- Nuova esperienza per i report
- Impostazioni per report Classic
- Impostazioni di protezione
- Impostazioni Single Sign-on
- Impostazioni Ricordami
- Criterio password di accesso
- Forza password di accesso
- Durata sessione Web
- Tipo cifratura PDF
- API
- Accesso a informazioni su utenti e gruppi
- Intervalli IP consentiti
- Condivisione account
- Permessi di condivisione account
- Controlli di condivisione accordi
- Verifica identità firmatario
- Password per firma accordo
- Forza password del documento
- Blocca firmatari tramite geolocalizzazione
- Autenticazione tramite telefono
- Autenticazione basata su conoscenza (KBA)
- Consentire estrazione pagina
- Scadenza del link del documento
- Caricare un certificato client per webhook/richiamata
- Marca temporale
- Impostazioni di invio
- Mostrare la pagina Invia dopo l’accesso
- Richiedere il nome del destinatario all’invio
- Bloccare i valori dei nomi per gli utenti noti
- Ruoli destinatario consentiti
- Consentire e-Witnesses
- Gruppi di destinatari
- Campi obbligatori
- Creazione di documenti allegati
- Appiattisci i campi
- Modificare gli accordi
- Nome dell’accordo
- Lingue
- Messaggi privati
- Tipi di firma consentiti
- Promemoria
- Protezione con password di documenti firmati
- Invia notifica di invio accordo tramite
- Opzioni di identificazione firmatari
- Protezione contenuti
- Abilitare transazioni Notarize
- Scadenza documento
- Mostrare l’anteprima, posizionare le firme e aggiungere campi
- Ordine di firma
- Liquid Mode
- Controlli per flusso di lavoro personalizzato
- Opzioni di caricamento per la pagina di firma elettronica
- Reindirizzamento URL di conferma post-firma
- Modelli messaggio
- Impostazioni Bio-Pharma
- Integrazione flusso di lavoro
- Impostazioni autenticazione
- Integrazione per pagamenti
- Messaggi per firmatari
- Impostazioni SAML
- Configurazione SAML
- Installare Microsoft Active Directory Federation Service
- Installare Okta
- Installare OneLogin
- Installare Oracle Identity Federation
- Configurazione SAML
- Governance dei dati
- Impostazioni marca temporale
- Archivio esterno
- Lingue account
- Impostazioni e-mail
- Migrazione da echosign.com ad adobesign.com
- Configurare le opzioni per i destinatari
- Linee guida per i requisiti normativi
- Accessibilità
- HIPAA
- GDPR
- 21 CFR parte 11 ed EudraLex Annex 11
- Clientela del settore sanitario
- Supporto IVES
- Accordi di “archiviazione”
- Considerazioni UE/Regno Unito
- Download di accordi in modalità collettiva
- Richiedere il proprio dominio
- Collegamenti Segnala abuso
Inviare, firmare e gestire gli accordi
- Opzioni destinatari
- Annullare un promemoria tramite e-mail
- Opzioni disponibili nella pagina di firma elettronica
- Panoramica della pagina di firma elettronica
- Aprire per leggere l’accordo senza campi
- Rifiutare di firmare un accordo
- Delegare autorizzazioni di firma
- Riavviare l’accordo
- Scaricare un file PDF dell’accordo
- Visualizzare la cronologia dell’accordo
- Visualizzare i messaggi dell’accordo
- Convertire una firma elettronica in una manuale
- Convertire una firma da manuale a elettronica
- Aggiungere i campi modulo
- Cancellare i dati dai campi modulo
- Navigazione e ingrandimento della pagina Firma elettronica
- Cambiare la lingua utilizzata nelle informazioni e negli strumenti per gli accordi
- Rivedere le note legali
- Regolare le preferenze dei cookie Acrobat Sign
- Inviare gli accordi
- Panoramica sulla pagina Invia
- Inviare un accordo solo a se stessi
- Inviare un accordo agli altri
- Firme manuali
- Ordine di firma del destinatario
- Invia in modalità collettiva
- Panoramica della funzione Invia in modalità collettiva
- Invio in modalità collettiva: configurare un modello principale
- Invio in modalità collettiva: configurare un file CSV
- Annullare una transazione per l’invio in modalità collettiva
- Aggiungere promemoria all’invio in modalità collettiva
- Reporting per Invia in modalità collettiva
- Authoring dei campi nei documenti
- Ambiente di authoring in-app
- Rilevamento automatico dei campi
- Trascinare i campi utilizzando l’ambiente di authoring
- Assegnare i campi modulo ai destinatari
- Ruolo di precompilazione
- Applicare campi con un modello per campi riutilizzabili
- Trasferire i campi in un nuovo modello libreria
- Ambiente di authoring aggiornato durante l’invio degli accordi
- Creare moduli e tag di testo
- Creare moduli con Acrobat (AcroForms)
- Campi
- Domande frequenti sull’authoring
- Ambiente di authoring in-app
- Firmare gli accordi
- Gestire gli accordi
- Panoramica della pagina Gestisci
- Delegare gli accordi
- Sostituire i destinatari
- Limitare la visibilità del documento
- Annullare un accordo
- Creare nuovi promemoria
- Revisione dei promemoria
- Annullare un promemoria
- Accedere ai flussi Power Automate
- Altre azioni...
- Come funziona la ricerca
- Visualizzare un accordo
- Creare un modello da un accordo
- Nascondere/Mostrare gli accordi nella visualizzazione
- Caricare un accordo firmato
- Modificare i file e i campi di un accordo inviato
- Modificare il metodo di autenticazione di un destinatario
- Aggiungere o modificare una data di scadenza
- Aggiungere una nota a un accordo
- Condividere un singolo accordo
- Annullare la condivisione di un accordo
- Scaricare un singolo accordo
- Scaricare i singoli file di un accordo
- Scaricare il report di audit di un accordo
- Scaricare il contenuto dei campi di un accordo
- Report di audit
- Rapporti ed esportazioni di dati
- Panoramica
- Concedere agli utenti l’accesso al reporting
- Grafici del report
- Esportazioni di dati
- Rinominare un report o un’esportazione
- Duplicare un report o un’esportazione
- Pianificare un report o un’esportazione
- Eliminare un report o un’esportazione
- Verificare l’utilizzo delle transazioni
Funzionalità e flussi di lavoro avanzati per gli accordi
- Moduli web
- Modelli riutilizzabili (Modelli libreria)
- Moduli per la Pubblica amministrazione degli Stati Uniti nella libreria Acrobat Sign
- Creare un modello libreria
- Modificare il nome di un modello libreria
- Modificare il tipo di un modello libreria
- Modificare il livello di autorizzazione di un modello libreria
- Copiare, modificare e salvare un modello condiviso
- Scaricare i dati dei campi aggregati per un modello libreria
- Trasferire la proprietà dei moduli web e dei modelli libreria
- Flussi di lavoro Power Automate
- Panoramica dell’integrazione Power Automate e diritti inclusi
- Abilitare l’integrazione di Power Automate
- Azioni nel contesto sulla pagina Gestisci
- Tracciare l’utilizzo di Power Automate
- Creare un nuovo flusso (esempi)
- Trigger utilizzati per i flussi
- Importazione di flussi dall’esterno di Acrobat Sign
- Gestire i flussi
- Modificare i flussi
- Condividere i flussi
- Disabilitare o abilitare i flussi
- Eliminare i flussi
- Modelli utili
- Solo per l’amministratore
- Archiviazione dell’accordo
- Archiviazione del modulo web dell’accordo
- Salvare i documenti dei moduli web completati nella libreria di SharePoint
- Salvare i documenti dei moduli web completati in OneDrive for Business
- Salvare i documenti completati in Google Drive
- Salvare i documenti dei moduli web completati in Box
- Estrazione dati dall’accordo
- Notifiche per l’accordo
- Inviare notifiche e-mail personalizzate con i contenuti dell’accordo e l’accordo firmato
- Ricevere le notifiche di Adobe Acrobat Sign in un canale Teams
- Ricevere le notifiche di Adobe Acrobat Sign in Slack
- Ricevere le notifiche di Adobe Acrobat Sign in Webex
- Generazione degli accordi
- Generare un documento da modulo Power App e modello Word e inviarlo per la firma
- Generare un accordo da un modello Word in OneDrive e ottenere la firma
- Generare un accordo per la riga Excel selezionata, inviarlo per revisione e firma
- Flussi di lavoro di invio personalizzati
- Condividere utenti e accordi
Integrazione con altri prodotti
- Panoramica delle integrazioni di Acrobat Sign
- Acrobat Sign per Salesforce
- Acrobat Sign per Microsoft
- Altre integrazioni
- Integrazioni gestite dai partner
- Come ottenere una chiave di integrazione
Acrobat Sign per sviluppatori
- API REST
- Webhook
Supporto e risoluzione dei problemi
Panoramica
Un webhook è una richiesta HTTPS definita dall’utente che viene attivata quando si verifica un evento di abbonamento nel sito di origine (Adobe Acrobat Sign in questo caso).
In pratica, un webhook non è altro che un servizio REST che accetta dati o flussi di dati.
I webhook sono pensati per la comunicazione service-to-service in un Modello PUSH.
Quando viene attivato un evento di abbonamento, Acrobat Sign crea un POST HTTPS con un corpo JSON e lo invia all’URL specificato.
Prima di configurare i webhook, assicurati che la tua rete accetti gli intervalli IP necessari per la funzionalità.
I webhook offrono numerosi vantaggi rispetto al precedente metodo di richiamata, tra cui:
- Gli amministratori possono abilitare i propri webhook senza dover coinvolgere il supporto di Acrobat Sign per indicare l’URL di richiamata
- I webhook sono migliori in termini di “freschezza” dei dati, efficienza della comunicazione e sicurezza. Nessuna votazione richiesta
- I webhook consentono facilmente diversi livelli di ambito (Account/Gruppo/Utente/Risorsa).
- I webhook sono una soluzione API più moderna, che consente una configurazione più semplice per applicazioni moderne
- È possibile configurare più webhook per ambito (Account/Gruppo/Utente/Risorsa) in cui le richiamate devono essere univoche.
- I webhook consentono di restituire la selezione dei dati, in cui le richiamate sono una soluzione “tutto o niente”
- È possibile configurare i metadati trasportati con un webhook (di base o dettagliato)
- I webhook sono molto più facili da creare, modificare o disabilitare in base alle esigenze, poiché l’interfaccia utente è interamente sotto il controllo dell’amministratore.
Questo documento è incentrato principalmente sull’interfaccia utente dei webhook nell’applicazione web Acrobat Sign (in precedenza Adobe Sign).
Gli sviluppatori alla ricerca di dettagli API possono trovare ulteriori informazioni qui:
Prerequisiti
È necessario consentire intervalli IP per webhook tramite la sicurezza di rete affinché il servizio funzioni.
Il servizio URL di richiamata precedente in REST v5 utilizza gli stessi intervalli IP del servizio webhook.
Gli amministratori possono accedere ad Adobe Admin Console per aggiungere gli utenti. Una volta effettuato l’accesso, accedi al menu dell’amministratore e scorri verso il basso fino a Webhook.
Come utilizzare questa funzionalità
Gli amministratori dovranno prima disporre di un servizio webhook, in grado di accettare il push in entrata da Acrobat Sign. In merito, ci sono numerose opzioni e fino a quando il servizio può accettare richieste POST e GET, il webhook andrà a buon fine.
Una volta installato il servizio, un amministratore di Acrobat Sign può creare un nuovo webhook dall'interfaccia Webhook nel menu Account del sito Acrobat Sign.
Gli amministratori possono configurare il webhook per attivare gli eventi Accordo, Moduli Web (Widget) o Invio in modalità collettiva (MegaSign). La risorsa Modello libreria (Documento libreria) può anche essere configurata tramite l’API.
L’ambito del webhook può includere l’intero account o i singoli gruppi tramite l’interfaccia di amministrazione. L'API consente una maggiore granularità attraverso la selezione degli ambiti UTENTE o RISORSA.
Il tipo di dati che vengono inviati all’URL è configurabile e può includere informazioni sull’accordo, sul partecipante, sul documento e così via.
Una volta configurato e salvato il webhook, Acrobat Sign trasmetterà un nuovo oggetto JSON all’URL definito ogni volta che l’evento di abbonamento viene attivato. Non è necessaria alcuna modifica in corso del webhook, a meno che non si desideri modificare i criteri di attivazione dell’evento o il payload JSON.
Verifica dell’intento dell’URL del webhook
Prima di registrare correttamente un webhook, Acrobat Sign verifica che l’URL del webhook indicato nella richiesta di registrazione sia effettivamente in grado di ricevere notifiche. A questo scopo, quando Acrobat Sign riceve una nuova richiesta di registrazione del webhook, effettua prima una richiesta di verifica all’URL del webhook. Questa richiesta di verifica è un GET HTTPS inviato all'URL del webhook. Questa richiesta ha un'intestazione HTTP personalizzata X-AdobeSign-ClientId. Il valore in questa intestazione viene impostato sull’ID client (ID applicazione) dell’applicazione API che richiede di creare/registrare il webhook. Per registrare correttamente un webhook, il relativo URL deve rispondere a questa richiesta di verifica con un codice di risposta 2XX E, inoltre, DEVE restituire lo stesso valore di ID client in uno dei due modi seguenti:
- In un’intestazione di risposta X-AdobeSign-ClientId. Si tratta della stessa intestazione trasmessa nella richiesta, inclusa anche nella risposta.
- Oppure nel corpo della risposta JSON con chiave xAdobeSignClientId. Il suo valore corrisponde all’ID client inviato nella richiesta.
Il webhook sarà registrato correttamente solo su risposta corretta (codice di risposta 2XX) e convalida dell'ID client sia nell'intestazione che nel corpo della risposta. Lo scopo di questa richiesta di verifica è dimostrare che l’URL del webhook desidera effettivamente ricevere notifiche su tale URL. Se hai inserito involontariamente l’URL errato, questo non risponderà correttamente alla verifica della richiesta di intento e Acrobat Sign non invierà alcuna notifica a tale URL. Inoltre, l’URL del webhook può anche convalidare la ricezione di notifiche solo attraverso i webhook registrati da una specifica applicazione. Questo può essere fatto convalidando l’ID client dell’applicazione approvata nell'intestazione X-AdobeSign-ClientId. Se l’URL del webhook non riconosce l’ID client, NON DEVE rispondere con il codice di risposta positivo e Acrobat Sign farà in modo che l’URL non sia registrato come webhook.
La verifica della chiamata all’URL del webhook verrà effettuata nei seguenti casi:
- Registrazione webhook: se la verifica della chiamata all’URL del webhook ha esito negativo, il webhook non verrà creato.
- Aggiornamento webhook: da INATTIVO a ATTIVO: se la verifica della chiamata all’URL del webhook ha esito negativo, lo stato del webhook non verrà modificato in ATTIVO.
Come rispondere a una notifica webhook
Acrobat Sign esegue una verifica implicita dell’intento in ogni richiesta di notifica webhook inviata all’URL del webhook. Pertanto, ogni richiesta HTTPS di notifica webhook contiene anche l’intestazione HTTP personalizzata X-AdobeSign-ClientId. Il valore di questa intestazione è l’ID client (ID applicazione) dell’applicazione che ha creato il webhook. Considereremo l’avvenuto recapito della notifica webhook se, e solo se, viene restituita una risposta di esito positivo (codice di risposta 2XX) e viene inviato l’ID client nell’intestazione HTTP (X-AdobeSign-ClientId) oppure in un corpo della risposta JSON con chiave xAdobeSignClientId e con il valore dello stesso ID client. In caso contrario, riproveremo a recapitare la notifica all’URL del webhook fino a quando non saranno esauriti i tentativi.
Come indicato in precedenza, il valore dell’intestazione 'X-AdobeSign-ClientId' che è inclusa in ogni richiesta di notifica da Sign (id client) deve essere ripetuto in una delle seguenti modalità:
1. Intestazione HTTP X-AdobeSign-ClientId e lo stesso valore di questo ID client
|
---|
// Recupero id client var clientid = request.headers['X-ADOBESIGN-CLIENTID'];
//Esegui convalida if (clientid ==="BGBQIIE7H253K6") //sostituisci 'BGBQIIE7H253K6' con l’id client dell’applicazione con cui si crea il webhook { //Restituisce nell’intestazione della risposta response.headers['X-AdobeSign-ClientId'] = clientid; response.status = 200; // valore predefinito } |
Esempio di codice PHP per recuperare l’ID client, convalidarlo e restituirlo nell’intestazione della risposta |
---|
<?php // Recupero id client $clientid = $_SERVER['HTTP_X_ADOBESIGN_CLIENTID']; //Esegui convalida if($clientid == "BGBQIIE7H253K6") //sostituisci 'BGBQIIE7H253K6' con l’ID client dell’applicazione con cui si crea il webhook { //Restituisce nell’intestazione della risposta header("X-AdobeSign-ClientId:$clientid"); header("HTTP/1.1 200 OK"); // valore predefinito } ?> |
2. Il corpo della risposta JSON con chiave xAdobeSignClientId e con lo stesso valore dell’ID client
Esempio di codice Javascript per recuperare l’ID client, convalidarlo e restituirlo nel corpo della risposta |
---|
// Recupero id client var clientid = request.headers['X-ADOBESIGN-CLIENTID'];
//Esegui convalida if (clientid ==="BGBQIIE7H253K6") //sostituisci 'BGBQIIE7H253K6' con l’id client dell’applicazione con cui si crea il webhook { var responseBody = { "xAdobeSignClientId" : clientid // Restituisce l’ID client nel corpo }; response.headers['Content-Type'] = 'application/json'; response.body = responseBody; response.status = 200; } |
Esempio di codice PHP per recuperare l’ID client, convalidarlo e restituirlo nel corpo della risposta |
---|
<?php // Recupero id client $clientid = $_SERVER['HTTP_X_ADOBESIGN_CLIENTID']; //Esegui convalida if($clientid == "BGBQIIE7H253K6") //sostituisci 'BGBQIIE7H253K6' con l’ID client dell’applicazione con cui si crea il webhook { //Restituisce nel corpo della risposta header("Content-Type: application/json"); $body = array('xAdobeSignClientId' => $clientid); echo json_encode($body); header("HTTP/1.1 200 OK"); // valore predefinito } ?> |
Esempio di corpo JSON della risposta |
---|
{ "xAdobeSignClientId": "BGBQIIE7H253K6" } |
Prerequisiti
Avrai bisogno di:
- Un account Microsoft con licenza per la creazione di applicazioni di Funzioni di Azure
- Un’applicazione di Funzioni di Azure esistente: puoi crearne una visitando https://docs.microsoft.com/it-it/azure/azure-functions/functions-create-first-azure-function
- Conoscenza di base di JavaScript, per comprendere e scrivere il codice in qualsiasi lingua
Procedura per creare un trigger di Funzioni di Azure che funga da webhook di Acrobat Sign
Per creare una funzione trigger HTTP Javascript:
1. Accedi tramite il tuo account Microsoft https://portal.azure.com/
2. Apri l’applicazione di Funzioni di Azure visualizzata nella scheda App per le funzioni.
Si apre l’elenco delle applicazioni di Funzioni di Azure:
3. Scegli l’applicazione in cui creare la nuova funzione
4. Per creare una nuova funzione di Azure, fai clic sul pulsante Crea (+)
5. Seleziona Webhook e API come scenario e Javascript come lingua
6. Fai clic su Creare questa funzione
Viene creata una nuova funzione che ha la capacità di gestire una richiesta API in ingresso.
Aggiungere la logica per registrare il webhook di Acrobat Sign
Prima di registrare un webhook, Acrobat Sign verifica che l’URL del webhook indicato nella richiesta di registrazione sia effettivamente in grado di ricevere notifiche. A questo scopo, quando Acrobat Sign riceve una nuova richiesta di registrazione del webhook, inizialmente effettua una richiesta di verifica all’URL del webhook. Questa richiesta di verifica è del tipo GET HTTPS e viene inviata all’URL del webhook con un’intestazione HTTP personalizzata X-AdobeSign-ClientId. In questa intestazione, il valore viene impostato sull’ID client dell’applicazione che richiede di creare/registrare il webhook. Per registrare un webhook, l’URL corrispondente deve rispondere a questa richiesta di verifica con un codice di risposta 2XX. Inoltre, l’URL può restituire lo stesso valore dell’ID client con una delle seguenti modalità.
Sono disponibili due opzioni:
Opzione 1: passare l’ID client a X-AdobeSign-ClientId come intestazione della risposta
Passare X-AdobeSign-ClientId nell’intestazione della risposta. Si tratta della stessa intestazione trasmessa nella richiesta, che viene ripetuta nella risposta.
Sostituisci il file Index.js con il seguente snippet di codice:
module.exports = function (context, req) {
var clientId = req.headers['x-adobesign-clientid'];
// Verifica che il ClientID in ingresso sia autentico
if (clientId === '123XXX456') {
context.res = {
// status: 200, /* Il valore predefinito è 200 */ // qualsiasi risposta 2XX è accettabile
body: "Notifica accettata",
headers : {
'x-adobesign-clientid' : req.headers['x-adobesign-clientid']
}
};
}
else {
context.res = {
status: 400,
body: "Opps!! Chiamata illegittima identificata"
};
}
context.done();
};
Verifica il comportamento eseguendo una richiesta fittizia:
1. Fai clic sul pulsante Test nell’angolo all’estrema destra
2. Esegui la richiesta fittizia
Anche se le intestazioni della risposta non sono visualizzate in alto, puoi osservarle in modo fittizio tramite postman/DHC o qualsiasi altro servizio.
Opzione 2: passa l’ID client nel corpo della risposta con la chiave xAdobeSignClientId
Nel corpo della risposta JSON con la chiave xAdobeSignClientId e con lo stesso valore dell’ID client che è stato inviato nella richiesta.
Sostituisci il file Index.js con il seguente snippet di codice:
module.exports = function (context, req) {
var clientId = req.headers['x-adobesign-clientid'];
// Verifica che il ClientID in ingresso sia autentico
if (clientId === '123XXX456') {
context.res = {
// status: 200, /* Il valore predefinito è 200 */ // qualsiasi risposta 2XX è accettabile
body: {
'xAdobeSignClientId' : clientId
},
headers : {
'Content-Type' : 'application/json'
}
};
}
else {
context.res = {
status: 400,
body: "Opps!! Chiamata illegittima identificata"
};
}
context.done();
};
Verifica il comportamento eseguendo una richiesta fittizia
1. Fai clic sul pulsante Test nell’angolo all’estrema destra
2. Esegui la richiesta fittizia
Nota che è previsto lo stesso comportamento di clientID quando l’URL Webhook riceve le notifiche POST.
Pronto all’uso
Una volta verificato il comportamento, l’URL di webhook funziona in base agli standard di Acrobat Sign. Puoi aggiornare ulteriormente la logica personalizzata in base alle tue esigenze.
Ottieni l’URL della funzione
- Fai clic su Ottieni URL funzione
Copia l’URL e utilizzalo per creare webhook in Acrobat Sign.
Creazione della funzione AWS Lambda
Per creare una funzione AWS Lambda, accedi alla Console di gestione AWS e seleziona il servizio AWS Lambda dall’elenco dei servizi.
- Fai clic sull’opzione Create a Lambda function using “Author From Scratch”
- Nella pagina Configure function, inserisci il nome funzione “lambdaWebhooks” e seleziona Node.js 4.3 come runtime
- Per Role, scegli un ruolo esistente o creane uno nuovo dai modelli
- Se hai scelto Create new role from template(s), inserisci un nome di ruolo (ad es. role-lambda) e seleziona Simple Microservices permissions dall’elenco Policy templates
- Fai clic sul pulsante Create function
- Nella nuova pagina della funzione AWS lambda, seleziona “Edit code inline” come “Code entry type”, mantieni index.handler come handler.
- Aggiungere la logica per registrare il webhook di Acrobat Sign
Prima di registrare un webhook, Acrobat Sign verifica che l’URL del webhook indicato nella richiesta di registrazione sia effettivamente in grado di ricevere notifiche. A questo scopo, quando Acrobat Sign riceve una nuova richiesta di registrazione del webhook, inizialmente effettua una richiesta di verifica all’URL del webhook. Questa richiesta di verifica è del tipo GET HTTPS e viene inviata all’URL del webhook con un’intestazione HTTP personalizzata X-AdobeSign-ClientId. In questa intestazione, il valore viene impostato sull’ID client dell’applicazione che richiede di creare/registrare il webhook. Per registrare correttamente un webhook, l’URL relativo deve rispondere a questa richiesta di verifica con un codice di risposta 2XX E deve restituire lo stesso valore di ID client in uno dei due modi seguenti. Nota inoltre che è previsto lo stesso comportamento per clientID quando l’URL Webhook riceve le notifiche POST.
Segui uno dei due casi:
Caso 1: passa l’ID client a X-AdobeSign-ClientId come intestazione della risposta
- Passa X-AdobeSign-ClientId nell’intestazione della risposta. Si tratta della stessa intestazione trasmessa nella richiesta, che viene ripetuta nella risposta.
Snippet di codice
Nel file index.js, sostituisci lo snippet di codice generato automaticamente con il codice seguente:
- Passa X-AdobeSign-ClientId nell’intestazione della risposta. Si tratta della stessa intestazione trasmessa nella richiesta, che viene ripetuta nella risposta.
Esempio di codice JS del nodo per recuperare l’ID client, convalidarlo e quindi restituirlo nell’intestazione della risposta |
---|
exports.handler = function index(event, context, callback) { // Recupero id client var clientid = event.headers['X-AdobeSign-ClientId'];
//Esegui convalida if (clientid =="BGBQIIE7H253K6") //Sostituisci 'BGBQIIE7H253K6' con l’ID client dell’applicazione con cui si crea il webhook { var response = { statusCode: 200, headers: { "X-AdobeSign-ClientId": clientid } }; callback(null,response); } else { callback("Oops!! chiamata illegittima"); } } |
Caso 2: passare l’ID client nel corpo della risposta con la chiave xAdobeSignClientId
Nel corpo della risposta JSON con la chiave xAdobeSignClientId e il valore relativo corrisponde all’ID client inviato nella richiesta dell’intestazione.
Snippet di codice
Sostituisci il file Index.js con quanto segue:
Esempio di codice JS del nodo per recuperare l’ID client, convalidarlo e quindi restituirlo nell’intestazione della risposta |
---|
exports.handler = function index(event, context, callback) { // Recupero id client var clientid = event.headers['X-AdobeSign-ClientId'];
//Esegui convalida if (clientid =="BGBQIIE7H253K6") //Sostituisci 'BGBQIIE7H253K6' con l’ID client dell’applicazione con cui si crea il webhook { var responseBody = { xAdobeSignClientId : clientid };
var response = { statusCode: 200, body: JSON.stringify(responseBody) };
callback(null,response); } else { callback("Oops!! chiamata illegittima"); } } |
- Salva la funzione. È stata creata la funzione Lambda e siamo quasi pronti a utilizzarla in un webhook in tempo reale.
Configurazione dell’API Gateway di AWS
Per rendere questo modulo pubblicamente accessibile tramite metodo HTTP, è necessario configurare API Gateway di AWS utilizzando la funzione precedentemente creata come backend per l’API.
Nella Console di gestione AWS, seleziona la proprietà API Gateway dai servizi AWS e fai clic sul pulsante Create API.
- Nella pagina Create new API, seleziona New API; quindi, in Name API, inserisci webhooks.
- Fai clic sul pulsante Create API.
- Dall’elenco a discesa Actions, seleziona l’opzione Create Resource.
- Verifica l’opzione Configure as proxy resource e inserisci validate come Resource Name e {proxy+} in Resource Path.
- Lascia deselezionata l’opzione Enable API Gateway CORS e fai clic sul pulsante Create Resource.
- Mantieni selezionato Lambda Function Proxy come Integration type e, dall’elenco a discesa Lambda region, scegli l’area in cui è stata creata la funzione Lambda. Probabilmente si tratta della stessa area in cui stai creando API Gateway.
- Inserisci validate nel campo Lambda Function, quindi fai clic sul pulsante Save.
- Nella finestra a comparsa Add Permission to Lambda Function, seleziona OK.
Se tutti i passaggi precedenti sono stati eseguiti correttamente, verrà visualizzato qualcosa di questo tipo:
Implementare l’API
Il passaggio successivo prevede l’implementazione di questa API per renderla pronta all’utilizzo.
- Nell’elenco a discesa Actions, seleziona Deploy API.
- In Deployment stage, seleziona [New Stage]; quindi, in Stage name, inserisci prod (o un eventuale altro nome con cui desideri identificare questa fase).
- Fai clic sul pulsante Deploy.
L’API è ora pronta per l’uso e il relativo URL di chiamata è riportato nella casella blu di seguito visualizzata:
Prendi nota di questo URL, perché dovrai inserirlo come URL di webhook in tempo reale.
Pronto all’uso
La procedura è terminata. Utilizza l’URL di cui sopra con “/{nodeJSfunctionName}” aggiunto come URL webhook nella richiesta API POST /webhooks. Una volta verificato il comportamento, l’URL del webhook funziona come da
standard di Acrobat Sign. Puoi aggiornare o aggiungere ulteriormente la logica di personalizzazione in base alle tue esigenze.
Attivazione e disattivazione
L’accesso alla funzione Webhook è attivato per impostazione predefinita per gli account di livello Enterprise.
Gli amministratori a livello di gruppo possono creare/controllare i webhook che operano solo all’interno del proprio gruppo.
L’accesso alla pagina Webhook si trova nella barra a sinistra del menu Amministratore.
Limitazione della frequenza basata sulla concomitanza
Gli eventi di creazione e notifica di webhook (e richiamata) sono limitati nel numero di notifiche concomitanti che vengono attivamente consegnate al cliente dal sistema Acrobat Sign. Questo limite si applica all’account e include tutti i gruppi presenti al suo interno.
Questo tipo di limitazione della frequenza impedisce che un account mal progettato consumi una quantità sproporzionata di risorse del server, con conseguente impatto negativo su tutti gli altri clienti in quell’ambiente server.
Il numero di eventi concomitanti per account è stato calcolato per garantire che gli account con webhook funzionanti ricevano le notifiche nel più breve tempo possibile e che raramente si verifichino situazioni in cui le notifiche subiscano ritardi a causa di troppe richieste. Le soglie attuali sono:
Azione |
Eventi |
Descrizione |
Creazione di webhook |
10 |
Sono consentite al massimo 10 richieste di creazione simultanee di webhook per account. |
Notifica webhook/richiamata |
30 |
Sono consentite al massimo 30 notifiche simultanee di webhook e richiamata per account. |
Best practice
- Per limitare il numero di richieste HTTPS al server, puoi abbonarti a specifici eventi: più specifici sono i webhook, meno volume sarà necessario esaminare.
- Resistente ai duplicati: se disponi di più app che condividono lo stesso URL del webhook e lo stesso utente è mappato su ciascuna app, lo stesso evento verrà inviato al webhook più volte (una volta per app). In alcuni casi, il webhook potrebbe ricevere eventi duplicati. L’applicazione webhook deve essere tollerante e deduplicata per ID evento.
- Rispondi sempre rapidamente ai webhook: l’app ha solo cinque secondi per rispondere alle richieste di webhook. Per la richiesta di verifica, questo è raramente un problema, poiché l’app non deve eseguire alcun lavoro reale per rispondere. Per le richieste di notifica, tuttavia, l’app solitamente esegue un’operazione che richiede tempo per rispondere alla richiesta. Si consiglia di lavorare su un thread separato o in modo asincrono utilizzando una coda per garantire una risposta entro cinque secondi
- Gestire la concomitanza: quando un utente apporta una serie di modifiche in rapida successione, è probabile che l’app riceva più notifiche per lo stesso utente più o meno nello stesso momento. Se non presti attenzione a come gestisci la concomitanza, l’app potrebbe elaborare le stesse modifiche per lo stesso utente più di una volta. Per sfruttare i webhook di Acrobat Sign, è necessario comprendere chiaramente l’utilizzo delle informazioni. Assicurati di porre domande quali:
- Quali dati desideri restituire nel payload?
- Chi accederà a queste informazioni?
- Quali decisioni o rapporti verranno generati?
- Raccomandazioni per la ricezione di un documento firmato: quando si determina come ricevere un PDF firmato da Acrobat Sign nel sistema di gestione dei documenti, è necessario considerare diversi fattori.
Anche se è perfettamente accettabile selezionare solo il Documento accordo firmato durante la creazione di un webhook, è possibile valutare l’utilizzo dell’API di Acrobat Sign per recuperare i documenti quando viene ricevuto un evento di attivazione (ad esempio, lo stato dell’accordo Completo).
Aspetti da considerare...
Limitazione della dimensione JSON
La dimensione del payload JSON è limitata a 10 MB.
Nel caso in cui un evento generi un payload più grande, verrà attivato un webhook, ma gli attributi dei parametri condizionali, se presenti nella richiesta, vengono rimossi per ridurre le dimensioni del payload.
Se questo si verifica, la risposta presenta “ConditionalParametersTrimmed” per informare che le informazioni conditionalParameters sono state rimosse.
“conditionalParametersTrimmed” è un oggetto array contenente informazioni sulle chiavi che sono state tagliate.
Il troncamento verrà eseguito nel seguente ordine:
- includeSignedDocuments
- includeParticipantsInfo
- includeDocumentsInfo
- includeDetailedInfo
I documenti firmati verranno troncati per primi, seguiti da informazioni sul partecipante, informazioni sul documento e, infine, informazioni dettagliate.
Questo può accadere, ad esempio, in un evento di completamento dell’accordo che include un documento firmato (codificato in base 64) o in un accordo con più campi modulo.
I webhook di Acrobat Sign forniscono notifiche al mittente dell’accordo e a qualsiasi webhook configurato all’interno del gruppo da cui è stato inviato l’accordo. I webhook con ambito account ricevono tutti gli eventi.
Mittente: utente A | Firmatario: utente B | Condivisione: utente C
L’utente A e l’utente B sono in account diversi
L’utente A e l’utente C sono in account diversi
Caso d’uso |
Notifica? |
Commenti/Note |
L’account dell’utente A ha un webhook di livello ACCOUNT (creato dall’utente A o dall’amministratore dell’account). |
Sì |
Un webhook di livello ACCOUNT viene informato di tutti gli eventi attivati in quell’account. |
L’account dell’utente A ha un webhook di livello GRUPPO (creato dall’utente A o dall’amministratore dell’account/del gruppo). Ipotesi: l’utente A e l'amministratore del gruppo si trovano nello stesso gruppo. |
Sì |
Un webhook di livello GRUPPO viene informato di tutti gli eventi attivati in quel gruppo. |
L’utente A ha un webhook di livello UTENTE. |
Sì |
In qualità di mittente, il webhook di livello UTENTE dell’utente A viene attivato |
L’utente A ha un webhook di livello RISORSA (per l’accordo sopra inviato). |
Sì |
|
L’account dell’utente B ha un webhook di livello ACCOUNT (creato dall’utente B o dall’amministratore dell’account). |
No |
Il webhook di livello ACCOUNT dell’utente B è considerato un webhook firmatario. |
L’account dell’utente B ha un webhook di livello GRUPPO (creato dall’utente B o dall’amministratore dell’account/gruppo). Ipotesi: l’utente B e l'amministratore del gruppo si trovano nello stesso gruppo. |
No |
Il webhook di livello GRUPPO dell’utente B è considerato un webhook firmatario. |
L’utente B ha un webhook di livello UTENTE. |
No |
Il webhook di livello UTENTE dell’utente B è considerato un webhook firmatario. |
L’account dell’utente C ha un webhook di livello ACCOUNT (creato dall’utente C o dall’amministratore dell’account). |
No |
Il webhook di livello ACCOUNT dell’utente C è considerato un webhook non originario. |
L’account dell’utente C ha un webhook di livello GRUPPO (creato dall’utente C o dall’amministratore dell’account/gruppo). Ipotesi: l’utente C e l’amministratore del gruppo si trovano nello stesso gruppo. |
No |
Il webhook di livello GRUPPO dell’utente C è considerato un webhook non originario. |
L’utente C ha un webhook di livello UTENTE. |
No |
Il webhook di livello UTENTE dell’utente C è considerato un webhook non originario. |
Mittente: utente A | Firmatario: utente B | Condivisione: utente C
L’utente A, l’utente B e l’utente C sono nello stesso account
Caso d’uso |
Notifica? |
Note |
L’account dell’utente A ha un webhook di livello ACCOUNT (creato dall’utente A o dall’amministratore dell’account). |
Sì |
I webhook di livello ACCOUNT inviano una notifica per gli eventi attivati dall’account. |
L’account dell’utente A ha un webhook di livello GRUPPO (creato dall’utente A o dall’amministratore dell’account/del gruppo). Ipotesi: l’utente A e l'amministratore del gruppo si trovano nello stesso gruppo. |
Sì |
I webhook di livello GRUPPO notificano gli eventi attivati dagli utenti nel loro gruppo. |
L’utente A ha un webhook di livello UTENTE. |
Sì |
In qualità di mittente, il webhook di livello Utente dell’utente A viene attivato |
L’utente A ha un webhook di livello RISORSA (per l’accordo sopra inviato). |
Sì |
|
L’account dell’utente B ha un webhook di livello ACCOUNT (creato dall’utente B o dall’amministratore dell’account). |
Sì |
Poiché l’utente A e l’utente B si trovano nello stesso account, un webhook di livello ACCOUNT viene informato di tutti gli eventi attivati in quell’account. |
L’account dell’utente B ha un webhook di livello GRUPPO (creato dall’utente B o dall’amministratore dell’account/gruppo). Ipotesi: l’utente A, l’utente B e l’amministratore del gruppo si trovano nello stesso gruppo. |
Sì |
Poiché l’utente A e l’utente B si trovano nello stesso gruppo, un webhook di livello GRUPPO viene informato di tutti gli eventi attivati in quel gruppo. |
L’account dell’utente B ha un webhook di livello GRUPPO (creato dall’utente B o dall’amministratore dell’account/gruppo). Ipotesi: l’utente A e l’utente B sono in gruppi diversi. |
No |
Il webhook di livello GRUPPO dell’utente B è considerato un webhook firmatario. Un webhook dell’utente A (RISORSA/UTENTE/GRUPPO/ACCOUNT) verrà attivato. |
L’utente B ha un webhook di livello UTENTE. |
No |
In qualità di destinatario, il webhook di livello UTENTE dell’utente B non viene attivato. |
L’account dell’utente C ha un webhook di livello ACCOUNT (creato dall’utente C o dall’amministratore dell’account). |
Sì |
Poiché l’utente A e l’utente C si trovano nello stesso account, un webhook di livello ACCOUNT viene informato di tutti gli eventi attivati in quell’account. |
L’account dell’utente C ha un webhook di livello GRUPPO (creato dall’utente C o dall’amministratore dell’account/gruppo). Ipotesi: l’utente A, l’utente C e l’amministratore del gruppo si trovano nello stesso gruppo. |
Sì |
Poiché l’utente A e l’utente C si trovano nello stesso gruppo, un webhook di livello GRUPPO viene informato di tutti gli eventi attivati in quel gruppo. |
L’account dell’utente C ha un webhook di livello GRUPPO (creato dall’utente C o dall’amministratore dell’account/gruppo). Ipotesi: l’utente A e l’utente C sono in gruppi diversi. |
No |
Il webhook di livello GRUPPO dell’utente C è considerato un webhook non originario. Un webhook dell’utente A (RISORSA/UTENTE/GRUPPO/ACCOUNT) verrà attivato. |
L’utente C ha un webhook di livello UTENTE. |
No |
Il webhook di livello UTENTE dell’utente C è considerato un webhook non originario. |
Riprova quando il servizio di ascolto non è attivo
Se l’URL di destinazione per il webhook è inattivo per qualsiasi motivo, Acrobat Sign mette in coda il codice JSON e tenta di inviarlo di nuovo in un ciclo progressivo di 72 ore.
Gli eventi non consegnati vengono mantenuti in una coda di tentativi e nelle successive 72 ore verrà fatto il possibile per inviare le notifiche nell’ordine in cui si sono verificate.
La strategia di ripetere i tentativi di consegna delle notifiche prevede il raddoppiamento del tempo tra tentativi successivi, a partire da un intervallo di 1 minuto che aumenta fino a 12 ore, per un totale di 15 tentativi nell’arco di 72 ore.
Se il ricevitore del webhook non risponde entro 72 ore e negli ultimi sette giorni non sono state inviate notifiche, il webhook verrà disabilitato. Non verrà inviata alcuna notifica a questo URL finché il webhook non sarà nuovamente attivato.
Tutte le notifiche tra il momento in cui il webhook viene disattivato e successivamente riattivato verranno perse.