Top

Seria o PVA – zmienne globalne


Power Virtual Agents właśnie zostało wyposażone w nową funkcjonalność zwaną „zmiennymi globalnymi”. Dzięki temu możemy teraz łączyć konwersacje ze sobą mogąc przekazywać kontekst pomiędzy tematami. Ponadto – boty mogą dostać kontekst z zewnętrznych aplikacji przy użyciu tych zmiennych. Jak to zrobić? Pokażę Ci.

Najpierw – dokumentacja

Jeśli jesteś zainteresowany tym, co Microsoft napisał o nowym ficzerze, przejdź do dokumentacji: https://docs.microsoft.com/en-us/power-virtual-agents/authoring-variables-bot. Można tam znaleźć podstawowe informacje na temat tworzenia, edytowania i usuwania tych zmiennych, a także niezbyt szczegółowy opis, jak ustawić ją za pomocą kontekstu ze źródła zewnętrznego. I na tym chcę się skupić.

Screencast

Obejrzyj wideo, w którym szczegółowo opisuję działanie tego rozwiązania:

Tworzenie zmiennej globalnej

Po utworzeniu akcji pytania, które zwraca wartość od użytkownika jako zmienną, kliknij następnie małą ikonę ołówka (1) obok jej nazwy, a we właściwościach wybierz „Bot” dla typu i co najważniejsze – zaznacz pole „External sources can set values” (2). Tylko w ten sposób możliwe będzie przekazanie kontekstu z parametrów zapytania adresu URL:

Kiedy to zrobisz, zapisz gdzieś nazwę swojej zmiennej, ale tylko część po „bot.”, także w sytuacji, gdy wyświetla Ci się: „bot.MyVariable” wówczas wartością, której powinieneś użyć, jest tylko „MyVariable”:

Ważne! Korzystanie ze zmiennych globalnych wymaga ponownego przemyślenia przebiegu konwersacji i realcji między topicami. Temat, w którym tworzona jest zmienna, będzie zawsze wywoływany przez inne tematy korzystające ze zmiennej, w przypadku gdy jej wartość nie zostanie ustawiona. Inne tematy mogą zużywać tylko wartości tej zmiennej.

Ustawianie zmiennej globalnej za pomocą parametrów URL w trybie iframe

Uwaga: pamiętaj, aby opublikować swojego bota przed udostępnieniem go światu. Przejdź do: https://powerva.microsoft.com/#/publish i naciśnij przycisk „Publikuj”.

Czas na pierwszy test. Przejdź do „Channels” i kliknij „Custom website”. Zauważysz, że wyświetla się kod iframe, który możesz po prostu pobrać i wkleić na swojej stronie. Dla naszego ćwiczenia skopiuj wartość „src”, a następnie wklej ją w nowym oknie:

Po wklejeniu i otwarciu wyświetli on bota na całej szerokości i wysokości w przeglądarce. Zacznij teraz rozmowę na temat, który używa zmienną globalną. Zobaczysz, że bot najpierw rozpoczyna temat, w którym ustawiana jest zmienna, a następnie wraca do poprzedniego tematu. W porządku. Teraz dodaj zmienną i jej wartość jako parametry zapytania URL:

https://powerva.microsoft.com/webchat/bots/[BOTID]?variableName=VALUE

Teraz, jeśli rozpoczniesz rozmowę i uruchomisz temat wykorzystujący zmienną, zauważysz, że może od razu wyświetlić (i użyć) jej wartość:

Ustawianie zmiennej globalnej za pomocą parametrów URL w trybie osadzania

Ale jak osiągnąć ten sam efekt, gdy bot jest osadzony, dzięki czemu mamy większą kontrolę nad tym, jak działa, nad jego wyglądem i zachowaniem, początkową konwersacją i wiele więcej? To łatwe! Musisz pobrać wartość z ciągu zapytania adresu URL, a następnie przekazać ją do kontekstu PVA, korzystając z poniższej funkcji dispatch:

dispatch({
    type: 'WEB_CHAT/SEND_EVENT',
    payload: {
        name: 'pvaSetContext',
        value: { 
            "glConversationLang": "" + passedParam + "",
            "anotherVariable": "and its value..." 
        }
    }
})

Ważne! Zarówno nazwa zmiennej, jak i jej wartość muszą być otoczone cudzysłowami.

Jeśli chcesz scalić wiadomość powitalną i przekazać kontekst, pamiętaj by pierwszą akcją było przekazanie kontekstu. Ponieważ obie funkcje działają w trybie asynchronicznym, nie będą uruchamiane w sekwencji. Aby obejść ten problem, spróbuj użyć obiektu Promise i timeout’u, aby go zwrócić obiekt, np.

new Promise(function (resolve) {
    dispatch({
        type: 'WEB_CHAT/SEND_EVENT',
        payload: {
            name: 'pvaSetContext',
            value: { "glConversationLang": "" + passedParam + "" }
        }
    })
    setTimeout(() => resolve(1), 1000);
}).then(function (result) {
    dispatch({
        meta: {
            method: "keyboard"
        },
        payload: {
            activity: {
                channelData: {
                    postBack: true
                },
                name: "startConversation",
                type: "event"
            },
        },
        type: "DIRECT_LINE/POST_ACTIVITY"
    });
});

I to wszystko! Mam nadzieję, że Ci się podobało i że tekst okaże się przydatny. Jeśli masz jakieś pytania, zostaw je w komentarzach poniżej.


Tomasz Poszytek

Cześć! Nazywam się Tomasz. Jestem ekspertem w dziedzinie automatyzacji procesów i budowaniu rozwiązań dla biznesu z użyciem Power Platform. Jestem Microsoft MVP i Nintex vTE.

Brak komentarzy

Wyślij komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.