hpreston / myhero_spark

Simple Cisco Spark Bot for the MyHero Demo
1 stars 2 forks source link

MyHero Spark Bot

This is the a Spark Bot for a basic microservice demo application. This provides an interactive chat service for a voting system where users can vote for their favorite movie superhero.

Details on deploying the entire demo to a Mantl cluster can be found at

The application was designed to provide a simple demo for Cisco Mantl. It is written as a simple Python Flask application and deployed as a docker container.

**NOTE: To leverage the Spark Bot Service, your Mantl Cluster MUST be configured for deployed applications to be accessible from the public Internet. This is because it relies on the Spark Cloud to be able to send a WebHook to the myhero_spark application you run in Mantl***

Other services are:

The docker containers are available at

Spark Developer Account Requirement

In order to use this service, you will need a Cisco Spark Account to use for the bot. The bot is built for ease of use, meaning any message to the account used to create the Bot will be acted on and replied to. This means you'll need to create a new Spark account for the demo.

Creating an account is free and only requires a working email account (each Spark Account needs a unique email address). Visit http://www.ciscospark.com to signup for an account.

Developer access to Spark is also free and information is available at http://developer.ciscospark.com.

In order to access the APIs of Spark, this bot needs the Developer Token for your account. To find it:

Basic Application Details

Required

Environment Installation

pip install -r requirements.txt

Basic Usage

In order to run, the service needs several pieces of information to be provided:

These details can be provided in one of three ways.

A command line argument overrides an environment variable, and raw input is only used if neither of the other two options provide needed details.

Accessing

Upon startup, the service registers a webhook to send all new messages to the service address.

Interacting with the Spark Bot

The Spark Bot is a very simple interface that is designed to make it intuitive to use. Simply send any message to the Spark Bot Email Address to have the bot reply back with some instructions on how to access the features.

The bot is deisgned to look for commands to act on, and provide the basic help message for anything else. The commands are:

REST APIs

/

The main service API is at the root of the applciation and is what is used for the Spark Webhooks.

/hello/:email

There is an API call that can be leveraged to have the Spark Bot initiate a chat session with a user. This API responds to GET requests and then will send a Spark message to the email provided.

Example usage

curl http://myhero-spark.domain.local/hello/user@email.com 

/health

This is an API call that can be used to test if the Spark Bot service is functioning properly.

curl -v http://myhero-spark.domain.local/health 

*   Trying...
* Connected to myhero-spark.domain.local (x.x.x.x)
> GET /health HTTP/1.1
> Host: myhero-spark.domain.local
> User-Agent: curl/7.43.0
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Connection: close
< 
* Closing connection 0
Service up. 

Local Development with Vagrant

I've included the configuration files needed to do local development with Vagrant in the repo. Vagrant will still use Docker for local development and requires the following be installed on your laptop:

Before running vagrant up you will need to finish the Vagrant file configuration by adding the Spark Account Email and Token to the environment variables used by the container. To do this:

To start local development run:

Each of the services in the application (i.e. myhero_web, myhero_app, and myhero_data) include Vagrant support to allow working locally on all three simultaneously.