Panoramica delle competenze

SI APPLICA A: SDK v4

È possibile estendere un bot usando un bot di competenze . Una competenza può essere usata da vari altri bot, semplificando il riutilizzo e in questo modo è possibile creare un bot rivolto all'utente ed estenderlo usando competenze personalizzate o di terze parti.

  • Una competenza è un bot che può eseguire un set di attività per un altro bot. Un bot può essere sia una competenza che un bot rivolto all'utente.
  • Un consumer di competenze è un bot che può chiamare una o più competenze. Un consumer di competenze rivolto all'utente viene definito anche bot radice.
  • Un manifesto della competenza è un file JSON che descrive le azioni eseguibili con la competenza, i relativi parametri di input e output e gli endpoint della competenza.
    • Gli sviluppatori che non hanno accesso al codice sorgente della competenza possono usare le informazioni nel manifesto per progettare il proprio consumer di competenze.
    • Lo schema del manifesto della competenza è un file JSON che descrive lo schema del manifesto della competenza.
    • Vedere come implementare una competenza e come scrivere un manifesto della competenza per i manifesti delle competenze di esempio.

In altre parole, l'utente interagisce direttamente con il bot radice, che delega parte della logica di conversazione a una competenza.

La funzionalità delle competenze è progettata in modo che:

  • Competenze e consumer comunicano tramite HTTP usando il protocollo Bot Framework.
  • Un consumer di competenze può utilizzare più competenze.
  • Un consumer di competenze può utilizzare una competenza indipendentemente dal linguaggio usato per implementare la competenza. Ad esempio, un bot C# può usare una competenza implementata con JavaScript.
  • Una competenza può anche essere un consumer e chiamare altre competenze.
  • Le competenze supportano l'autenticazione utente; Tuttavia, l'autenticazione utente è locale per la competenza e non può essere trasferita a un altro bot.
  • Le competenze possono essere usate sia con l'adapter Bot Framework che con adapter personalizzati.

Questo diagramma illustra alcune delle permutazioni possibili.

Illustration of permutations between skill consumers and skills.

Architettura concettuale

Una competenza e un consumer di competenze sono bot separati che vengono pubblicati in modo indipendente.

  • Un consumer di competenze richiede una logica aggiunta per la gestione di una competenza, ad esempio quando chiamare o annullare la competenza e così via. Oltre ai normali oggetti bot e adapter, il consumer include alcuni oggetti correlati alle competenze, che vengono usati per lo scambio di attività con la competenza. Un consumer di competenze implementa almeno due endpoint HTTP:
    • Un endpoint di messaggistica riceve attività dall'utente o dal canale. Si tratta del solito endpoint di messaggistica implementato da tutti i bot.
    • Endpoint host competenza per la ricezione di attività da una competenza. Questa operazione funge da URL di callback, l'URL del servizio a cui risponde la competenza. Il consumer di competenze deve associare il codice che riceve la richiesta del metodo HTTP dalla competenza con un gestore di competenze.
  • Una competenza richiede una logica aggiunta per inviare un'attività endOfConversation al termine, in modo che il consumer di competenze sappia quando interrompere l'inoltro delle attività alla competenza.

Questo diagramma illustra il flusso delle attività dall'utente al bot radice fino a una competenza e viceversa.

Illustration of how activities flow from the user to the skill and back again.

  1. L'adapter del bot radice riceve le attività dall'utente e le inoltra al gestore di attività del bot radice. Le attività dell'utente vengono ricevute nell'endpoint di messaggistica del bot radice.
  2. Il bot radice usa un client HTTP di competenze per inviare un'attività alla competenza. Il client ottiene le informazioni sulla conversazione delle competenze del consumer da una definizione di competenza e da una factory di ID conversazione competenza. Tali informazioni includono l'URL del servizio che verrà usato dalla competenza per rispondere all'attività.
  3. L'adapter della competenza riceve le attività dal consumer di competenze e le inoltra al gestore di attività dell'attività. Le attività del consumer vengono ricevute nell'endpoint di messaggistica del bot di competenza.
  4. Quando la competenza risponde, il gestore di competenze del bot radice riceve l'attività. Ottiene le informazioni sulla conversazione tra radice e utente dalla factory dell'ID conversazione della competenza. Inoltra quindi l'attività all'adapter del bot radice. Le attività della competenza vengono ricevute nell'endpoint host della competenza del bot radice.
  5. L'adapter del bot radice genera internamente un messaggio proattivo per riprendere la conversazione con l'utente.
  6. L'adapter del bot radice invia all'utente tutti i messaggi ricevuti dalla competenza.

Questi oggetti consentono di gestire le competenze e indirizzare il traffico delle competenze:

  • Una competenza Bot Framework descrive le informazioni di routing per una competenza e può essere letta dal file di configurazione del consumer di competenze.
  • Un client HTTP della competenza invia le attività a una competenza.
  • Un gestore di competenze riceve le attività da una competenza.
  • La factory dell'ID conversazione della competenza viene usata per la conversione tra il riferimento alla conversazione tra utente e radice e il riferimento alla conversazione tra radice e competenza.
  • Il servizio Bot Connector offre sia l'autenticazione del canale che da bot a bot. Usando un oggetto di configurazione dell'autenticazione, è possibile aggiungere la convalida delle attestazioni a un consumer di competenze o competenze per limitare le applicazioni o gli utenti a cui hanno accesso.

