/watson-online-store

Code for Cognitive Developer Journey that uses Watson Conversation and Watson Discovery. This application demonstrates a simple abstraction of a chatbot interacting with a Cloudant NoSQL database, using a Slack UI.

Primary LanguagePythonApache License 2.0Apache-2.0

Build Status Bluemix Deployments

Creating a Retail Chatbot using Watson Conversation, Discovery and Database Services

Read this in other languages: English, 한국어

In this developer journey we will create a Watson Conversation based chatbot that allows a user to: 1) find items to purchase using Watson Discovery, and 2) add and remove items from their cart by updating a Cloudant NoSQL Database.

When the reader has completed this journey, they will understand how to:

  • Create a chatbot dialog with Watson Conversation
  • Dynamically store and update a Cloudant NoSQL database based on chatbot results
  • Seed data into Watson Discovery and leverage its natural language capabilities
  • Manage and customize a Slack group to add a chatbot

Flow

With Watson

Want to take your Watson app to the next level? Looking to leverage Watson Brand assets? Join the With Watson program which provides exclusive brand, marketing, and tech resources to amplify and accelerate your Watson embedded commercial solution.

Included Components

  • Bluemix Watson Conversation
  • Bluemix Watson Discovery
  • Bluemix Cloudant NoSQL DB
  • Slack
  • Python

Watch the Video

Steps

NOTE: Perform steps 1-7 OR click the Deploy to Bluemix button and hit Create and then jump to step 6.

There is no web UI (only Slack), so don't use the View app button to see the app. Use the Bluemix dashboard to find and manage the app. Use your Slack UI to chat.

Deploy to Bluemix

  1. Clone the repo
  2. Create Bluemix services
  3. Get Bluemix credentials and add to .env
  4. Configure Watson Conversation
  5. Configure Watson Discovery
  6. Configure Slack
  7. Run the application

1. Clone the repo

Clone the watson-online-store locally. In a terminal, run:

$ git clone https://github.com/ibm/watson-online-store

We’ll be using the file data/workspace.json and the folder data/ibm_store_html/

2. Create Bluemix services

Create the following services:

3. Get Bluemix Services Credentials and add to .env file

As you create the Blumix Services, you'll need to create service credentials and get the username and password:

Move the watson-online-store/env.sample file to /.env and populate the service credentials (and Cloudant URL) as you create the credentials:

# Watson conversation
CONVERSATION_USERNAME=<add_conversation_username>
CONVERSATION_PASSWORD=<add_conversation_password>
WORKSPACE_ID=<add_conversation_workspace>

# Cloudant DB
CLOUDANT_USERNAME=<add_cloudant_username>
CLOUDANT_PASSWORD=<add_cloudant_password>
CLOUDANT_DB_NAME=watson_online_store
CLOUDANT_URL=<add_cloudant_url>

# Watson Discovery
DISCOVERY_USERNAME=<add_discovery_username>
DISCOVERY_PASSWORD=<add_discovery_password>
DISCOVERY_ENVIRONMENT_ID=<add_discovery_environment>
DISCOVERY_COLLECTION_ID=<add_discovery_collection>

# Slack
SLACK_BOT_TOKEN=<add_slack_bot_token>
SLACK_BOT_USER=wos

4. Configure Watson Conversation

Launch the Watson Conversation tool. Use the import icon button on the right

Find the local version of data/workspace.json and select Import. Find the Workspace ID by clicking on the context menu of the new workspace and select View details.

Put this Workspace ID into the .env file as WORKSPACE_ID.

Optionally, to view the conversation dialog select the workspace and choose the Dialog tab, here's a snippet of the dialog:

5. Configure Watson Discovery

Launch the Watson Discovery tool. The first time you do this, you will see "Before working with private data, we will need to set up your storage". Click 'Continue' and wait for the storage to be set up. Create a new data collection and give the data collection a unique name.

Seed the content by selecting Add data to this collection in the dialog, choose the HTML files under data/ibm_store_html/. When completed, add the environment_id and collection_id to the .env file as DISCOVERY_ENVIRONMENT_ID and DISCOVERY_COLLECTION_ID.

6. Configure Slack

Create a slack group or use an existing one if you have sufficient authorization. (Refer to Slack's how-to on creating new groups.) To add a new bot, go to the Slack group’s application settings by navigating to https://<slack_group>.slack.com/apps/manage and selecting the Custom Integrations menu on the left.

Click on 'Bots' and then click the green 'Add Configuration' button.

Give the bot a meaningful name. Note that the '@' symbol is pre-populated by Slack and you do not include that in your .env configuration file. Save this in .env as SLACK_BOT_USER.

Once created save the API Token that is generated into the .env file as SLACK_BOT_TOKEN if you are running locally, or save this if you are using Deploy to Bluemix.

Run /invite <botame> in a channel to invite the bot, or message it directly.

7. Run the application

If you used the Deploy to Bluemix button...

If you used Deploy to Bluemix, most of the setup is automatic, but not quite all of it. We have to update a few environment variables.

In the Bluemix dashboard find the App that was created. Click on Runtime on the menu and navigate to the Environment variables tab.

Update the three environment variables:

  • Set SLACK_BOT_TOKEN to the token you saved in Step 6
  • Set SLACK_BOT_USER to the name of your bot from Step 6
  • Leave CLOUDANT_DB_NAME set to watson-online-store

Save the new values and restart the application, watch the logs for errors.

If you decided to run the app locally...

$ python run.py

Sample output

Start a conversation with your bot:

Add an item to your cart:

Troubleshooting

  • Help! I'm seeing errors in my log using Deploy to Bluemix

This is expected during the first run. The app tries to start before the Discovery service is fully created. Allow a minute or two to pass, the following message should appear:

Watson Online Store bot is connected and running!

License

Apache 2.0

Privacy Notice

If using the Deploy to Bluemix button some metrics are tracked, the following information is sent to a Deployment Tracker service on each deployment:

  • Python package version
  • Python repository URL
  • Application Name (application_name)
  • Application GUID (application_id)
  • Application instance index number (instance_index)
  • Space ID (space_id)
  • Application Version (application_version)
  • Application URIs (application_uris)
  • Labels of bound services
  • Number of instances for each bound service and associated plan information

This data is collected from the setup.py file in the sample application and the VCAP_APPLICATION and VCAP_SERVICES environment variables in IBM Bluemix and other Cloud Foundry platforms. This data is used by IBM to track metrics around deployments of sample applications to IBM Bluemix to measure the usefulness of our examples, so that we can continuously improve the content we offer to you. Only deployments of sample applications that include code to ping the Deployment Tracker service will be tracked.

Disabling Deployment Tracking

To disable tracking, simply remove cf_deployment_tracker.track() from the run.py file in the top level directory.