Technical Articles
CAI Challenge Submission: ProjectVoiceBot – Manage and Control SAP PPM Projects
This blog is part of the SAP Conversational AI Tutorial Challenge 2021 and I would like to share our business case “ProjectVoiceBot” with you. With this bot, we are able to manage and control SAP PPM projects via voice.
What is the use case about?
Within our itelligence team we came up with the idea of a bot which supports project managers in their daily life. These project responsables would like to check the status of their projects no matter where they are (🏢, 🏖, 🏔, 🛏️…). Therefore, we created a digital assistant who is available 24/7 and can be reached via voice or text.
How did we start?
In order to discover all use cases, we did a creative workshop with the team. This workshop included first prototypes to validate the idea. Then we started to build the bot.
Results of our workshop
Step-by-step guide
First, I would like to explain you our four main categories of possible questions. Then we will have a look on the channel connection and the backend connection.
General project questions
User might be interested in an overview about current projects. One example is “Are there any critical projects?” In this case, an intent is triggered to solve this question: @ask-projects-with-status. This intent includes expressions for requesting the current status of projects. This means, user can ask for projects which have the severity “critical”, but they can also ask for projects with the severity “OK” or “not in plan.” All possible values for “Severity” are defined in the corresponding entity (called #severity). This also helps the bot to identify the intent “@ask-projects-with-status” with an higher accuracy, as the entity #severity is included in the expressions.
Intent for asking about the status of multiple projects
As a next step, the corresponding skill is built. The intent explained above is triggering this skill:
Trigger for Skill Status of projects
In the requirements section, there is one requirement: a value for the severity has to be known to the bot and stored in the bot-memory. Since this entity is included in the intent, this requirement is usually met automatically. Afterwards a service of our middleware is triggered via URL by our action tab. This service connects to the backend SAP system and receives information about the requested projects. Here you can see an example of the API response:
{
"conversation": {
"id": "test-1611310842386",
"language": "en",
"memory": {
"severity": {
"confidence": 0.99,
"raw": "critical",
"value": "critical"
},
"apiResponseData": [
//response data of the backend API]
},
"skill": "call-api",
},
"replies": [
{
"type": "text",
"content": "There are 15 projects with the severity critical. Do you want to see the whole list?"
}
]
}
As you can see, the bot returns the amount of projects with the severity the user mentioned in his question. Next, the bot triggers a second skill and asks the user, if he wants to know the details about the projects. In this case, the requirement is the intent “@yes” or “@no” from the user (Question: “Do you want to see all relevant projects?”).
Requirement: Yes or No?
If the answer is “yes”, the bot shows details about the projects. This is also done via API-Service. As a result, the user receives information about the requested projects and can dive deeper into one of the projects.
Project-related questions
To dive deeper, users can request information about a specific project, for example about the manager of a certain project. This case is also triggered with a corresponding intent. Another entity-type was created in order to enhance the “brain” of the bot about how typical project names or numbers look like. Using an API service the bot requests the name of the responsible project manager and sends the response to the user.
User-related questions
Another category are user-related questions (e.g. “What is the status of my project?”). Since this category is connected to authorization topics and user information, it is not in scope of this blog post.
Actions
The last category are actions triggered by the user. This means, the user wants to change e.g. the status of a certain milestone. In order to achieve this, yet another intent was created. The corresponding skill has the following requirements:
- number of the project (#projectnumber)
- name if the milestone to be changed (#milestone)
- new severity of the milestone (#severity)
If the user has given all three requirements, a POST-request is sent to the middleware in order to update the milestone. Afterwards, the memory fields for the milestone and severity are unset in the memory. The project number is kept, since project managers often want to change multiple milestones.
Connecting the backend
We have connected the bot via SAP Cloud Platform (SCP) to our S/4 HANA system. A node.js-server sends and receives data using a destination in the SCP connected to the backend system. On the backend system, a standard oData-service is triggered.
This means we have a direct integration into the SAP PPM module. All projects can be managed and controlled with the “ProjectVoiceBot.”
Connecting user channels
There are several possibilities to connect the ProjectVoiceBot to end user channels. As the bot name is already indicating, a voice channel was the primary goal. Therefore, we decided to use Amazon Alexa. First, the whitelisting had to be done. Next, the intents “CONVERSATION_START” and “CONVERSATION_END” had to be created and integrated in the scenario. The phrase “project voice” was used an invocation name.
Expert hint for invocation name: use two words and write everything in lowercase letters in order to have a working integration to Alexa
One the Alexa Dev Console, several users can be added as beta users in order to validate our bot. Moreover, we have deployed a Telegram bot as well as a SAP CAI Web Client for Fiori.
Conclusion
With theses example you are able to create your own “ProjectVoiceBot” and manage your projects wherever you are. On top of that, the voice integration increases the user experience.
Let me know what you think about this case, and give us a like, please 🙂
If you are interested in more use cases and our workshop, feel free to contact me.
Nice post, Simon! Thank you for sharing the business case that's been implemented.
Small comment, try to avoid yes/no intents and simply analyze sentiment whether the reply is positive/neutral (that means yes), or negative/vnegative (that means no). In this case you can easily process the replies like: "I don't like to have it", "Go ahead and show me" and etc.
Hi Siarhei Tsikhanenka
Thanks!
Your comment is very helpful, I can see your point. But only using sentiment analysis seems a little bit tricky for me, since not every negative reply is recognized as "negative" (especially in German).
Hi Simon Leifick,
thank you for sharing the Guide for this helpful Bot. Nice Use Case!
Thanks for submitting your content Simon Leifick,! 🙂
Hi Simon,
thanks for sharing your use case. Very nice!
I would like to replicate your scenario for a customer. Where did you find the SAP PPM OData services that you have used?
Thank you and Best Regards
Davide