Connecter un bot à Direct Line

Cet article explique comment connecter un bot au canal Direct Line. Utilisez ce canal pour communiquer avec un bot via votre application cliente.

Remarque

Direct Line est un canal standard via le protocole HTTPS pour permettre la communication entre une application cliente et un bot. Si vous avez besoin d’un isolement réseau à la place, utilisez l’extension App Service Direct Line sur WebSockets.

Prérequis

  • Un compte Azure. Si vous n’en avez pas encore, créez un compte gratuit avant de commencer.
  • Bot existant publié sur Azure.

Ajouter le canal Direct Line

La première chose à faire est d’ajouter le canal Direct Line à votre bot.

  1. Accédez au portail Azure.
  2. Accédez à votre ressource Azure Bot. Sous Paramètres de bot, sélectionnez Canaux.
  3. Sélectionnez Direct Line dans la liste des canaux disponibles.

Votre bot est maintenant configuré pour utiliser Direct Line à l’aide du site par défaut.

Vous pouvez également ajouter un nouveau site au lieu d’utiliser le site par défaut. Sélectionnez le bouton Nouveau site sur la page du canal Direct Line pour créer un nouveau site. Direct Line new site button in Azure portal

Gérer les clés secrètes

Lorsque vous ajoutez le canal direct, Bot Framework génère des clés secrètes. Votre application cliente utilise ces clés pour authentifier les demandes de Direct Line API que votre client émet pour communiquer avec votre bot. Pour en savoir plus, consultez Authentification.

  1. Pour afficher le secret Direct Line d’un site en texte brut, accédez à la page du canal Direct Line.

  2. Sélectionnez l’onglet Direct Line, puis le site pour lequel vous souhaitez obtenir la clé, par exemple Default_Site. Azure ouvre un volet Configurer le site.

  3. Sous Clés secrètes, sélectionnez l’icône d’œil en regard de la clé correspondante.

    Show Direct Line keys

  4. Copiez et stockez de manière sécurisée la clé qui s’affiche. Utilisez la clé pour authentifier les demandes de Direct Line API que votre application cliente émet pour communiquer avec votre bot.

    Remarque

    Les secrets ne doivent pas être exposés ou incorporés dans les applications clientes. Reportez-vous aux étapes suivantes.

  5. La meilleure pratique consiste à utiliser Direct Line API pour échanger une clé contre un jeton. L’application cliente utilisera ensuite le jeton pour authentifier ses requêtes dans l’étendue d’une conversation unique.

Configurer les paramètres

Pour configurer vos paramètres de site :

  1. Dans la page du canal Direct Line, sélectionnez le site que vous souhaitez configurer dans la liste Sites. Le volet Configurer le site s’ouvre, comme indiqué ci-dessous : Configure site pane

  2. Sélectionnez la version du protocole Direct Line que votre application cliente utilisera pour communiquer avec votre bot.

    Conseil

    Si vous créez une connexion entre votre application cliente et votre bot, utilisez Direct Line API 3.0.

  3. Quand vous avez terminé, sélectionnez Terminé pour enregistrer la configuration du site. Vous pouvez répéter ce processus, en commençant par un nouveau site, pour chaque application cliente que vous souhaitez connecter à votre bot.

Configurer l’authentification améliorée

L’une des configurations de site disponibles est l’option d’authentification améliorée, ce qui permet d’atténuer les risques de sécurité lors de la connexion à un bot (à l’aide du contrôle Chat Web, par exemple). Pour plus d'informations, consultez l'authentification améliorée Direct Line.

Ajouter l’Authentification améliorée :

  1. Activez les options d’authentification améliorée. Un message indiquant « Vous devez avoir au moins une origine approuvée » s’affiche avec un lien Ajouter une origine approuvée. Si vous activez l’authentification améliorée, vous devez spécifier au moins une origine approuvée.

    Une origine approuvée est un domaine utilisé par le système pour authentifier les utilisateurs. Dans ce cas, Direct Line utilise le domaine pour générer un jeton.

    • Si vous configurez des origines approuvées dans la page de configuration de l’IU, ces réglages seront toujours utilisés pour la génération de jetons. Si vous envoyez des origines approuvées supplémentaires (ou si vous n’en configurez aucune) lors de la génération d’un jeton ou du démarrage d’une conversation, cela ne sera pas pris en compte (c’est-à-dire qu’elles ne seront ni ajoutées à la liste ni vérifiées par rapport à celles existantes).
    • Si vous n’avez pas activé l’authentification améliorée, n’importe quelle URL d’origine que vous envoyez dans le cadre des appels d’API sera utilisée. Add trusted origin
  2. Après avoir ajouté une URL de domaine approuvé, sélectionnez Appliquer.

Exemple de bot Direct Line

Vous pouvez télécharger un exemple .NET à partir de cet emplacement : Échantillon de bot Direct Line.

L’exemple contient deux projets :

  • DirectLineBot. Il crée un bot pour se connecter via un canal Direct Line.
  • DirectLineClient. Il s’agit d’une application console qui communique avec le bot précédent via le canal Direct Line.

API Direct Line

  • Les informations d’identification de Direct Line API doivent être obtenues à partir de l’inscription Azure Bot et autorisent uniquement l’appelant à se connecter au bot pour lequel il a été généré. Dans le projet bot, mettez à jour le fichier appsettings.json avec ces valeurs.

    {
    "MicrosoftAppId": "",
    "MicrosoftAppPassword": ""
    }
    
  • Dans le portail Azure, activez Direct Line dans la liste des canaux, puis configurez le secret Direct Line. Vérifiez que la case de la version 3.0 est activée. Dans le projet client de console, mettez à jour le fichier App.config avec la clé secrète Direct Line et le descripteur de bot (ID de bot).

    <appSettings>
        <add key="DirectLineSecret" value="YourBotDirectLineSecret" />
        <add key="BotId" value="YourBotHandle" />
    </appSettings>
    

Les messages utilisateur sont envoyés au bot à l’aide de la méthode Conversations.PostActivityAsync Direct Line Client à l’aide de la ConversationId générée précédemment.

while (true)
{
    string input = Console.ReadLine().Trim();

    if (input.ToLower() == "exit")
    {
        break;
    }
    else
    {
        if (input.Length > 0)
        {
            Activity userMessage = new Activity
            {
                From = new ChannelAccount(fromUser),
                Text = input,
                Type = ActivityTypes.Message
            };

            await client.Conversations.PostActivityAsync(conversation.ConversationId, userMessage);
        }
    }
}