Giter Site home page Giter Site logo

ibm-cloud / slack-chatbot-database-watson Goto Github PK

View Code? Open in Web Editor NEW
29.0 4.0 50.0 472 KB

Code for the solution tutorial "Build a database-driven Slackbot" (chatbot) with a custom extension in IBM Watson Assistant

Home Page: https://cloud.ibm.com/docs/solution-tutorials?topic=solution-tutorials-slack-chatbot-database-watson

License: Apache License 2.0

Dockerfile 12.87% Python 86.66% Procfile 0.47%
ibm-cloud ibm-cloud-functions watson-conversation db2 slack nodejs postgresql ibm-clo openwhisk ibm-cloud-solutions

slack-chatbot-database-watson's Introduction

Note:
Code and instructions relating to the previous version of the tutorial Build a database-driven Slackbot are located in the branch cloud-functions.

Build a database-driven Slackbot with IBM Watson Assistant

This repository contains the code for IBM Cloud solution tutorial Build a database-driven Slackbot. It uses IBM Watson Assistant to create a chatbot and link it to Slack for a "Slackbot". By integrating a custom extension into the assistant, the chatbot can reach out to a Db2 on Cloud database. The custom extension is a Python app which provides a REST API for database objects. The chatbot can retrieve and insert data by calling these API functions. The Python app is deployed to IBM Code Engine.

Architecture

Run and test locally

The app was tested with Python 3.10. You can either run the app directly or first build, then run it as container. Direct:

  1. Install the required modules as specified in requirements.txt.
  2. Edit .env to configure the database connection and a secret token / API key.
  3. Run python3 app.py

Use the podman or docker tool to build and run the container.

  1. docker build -t slackbot:2 .
  2. Edit .env to configure the database connection and a secret token / API key.
  3. docker run -p 8080:8080 --env-file .env slackbot:2

The file .env.sample shows a sample configuration:

  • DB2_URI: Has the SQLAlchemy URL to the Db2 database
  • API_TOKEN: Is the secret for the API key authentication.
  • TABLE_ARGS: Is an optional setting to specify a different table schema. The EVENTS table is created in the default schema for the connection. This can be overwritten.

If you stored the Db2 credentials in a file slackbotkey.json, then use jq to create the URL using this command:

cat slackbotkey.json | jq '.[].credentials.connection.db2 | (.authentication.username + ":" + .authentication.password + "@" + .hosts[0].hostname + ":" + (.hosts[0].port | tostring) + "/" + .database + "?Security=SSL")'

The output follows this schema db2+ibm_db://user:[email protected]:port/bludb?Security=SSL;.

Create or recreate the database objects by calling the following API. Adapt the host, port, and API key as necessary.

curl -X 'POST'  'http://127.0.0.1:5000/database/recreate?confirmation=True' -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'

OpenAPI Specification

The Python app is based on the APIFlask API framework which itself is based on Flask. The OpenAPI specification for the application can be (re-)generated using:

flask spec --output slackbot-openapi-spec.json

You can also access the running app at the /docs (Swagger UI) and /redoc (Redoc) endpoints for interactive API documentation. See the APIFlask documentation on Swagger UI and Redoc for details.

Swagger UI

License

See License.txt for license information.

slack-chatbot-database-watson's People

Contributors

data-henrik avatar l2fprod avatar lee-zhg avatar mhaderibm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

slack-chatbot-database-watson's Issues

Issue with setup.sh script

When running ./setup.sh YOURSECRET "dashdb-for-transactions" the following error is produced.

FAILED
'fn' is not a registered command. See 'ibmcloud help'.
...
  • The script has correct permissions to execute the commands within
  • Using ibm cloud cli version: ibmcloud version 2.0.0+5a84b9b-2021-06-23T20:06:11+00:00

Command './setup.sh YOURSECRET "dashdb-for-transactions"' partially fails

When running command
./setup.sh YOURSECRET "dashdb-for-transactions"

It partially fails. It fails to create table and add sample data. It returns

ok: created namespace slackbot
If you are using any deprecated action runtimes, update them to continue receiving updates and support. Deprecated runtimes might be disabled in future.
For more information see https://ibm.biz/Functions-Runtimes
ok: whisk namespace set to slackbot
ok: created package slackdemo
ok: created action slackdemo/db2Setup
Credentials 'slackbotkey' from 'dashdb-for-transactions' service instance 'eventDB' bound to 'slackdemo/db2Setup'.
{
"dberror": {}
}
{
"dberror": {}
}
ok: created action slackdemo/dispatch
Credentials 'slackbotkey' from 'dashdb-for-transactions' service instance 'eventDB' bound to 'slackdemo/dispatch'.

Can't get step 4 to work

Hi, I can get everything 'working fine' as advised, including Slack - Watson Assistant integration. But I can't get 'step 4' to work. Basically, when I type 'help' in slack, just nothing happens. I can't even access any logging/monitoring information to see if my watson assistant is being reached.... Please advise. thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.