This commit is contained in:
Dail Magee Jr 2017-06-20 08:51:36 -07:00 коммит произвёл GitHub
Родитель ba20f1f77c
Коммит 965739ec34
1 изменённых файлов: 31 добавлений и 31 удалений

Просмотреть файл

@ -17,7 +17,7 @@ geolocation: [Europe]
During March 2017 at Microsoft offices in Lysaker, Norway, Microsoft teamed up with Powel to create a brand-new bot named André.
The aim of the hackfest was to create a voice-driven chatbot that could assist field engineers within the space of electrical grids to answer questions and provide reporting capabilities during inspections to free up their hands. The solution was built using tools from Microsoft leveraging chatbots and conversations as a platform (CaaP) technologies.
<img alt="Photo of field engineer working atop substation transformer" src="{{ site.baseurl }}/images/Powel/CaaP/fieldengineer.jpg" width="693">
<img alt="Photo of field engineer working atop substation transformer" src="{{ site.baseurl }}/images/powel/CaaP/fieldengineer.jpg" width="693">
In this hackfest, we used the following key technologies:
@ -39,17 +39,17 @@ The hackfest occurred after multiple calls in which the problem area was demysti
### Core team
| Company | Person |Role |
| ------- | -------------------- | ----------------------- |
| Powel | Damian Plaza | Software Engineer |
| | Jakub Hiszczyn | Software Engineer |
| | Karol Stosik | Software Engineer |
| | Maksymilian Jastrzebski | Software Engineer |
| | Tor Hovland | Software Engineer |
| | Simen Karlsen | Smart Grid-Enabler |
| | Øystein Askeland | Interaction Designer |
| Microsoft | Pedro Dias | Sr. Technical Evangelist |
| | Anders Gill | Technical Evangelist |
| Company | Person | Role
| --- | --- | ---
| Powel | Damian Plaza | Software Engineer
| | Jakub Hiszczyn | Software Engineer
| | Karol Stosik | Software Engineer
| | Maksymilian Jastrzebski | Software Engineer
| | Tor Hovland | Software Engineer
| | Simen Karlsen | Smart Grid-Enabler
| | Øystein Askeland | Interaction Designer
| Microsoft | Pedro Dias | Sr. Technical Evangelist
| | Anders Gill | Technical Evangelist
## Solution overview
@ -76,13 +76,13 @@ One feature in particular that really extends the usefulness of this bot was the
## Customer profile
<img alt="Powel logo" src="{{ site.baseurl }}/images/Powel/CaaP/powel_logo_regular.png" width="234">
<img alt="Powel logo" src="{{ site.baseurl }}/images/powel/CaaP/powel_logo_regular.png" width="234">
[Powel](https://www.powel.com/) spans Europe with a broad and sustainable customer base and a long history as a trusted supplier of software solutions for cities, municipalities, counties, the energy industry, and the contracting sector. Powel generates around US$50M revenue each year and was founded in Norway in 1996. Powel has grown to be an international corporation with staff numbering 460 with offices in these six countries in addition to Norway: Sweden, Denmark, Switzerland, Chile, Turkey, and Poland.
*Powel business segments*
<img alt="Photo montage illustrating Powel business segments: smart enerby, asset performance, metering, water and community, construction" src="{{ site.baseurl }}/images/Powel/CaaP/segments.png" width="652">
<img alt="Photo montage illustrating Powel business segments: smart enerby, asset performance, metering, water and community, construction" src="{{ site.baseurl }}/images/powel/CaaP/segments.png" width="652">
## Problem statement
@ -118,13 +118,13 @@ We defined features and tasks to make it easier to distribute work across the te
*Kanban board*
<img alt="Screen shot of Kanban board" src="{{ site.baseurl }}/images/Powel/CaaP/kanban.png" width="900">
<img alt="Screen shot of Kanban board" src="{{ site.baseurl }}/images/powel/CaaP/kanban.png" width="900">
We decided to use Android for the visualization part because the Powel developers all had Android devices. Besides developing a working app, the aim was also to educate the Powel developers on Bot Framework and CaaP, so that they could bring their knowledge back to the drawing board when developing and extending their apps for scenarios that could leverage the Bot Framework and Cognitive Services. The proof-of-concept (PoC) bot developed during the hackfest would be used as a foundation that would help Powel move their own bot into production after further development.
*Sketch of how a field engineer usually would inspect a power station*
![Whiteboard diagram of power-station inspection process]({{ site.baseurl }}/images/Powel/CaaP/sketch.jpg)
![Whiteboard diagram of power-station inspection process]({{ site.baseurl }}/images/powel/CaaP/sketch.jpg)
The following was achieved by the end of the hackfest:
@ -145,7 +145,7 @@ The current PoC chatbot allows the field engineer to execute an inspection by in
*Architecture diagram*
![Architecture diagram]({{ site.baseurl }}/images/Powel/CaaP/architecture.jpg)
![Architecture diagram]({{ site.baseurl }}/images/powel/CaaP/architecture.jpg)
## Technical delivery
@ -195,7 +195,7 @@ We set up CI in Visual Studio Team Services to build and deploy the bot to Azure
*The team working hard*
![Photo of team working in conference room]({{ site.baseurl }}/images/Powel/CaaP/team.jpg)
![Photo of team working in conference room]({{ site.baseurl }}/images/powel/CaaP/team.jpg)
### Achievements day 2
@ -217,7 +217,7 @@ We connected the mobile app to the bot and made it work. We also spent some time
The following image is a rough initial sketch of the design interface, made by using [PowerPoint Storyboarding](https://www.visualstudio.com/en-us/docs/work/office/storyboard-your-ideas-using-powerpoint).
![Low-fidelity UI storyboard]({{ site.baseurl }}/images/Powel/CaaP/design-sketches.jpg)
![Low-fidelity UI storyboard]({{ site.baseurl }}/images/powel/CaaP/design-sketches.jpg)
We further worked on getting NuGet packages from the Powel core APIs (specifically, the Condition Monitoring API) to be included in the build for the bot. We worked on some conversation flow plans for later implementation, and spent some more time on working with the intents and training LUIS to recognize them.
@ -243,7 +243,7 @@ We simply removed the `ContractResolver` line, and that seemed to fix the issue.
We ended the day by testing the bot outside to see how it handled background noise and whether it would be able to capture the intent of the field engineer. The location chosen was a noisy environment (a highway) that could very much be an actual inspection site where a field engineer would have to inspect an overhead line or a power mast. The testing succeeded with positive results:
![Photo of testing mobile app directly over active highway]({{ site.baseurl }}/images/Powel/CaaP/testing.jpg)
![Photo of testing mobile app directly over active highway]({{ site.baseurl }}/images/powel/CaaP/testing.jpg)
### Achievements day 3
@ -251,7 +251,7 @@ The final part of the hackfest setting up build automation for the Xamarin.Forms
The following diagram show the final flow of the PoC chatbot. (Sadly, we did not implement text translation because of time constraints, but we included that part in the following image).
<img alt="Flow diagram" src="{{ site.baseurl }}/images/Powel/CaaP/flow.png" width="900">
<img alt="Flow diagram" src="{{ site.baseurl }}/images/powel/CaaP/flow.png" width="900">
A field worker talks to André (the mobile app) in his natural language. The speech is transformed into text by the Google speech recognition engine and returned to the mobile app. The app sends the text for translation and receives fully translated text in return. The app then passes the translated text to LUIS, which captures the intent and entities and sends the response back to the mobile app. The mobile app sends the detected intent and entities (including the field worker ID) to the Bot Framework, which sends a request to the Powel back end. The appropriate response is returned to the mobile app, which translates the text into the field worker's language and speaks the text aloud.
@ -343,14 +343,14 @@ public async Task AssetAllGood(IDialogContext context, LuisResult result)
In the preceding scenario, the field engineer is asked to confirm with either "Yes" or "No" (by either tapping the appropriate button or using natural voice to respond), but many other types of data-collection inputs can be chosen:
| Prompt type | Description |
| ------- | -------------------- |
| Prompts.text | Asks the user to enter a string of text |
| Prompts.confirm | Asks the user to confirm an action |
| Prompts.number | Asks the user to enter a number |
| Prompts.time | Asks the user for a time or date |
| Prompts.choice | Asks the user to choose from a list of choices |
| Prompts.attachment | Asks the user to upload a picture or video |
Prompt type | Description
--- | ---
Prompts.text | Asks the user to enter a string of text
Prompts.confirm | Asks the user to confirm an action
Prompts.number | Asks the user to enter a number
Prompts.time | Asks the user for a time or date
Prompts.choice | Asks the user to choose from a list of choices
Prompts.attachment | Asks the user to upload a picture or video
#### FormFlow
@ -388,7 +388,7 @@ Because we were already using Slack for communication throughout the hackfest, w
In the following image, you can see how testing the conversation using Slack looks.
![Screen shot of conversation with bot in Slack]({{ site.baseurl }}/images/Powel/CaaP/slack.png)
![Screen shot of conversation with bot in Slack]({{ site.baseurl }}/images/powel/CaaP/slack.png)
We managed to set up the Slack integration by registering the bot in the dev.botframework space and choosing the connector type without the need of any coding.
@ -469,7 +469,7 @@ Because there is too much code to display and explain in this report, you can fi
The following animated GIF shows the client mobile app on the left developed in Xamarin.Forms, and the Powel Condition Monitoring app on the right displaying the status of a power station.
<img alt="Animated screen shot of Agent UI" src="{{ site.baseurl }}/images/Powel/CaaP/poweldemogif.gif" width="812">
<img alt="Animated screen shot of Agent UI" src="{{ site.baseurl }}/images/powel/CaaP/poweldemogif.gif" width="812">
## Conclusion