Połączenie bota do linii bezpośredniej

W tym artykule opisano sposób łączenia bota z kanałem Direct Line . Użyj tego kanału, aby komunikować się z botem za pośrednictwem aplikacji klienckiej.

Uwaga

Direct Line to standardowy kanał za pośrednictwem protokołu HTTPS umożliwiający komunikację między aplikacją kliencką a botem. Jeśli zamiast tego potrzebujesz izolacji sieciowej, użyj rozszerzenia usługi App Service direct line za pośrednictwem obiektów WebSocket.

Wymagania wstępne

  • Konto platformy Azure. Jeśli jeszcze go nie masz, przed rozpoczęciem utwórz bezpłatne konto .
  • Istniejący bot opublikowany na platformie Azure.

Dodawanie kanału Direct Line

Pierwszą rzeczą, którą należy wykonać, jest dodanie kanału Direct Line do bota.

  1. Przejdź do portalu Azure Portal.
  2. Przejdź do zasobu usługi Azure Bot. W obszarze Bot Ustawienia wybierz pozycję Kanały.
  3. Wybierz pozycję Direct Line (Linia bezpośrednia) z listy Dostępnych kanałów.

Bot jest teraz skonfigurowany do używania linii bezpośredniej przy użyciu witryny domyślnej.

Alternatywnie możesz dodać nową witrynę zamiast używać lokacji domyślnej. Wybierz przycisk Nowa witryna na stronie kanału Direct Line, aby utworzyć nową witrynę. Direct Line new site button in Azure portal

Zarządzanie kluczami tajnymi

Po dodaniu kanału bezpośredniego platforma Bot Framework generuje klucze tajne. Aplikacja kliencka używa tych kluczy do uwierzytelniania żądań interfejsu API direct line, które wystawia do komunikowania się z botem. Aby uzyskać więcej informacji, zobacz Authentication (Uwierzytelnianie).

  1. Aby wyświetlić wpis tajny direct line witryny w postaci zwykłego tekstu, przejdź do strony kanału Direct Line .

  2. Wybierz kartę Linia bezpośrednia, a następnie lokację, dla której chcesz uzyskać klucz, na przykład Default_Site. Platforma Azure otworzy okienko Konfigurowanie witryny .

  3. W obszarze Klucze tajne wybierz ikonę oka obok odpowiedniego klucza.

    Show Direct Line keys

  4. Skopiuj i bezpiecznie zapisz klucz. Użyj klucza, aby uwierzytelnić żądania interfejsu API direct line dotyczące problemów z aplikacją kliencką w celu komunikowania się z botem.

    Uwaga

    Wpisy tajne nie powinny być uwidocznione ani osadzone w aplikacjach klienckich. Zobacz następny krok.

  5. Najlepszym rozwiązaniem jest użycie interfejsu API linii bezpośredniej do wymiany klucza dla tokenu. Następnie aplikacja kliencka będzie używać tokenu do uwierzytelniania żądań w zakresie pojedynczej konwersacji.

Konfigurowanie ustawień

Aby skonfigurować ustawienia witryny:

  1. Na stronie kanału Direct Line wybierz witrynę, którą chcesz skonfigurować z listy Witryny . Zostanie otwarte okienko Konfigurowanie witryny , pokazane poniżej: Configure site pane

  2. Wybierz wersję protokołu Direct Line, która będzie używana przez aplikację kliencką do komunikowania się z botem.

    Napiwek

    Jeśli tworzysz nowe połączenie między aplikacją kliencką i botem, użyj interfejsu API direct line 3.0.

  3. Po zakończeniu wybierz pozycję Zastosuj , aby zapisać konfigurację lokacji. Powtórz ten proces, począwszy od nowej lokacji, dla każdej aplikacji klienckiej, którą chcesz połączyć z botem.

Konfigurowanie rozszerzonego uwierzytelniania

Jedną z dostępnych konfiguracji lokacji są opcje rozszerzonego uwierzytelniania, które pomagają ograniczyć zagrożenia bezpieczeństwa podczas nawiązywania połączenia z botem (na przykład przy użyciu kontroli czat internetowy). Aby uzyskać więcej informacji, zobacz Uwierzytelnianie rozszerzone direct line.

Aby dodać rozszerzone uwierzytelnianie:

  1. Włącz opcję Ulepszanie uwierzytelniania. Zostanie wyświetlony komunikat "Musisz mieć co najmniej jedno zaufane źródło". Zostanie wyświetlony link Dodaj zaufane źródło . Jeśli włączysz rozszerzone uwierzytelnianie, musisz określić co najmniej jedno zaufane źródło.

    Zaufane źródło to domena używana przez system do uwierzytelniania użytkowników. W takim przypadku funkcja Direct Line używa domeny do generowania tokenu.

    • Jeśli skonfigurujesz zaufane źródła w ramach strony interfejsu użytkownika konfiguracji, te ustawienia będą zawsze używane jako jedyne ustawienie dla generowania tokenu. Wysyłanie dodatkowych zaufanych źródeł (lub ustawienie zaufanych źródeł na brak) podczas generowania tokenu lub rozpoczynania konwersacji zostanie zignorowane (nie są dołączane do listy ani weryfikowane krzyżowo).
    • Jeśli nie włączono rozszerzonego uwierzytelniania, zostanie użyty dowolny adres URL źródła wysyłany w ramach wywołań interfejsu API. Add trusted origin
  2. Po dodaniu zaufanego adresu URL domeny wybierz pozycję Zastosuj.

Przykładowy bot linii bezpośredniej

Przykład platformy .NET można pobrać z tej lokalizacji: Przykład bota linii bezpośredniej.

Przykład zawiera dwa projekty:

  • DirectLineBot. Tworzy bota w celu nawiązania połączenia za pośrednictwem kanału direct line.
  • DirectLineClient. Jest to aplikacja konsolowa, która komunikuje się z poprzednim botem za pośrednictwem kanału Direct Line.

Interfejs API linii bezpośredniej

  • Poświadczenia interfejsu API direct line muszą zostać uzyskane z rejestracji bota platformy Azure i umożliwią wywołującym nawiązanie połączenia z botem, dla którego zostały wygenerowane. W projekcie bota appsettings.json zaktualizuj plik przy użyciu tych wartości.

    {
    "MicrosoftAppId": "",
    "MicrosoftAppPassword": ""
    }
    
  • W witrynie Azure Portal włącz bezpośredni wiersz na liście kanałów, a następnie skonfiguruj wpis tajny direct line. Upewnij się, że pole wyboru wersji 3.0 jest zaznaczone. W projekcie klienta konsoli zaktualizuj App.config plik przy użyciu klucza tajnego direct line i dojścia bota (identyfikator bota).

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

Komunikaty użytkownika są wysyłane do bota przy użyciu metody klienta Conversations.PostActivityAsync direct line przy użyciu wygenerowanego ConversationId wcześniej.

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);
        }
    }
}