Gli oggetti client di competenze e gestore di competenze usano entrambi la factory dell'ID conversazione per eseguire la conversione tra la conversazione usata dal bot radice per interagire con l'utente e la conversazione usata dal bot radice per interagire con la competenza.

Manifesti della competenza

Un manifesto della competenza è un file JSON che descrive le azioni che la competenza può eseguire, i relativi parametri di input e output, gli endpoint della competenza e i modelli di invio per la competenza.

Per informazioni sullo schema del manifesto della competenza, vedere come scrivere un manifesto della competenza.

Comunicazione da bot a bot

È importante comprendere alcuni aspetti della progettazione, indipendentemente dal bot da progettare.

Azioni competenze

Alcune competenze possono eseguire più attività o azioni. Ad esempio, una competenza di esecuzione può consentire attività di creazione, aggiornamento, visualizzazione ed eliminazione a cui è possibile accedere come singole conversazioni.

Riferimenti alla conversazione

La conversazione tra utente e radice è diversa dalla conversazione tra radice e competenza.

La factory dell'ID conversazione consente di gestire il traffico tra un consumer di competenze e una competenza. La factory esegue la conversione tra l'ID della conversazione tra radice e utente e l'ID della conversazione tra radice e competenza. In altre parole, genera un ID conversazione che viene usato tra la radice e la competenza e recupera l'ID originale della conversazione tra utente e radice dall'ID conversazione tra radice e competenza.

Coordinamento tra server

I bot radice e di competenza comunicano tramite HTTP. Di conseguenza, l'istanza del bot radice che riceve un'attività da una competenza potrebbe non essere la stessa che ha inviato l'attività di avvio. In altre parole, queste due richieste possono essere gestite da server diversi.

  • Salvare sempre lo stato nel consumer di competenze prima di inoltrare un'attività a una competenza. In questo modo si garantisce che l'istanza che riceve il traffico da una competenza possa riprendere dal punto in cui l'istanza precedente è stata abbandonata prima di chiamare la competenza.
  • Quando il gestore di competenze riceve un'attività da una competenza, la converte in un formato appropriato per il consumer di competenze e la inoltra all'adapter del consumer.

Consumer di competenze e stato della competenza

Il consumer di competenze e la competenza gestiscono autonomamente il proprio stato. Il consumer crea tuttavia l'ID conversazione usato per comunicare con la competenza. Questo comportamento può influire sullo stato della conversazione nella competenza.

Importante

Come indicato in precedenza, quando il consumer di competenze delega un'attività utente a una competenza, la risposta della competenza può essere inviata a un'istanza diversa del consumer. Il consumer deve sempre salvare lo stato della conversazione subito prima di inoltrare un'attività a una competenza.

Autenticazione da bot a bot

Non è necessario un ID app e una password per testare una competenza e un consumer di competenze in locale in Bot Framework Emulator. Per distribuire la competenza in Azure, è comunque necessaria una sottoscrizione di Azure.

L'autenticazione a livello di servizio è gestita da Bot Connector. Il framework usa i bearer token e gli ID applicazione del bot per verificare l'identità di ogni bot. Bot Framework usa un oggetto di configurazione di autenticazione per convalidare l'intestazione di autenticazione nelle richieste in ingresso.

Importante

Questo richiede che tutti i bot distribuiti (il consumer di competenze e tutte le competenze usate) dispongano di credenziali dell'applicazione valide.

Convalida delle attestazioni

È necessario aggiungere un validator di attestazioni alla configurazione di autenticazione. Le attestazioni vengono valutate dopo l'intestazione di autenticazione. Generare un errore o un'eccezione nel codice di convalida per rifiutare la richiesta.

Nota

Il bot esegue la convalida delle attestazioni se ha un ID app e una password; in caso contrario, la convalida delle attestazioni non viene eseguita.

Sono numerosi i motivi per cui è consigliabile rifiutare una richiesta che diversamente verrebbe autenticata:

  • Quando il consumer di competenze deve accettare solo il traffico proveniente dalle competenze con cui può avere avviato una conversazione.
  • Quando una competenza fa parte di un servizio a pagamento e gli utenti non nel database non devono avere accesso.
  • Quando si vuole limitare l'accesso alla competenza a utenti specifici della competenza.

Importante

Se non si fornisce un validator di attestazioni, il bot genererà un errore o un'eccezione durante la ricezione di un'attività da un altro bot, indipendentemente dal fatto che il bot sia una competenza o un consumer di competenze.

Debug delle conversazioni delle competenze

Poiché il traffico tra competenze e consumer di competenze viene autenticato, è necessario eseguire passaggi aggiuntivi durante il debug di tali bot.

  • Il consumer di competenze e tutte le competenze utilizzate, direttamente o indirettamente, devono essere in esecuzione.
  • Se i bot vengono eseguiti localmente e se uno dei bot ha un ID app e una password, tutti i bot devono avere ID e password validi.
  • Se tutti i bot vengono distribuiti, vedere come eseguire il debug di un bot da qualsiasi canale usando ngrok.
  • Se alcuni bot sono in esecuzione in locale e alcuni vengono distribuiti, vedere come eseguire il debug di una competenza o di un consumer di competenze.

In caso contrario, è possibile eseguire il debug di un consumer di competenze o di una competenza in modo molto simile al debug di altri bot. Per altre informazioni, vedere Debug di un bot e Debug con Bot Framework Emulator.

Informazioni aggiuntive

Dal punto di vista dell'utente, interagisce con il bot radice. Dal punto di vista della competenza, il consumer di competenze è il canale usato per comunicare con l'utente.