Übungstutorial: Erstellen einer neuen Kaizala-Aktion
Übersicht
In diesem Tutorial erstellen wir eine benutzerdefinierte Kaizala-Aktion mithilfe des erweiterbaren Aktionsframeworks, das von der Kaizala-Plattform bereitgestellt wird.
Wir erstellen eine Aktion "Feedback fragen", die es Kaizala-Benutzern ermöglicht, feedback von anderen Benutzern in Bezug auf 1:5 star Bewertungen zu gestellten Fragen zu bitten – zusammen mit kommentaren, die sie abgeben möchten.
Hier können Sie Kaizala-Aktionspakete herunterladen.
Voraussetzungen
- Ein Smartphone (Android/iOS) mit installierter Kaizala-App
- Ein Office365-Konto
- Zugriff auf einen HTML/JS-Editor (Editor/Visual Studio Code/etc.)
Schritte zum Erstellen einer Beispielaktion
Schritt 1: Erstellen eines neuen Verzeichnisses für Ihr Aktionspaket
- Erstellen Sie ein neues Verzeichnis auf Ihrem Desktop & nennen Sie es "SampleAction".
- Speichern aller nachfolgenden Dateien in diesem Verzeichnis
Schritt 2: Definieren eines Datenmodells für Ihre Aktion
Zunächst müssen wir das Datenmodell definieren, das in unserer benutzerdefinierten Aktion verwendet wird.
Die Kaizala-Aktionen sind derzeit formularbasierte Datenmodelle. Daher müssen wir zuerst die "Fragen" definieren, die wir in unsere Form aufnehmen müssen.
Da es sich um eine Aktion "Feedback fragen" handelt, planen wir die Verwendung von zwei Datenteilen.
- Numerische Bewertung (Wert 1 bis 5)
- Kommentar/Ausführliches Feedback( falls vorhanden)
Die Kaizala Forms-Infrastruktur unterstützt die folgenden Fragetypen:
Fragetyp Beschreibung SingleSelect Single-Choice-Frage mit Optionen MultiSelect Multiple-Choice-Frage mit Optionen Text Frage mit einer Nur-Text-Antwort Numeric Frage mit einer numerischen Antwort Standort Frage mit Standortantwort DateTime Frage mit DateTime-Antwort Bild Frage mit Bild als Antwort Für unsere beiden Fragen verwenden wir den Fragetyp "Numerisch" & "Text" für die Bewertungsnummer & Kommentare.
- Erstellen Sie eine neue Datei namens "appModel.json", und platzieren Sie den folgenden Inhalt in der Datei. Die Datei enthält die beiden in der Reihenfolge aufgeführten Fragen.
{ "questions": [{ "title": "Rating", "type": "Numeric" }, { "title": "Comments", "type": "Text" } ], "title": "Ask Feedback", "visibility": "All", "isAnonymous": false, "isResponseAppended": false }
- Hinweis: Der obige Code enthält auch zusätzliche Metadaten, über die wir später erfahren werden (außerhalb des Bereichs für diese Sitzung).
- Speichern der Datei
Schritt 3: Definieren einer Ansicht zum Erstellen der Anforderung für Feedback
- Wir erstellen nun eine neue HTML-Datei, die verwendet wird, um neue Instanzen unserer Kaizala-Aktion zu erstellen.
- Dies ist die Ansicht, die aufgerufen wird, wenn in der Palette auf das Symbol getippt wird. In dieser Ansicht möchten wir sie fragen, wozu sie Feedback wünschen.
- Erstellen Sie eine neue Datei mit dem Namen "CreationView.html", und platzieren Sie den folgenden HTML-Code in der Datei.
<html> <head> </head> <body onload="onCreatePageLoad()"> <br/> <br/> <div> <p>What would you like feedback on?</p> <br/> <br/> <input type="text" name="description" id="description" placeholder="Enter question text here" value=""> </div> <br/> <br/> <div> <input type="submit" name="submit" value="Submit" onclick="submitData()"> </div> </body> </html>
- Speichern der Datei
Schritt 4: Einschließen des Kaizala Forms JS SDK
- Um Entwicklern die Nutzung der Formularinfrastruktur zu erleichtern, stellt Kaizala eine JavaScript-Wrapperbibliothek bereit, die Sie in Ihre benutzerdefinierten Aktionen einschließen können.
- Laden Sie die folgende Datei herunter, & sie im selben Verzeichnis wie Ihre datamodel.json und CreationView.html
Schritt 5: Verwenden des Kaizala Forms JS SDK zum Senden eines Formulars
Fügen Sie den folgenden Codeausschnitt im
<head>
Element Ihres "CreationView.html" hinzu, um auf das Kaizala Forms JS SDK zu verweisen.<head> <script type="text/javascript" src="KASClient.js"></script> </head>
Wenn der Benutzer nun auf "Senden" klickt, müssen wir überprüfen, ob er eine Frage eingegeben hat, zu der er Feedback abgeben soll – und die Formularinstanz erstellen.
Außerdem müssen wir das Formular beim Laden der Seite instanziieren. Fügen Sie dem "CreationView.html" im -Element den
<head>
folgenden JavaScript-Codeausschnitt hinzu.<script type="text/javascript"> var _form; // type: KASForm // Below will be called on onload of CreationView.html function onCreatePageLoad() { KASClient.Form.initFormAsync (function (form, error) { if (error != null) { showAlert("Error:initFormAsync:" + error); return; } _form = form; }); } function submitData() { var description = document.getElementById("description").value; if (description == null || description == "") { KASClient.App.showNativeErrorMessage("Please enter the details for what you would like feedback on."); } else { // Set the description to form title _form.title = description; // Finally send the request KASClient.Form.submitFormRequest(_form); } } </script>
Speichern der Datei
Schritt 6: Erstellen des Aktionspaketmanifests
Nachdem wir nun den Anschein haben, was wir erreichen möchten, und erfolgreich eine Ansicht erstellt haben, erstellen wir nun die Paketmanifestdatei, die auf diese Dateien verweist.
Die Paketmanifestdatei enthält wichtige Informationen für die Kaizala-Plattform, damit sie Ihre benutzerdefinierte Kaizala-Aktion erkennen und ausführen kann.
Wir erstellen ein Paketmanifest und geben Folgendes an:
- Anzeigename für Ihre Kaizala-Aktion
- Benutzerdefinierte ID für die Aktion
- Zuordnung der Erstellungsansicht zur seite CreationView.html
Vorher benötigen wir ein Symbol für das Aktionspaket. Laden Sie die Symboldatei herunter& speichern Sie sie als icon.png im selben Ordner wie die anderen Dateien.
Erstellen Sie eine neue Datei mit dem Namen "package.json", und fügen Sie der Datei den folgenden Codeausschnitt hinzu. Stellen Sie sicher, dass Sie die ID bearbeiten, um Ihre Aktion eindeutig/eindeutig zu machen.
{ "id": "com.microsoft.mobile.kaizala.swads.FeedbackSample", "schemaVersion": 1, "version": 1, "minorVersion": 1, "providerName": "Microsoft Inc.", "displayName": "Ask Feedback", "description": "Custom action to collect feedback.", "icon": "icon.png", "appModel": "appModel.json", "views": { "CreationView": { "labelHeader": "Feedback requested", "sourceLocation": "CreationView.html" } } }
Sie können die Karte konfigurieren, die im Kaizala-Chatcanvas angezeigt wird, indem Sie die Zeichenfolgen im Paketmanifest angeben.
Ändern Sie das "Views"-Objekt im Paketmanifest so, dass es dem folgenden Codeausschnitt entspricht:
"views": { "CreationView": { "labelHeader": "Feedback requested", "sourceLocation": "CreationView.html" }, "ChatCanvasCardView": { "labelResponded": "You have provided feedback.", "labelRespondToForm": "PROVIDE FEEDBACK", "isResponseEditable": true } }
Speichern der Datei
Schritt 7: Erstellen der Antwortansicht
- Nun erstellen wir die Ansicht, die kaizala-Benutzern angezeigt wird, die auf eine instance unserer Aktion reagieren.
- Erstellen Sie einen neuen Dateiaufruf ResponseView.html und fügen Sie den folgenden Codeausschnitt in die Datei ein.
- Wir gehen wie folgt vor:
- Optionsfeldauswahl für die Bewertung hinzufügen
- Vorbereiten eines Formularantwortobjekts und Codes zum Senden des Formulars
<html> <head> <title></title> <script type="text/javascript" src="KASClient.js"></script> <script> var _form; // type: KASForm var _myFormResponses; // type: KASFormResponse[] // Below will be called on onload of ResponseView.html function onResponsePageLoad() { KASClient.Form.getFormAsync(function (form, error) { if (error != null) { KASClient.App.showNativeErrorMessage("Error:getFormAsync:" + error); return; } _form = form; // Document title would be the form title document.getElementById("title").innerHTML = _form.title; KASClient.Form.getMyFormResponsesAsync(function (responses, error) { if (error != null) { KASClient.App.showNativeErrorMessage("Error:getMyFormResponsesAsync:" + error); return; } _myFormResponses = responses; // Render previous response, if any if (isCurrentUserResponded()) { var rating = _myFormResponses[0].questionToAnswerMap["0"]; var remark = _myFormResponses[0].questionToAnswerMap["1"]; var options = document.getElementsByName('option'); options[rating - 1].checked = true; document.getElementById("description").value = remark; document.getElementById("description").placeholder = ""; } }); }); } function submitData() { var selectedOption = getSelectedOption(); var remark = document.getElementById("description").value; submitFormResponse(selectedOption, remark); } function getSelectedOption() { // Check which radio button is checked var options = document.getElementsByName('option'); for (var i = 0; i < options.length; i++) { if (options[i].checked) { return parseInt(options[i].value); } } } // Below will be called when responder submits a new response function submitFormResponse(selectedOption, remark) { if (remark == null || remark == "") { KASClient.App.showNativeErrorMessage("Please fill remark"); } else if (selectedOption == "") { KASClient.App.showNativeErrorMessage("Please select one option"); } else { // For submitting response a question-answer // map is required, lets create that! var questionToAnswerMap = JSON.parse("{}"); questionToAnswerMap[0] = selectedOption; questionToAnswerMap[1] = remark; var responseId = null; var isEditingPreviousResponse = false; // If there is a previous response, update it if (isCurrentUserResponded()) { responseId = _myFormResponses[0].id; isEditingPreviousResponse = true; } // Finally submit the response KASClient.Form.sumbitFormResponse(questionToAnswerMap, responseId, isEditingPreviousResponse); } } function isCurrentUserResponded() { return _myFormResponses && _myFormResponses.length > 0; } </script> </head> <body onload="onResponsePageLoad()"> <br/> <br/> <div> <p id="title"></p> </div> <div> <br/> <br/> <div> <p>Select your rating:</p> <br/> <br/> <div> <label>1</label> <input type="radio" name="option" id="option0" value="1" checked> </div> <div> <label>2</label> <input type="radio" name="option" id="option1" value="2"> </div> <div> <label>3</label> <input type="radio" name="option" id="option2" value="3"> </div> <div> <label>4</label> <input type="radio" name="option" id="option3" value="4"> </div> <div> <label>5</label> <input type="radio" name="option" id="option4" value="5"> </div> </div> <br/> <br/> <div> <p>Comments</p> <input type="text" name="description" id="description" placeholder="Please enter your comments here."> </div> <br/> <br/> </div> <div class="footer"> <input type="submit" name="submit" value="Submit" onclick="submitData()"> </div> </body> </html> `````
Schritt 8: Erstellen der Zusammenfassungsansicht
Nun erstellen wir die Ansicht, die Kaizala-Benutzern angezeigt wird, die die Zusammenfassung der Aktion anzeigen.
Erstellen Sie einen neuen Dateiaufruf SummaryView.html, und fügen Sie den folgenden Codeausschnitt in die Datei ein. Dadurch wird eine Zusammenfassungsansicht der Gesamtbewertungen und Kommentare erstellt.
<html> <head> <title></title> <script type="text/javascript" src="KASClient.js"></script> <script type="text/javascript"> // Globals var _form; // type: KASForm var _myFormResponses; // type: KASFormResponse[] var _formSummary; // type: KASFormFlatSummary var _users; // type: Dictionary<UserId: KASUser> // Below will be called on onload of SummaryView.html function onSummaryPageLoad() { KASClient.Form.getFormAsync(function (form, error) { if (error != null) { KASClient.App.showNativeErrorMessage("Error:getFormAsync:" + error); return; } _form = form; KASClient.App.showProgressBar("Fetching summary"); KASClient.Form.getFormSummaryAsync( function (flatSummary, processedSummary, error) { // In this callback data is fetched from local database if (error != null) { KASClient.App.showNativeErrorMessage("Error:getFormSummaryAsync:callback1:" + error); return; } onGetSummary(flatSummary); }, function (flatSummary, processedSummary, error) { // In this callback data is fetched from server KASClient.App.hideProgressBar(); if (error != null) { KASClient.App.showNativeErrorMessage("Error:getFormSummaryAsync:callback2:" + error); return; } onGetSummary(flatSummary); } ); }); } function onGetSummary(summary) { _formSummary = summary; KASClient.App.getUsersDetailsAsync(_formSummary.getRespondedUserIds(), function (users, error) { if (error != null) { KASClient.App.showNativeErrorMessage("Error:getUsersDetailsAsync:" + error); return; } _users = users; // Document title would be the form title document.getElementById("title").innerHTML = _form.title; // Get all responses of the user, and find the average var totalRating = 0; var responseCount = 0; for (var userId in _users) { var userResponses = _formSummary.getResponsesForUserId(userId); // type: Dictionary<QuestionId, string[]> totalRating += parseInt(userResponses["0"][0]); responseCount += 1; } document.getElementById("avg").innerHTML = totalRating / responseCount; }); } </script> </head> <body onload="onSummaryPageLoad()"> <div class="header"> <p id="title">Title</p> <br/> <br/> <p id="rating">Average Rating: </p> <p id="avg">avg</p> </div> </body> </html>
Bearbeiten Sie das Views-Objekt in Ihrem Paketmanifest wie folgt:
"views": { "CreationView": { "labelHeader": "Feedback requested", "sourceLocation": "CreationView.html" }, "ChatCanvasCardView": { "labelResponded": "You have provided feedback.", "labelRespondToForm": "PROVIDE FEEDBACK", "isResponseEditable": true }, "ResponseView": { "labelHeader": "Provide feedback", "sourceLocation": "ResponseView.html" }, "ResponseResultsView": { "labelPageHeader": "Feedback summary", "sourceLocation": "SummaryView.html" } } `````
Schritt 9: Erstellen des Kaizala-Aktionspakets
- Zippen Aller Dateien in eine einzelne ZIP-Datei
- Stellen Sie sicher, dass die ZIP-Datei kein weiteres Verzeichnis enthält. Die Dateien befinden sich jedoch im Stammverzeichnis der ZIP-Datei.
Schritt 10: Melden Sie sich beim Kaizala-Verwaltungsportal an.
- Öffnen Sie ein Browserfenster, und navigieren Sie zu https://manage.kaiza.la/
- Klicken Sie in der oberen linken Ecke auf "Anmelden".
- Geben Sie Ihre Office365-Anmeldeinformationen ein, um sich beim Portal anzumelden. Erteilen Sie dem Verwaltungsportal bei Bedarf Berechtigungen für den Zugriff auf Ihre Profilinformationen (nur zum ersten Mal erforderlich).
- Tippen Sie in der oberen rechten Ecke auf "Telefonnummer hinzufügen", & Überprüfen Sie Ihre Telefonnummer.
Schritt 11: Hochladen des Aktionspakets
- Navigieren Sie über die linke Navigationsleiste zu "Aktionen".
- Wählen Sie in der Dropdownliste auf der rechten Seite "Aktion importieren" aus, und klicken Sie auf "Starten".
- Klicken Sie auf "Hochladen", und wählen Sie die erstellte ZIP-Datei aus.
- Klicken Sie auf "Importieren".
- Nachdem das Paket erfolgreich importiert wurde, bestätigen Sie dies, indem Sie erneut zu Aktionen navigieren. Ihre Aktion sollte unter "Von dieser ID erstellt" aufgeführt werden.
- Sie können diese Aktion testen, indem Sie die folgenden Schritte ausführen.
Schritt 12: Erstellen einer neuen Kaizala-Gruppe
- Navigieren Sie im Kaizala-Verwaltungsportal über die linke Navigationsleiste zu "Gruppen".
- Tippen Sie auf "Gruppe erstellen".
- Nennen Sie die Gruppe "Kaizala Actions Testing".
- Überprüfen Sie, ob die Gruppe in Ihrer Kaizala-App angezeigt wird.
Schritt 13: Veröffentlichen der Aktion in der Gruppe
- Navigieren Sie über die linke Navigationsleiste zu "Gruppen".
- Tippen Sie auf den Gruppennamen, den Sie in Schritt 13 erstellt haben.
- Tippen Sie auf die Registerkarte "Aktionen".
- Wählen Sie die Aktion aus, die Sie in Schritt 12 erstellt haben, & klicken Sie auf "Aktion hinzufügen". Ihre benutzerdefinierte Kaizala-Aktion sollte nun auf der Registerkarte "Entdecken" angezeigt werden.
Schritt 14: Verwenden einer benutzerdefinierten Kaizala-Aktion
- Fügen Sie der Palette die benutzerdefinierte Aktion hinzu, und verwenden Sie sie in Ihrer Gruppe.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für