• Stars
    star
    133
  • Rank 263,106 (Top 6 %)
  • Language
    Java
  • License
    MIT License
  • Created almost 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Chatbot Development Framework (with Slack integration for Jira and Jenkins)

BenTen

CUI Chatbot framework (Has out of the box slack-bot support for Jira and Jenkins)

Build Status Support Slack License

BenTen is a CUI Chatbot framework that provides all the integrations that are necessary for building useful conversational chatbots in a few minutes. It has integrations with NLP engines like Dialogflow, Messaging platforms like Slack, project management tools like Jira and Continuous Integration Tools like Jenkins. It also has support to render messages in various formats like Slack, html (html to image conversion), csv etc...

Benten makes it easy for anybody to build their own personal assistants to take care of mundane tasks.

The framework lets you concentrate on the core functionality you want to build (for example building a conversational chatbot to monitor application health and show it in Slack on demand) rather than worry about integrations with Slack, NLP engines or applications like Jira, Jenkins and the orchestration between these systems.

Story behind the name BenTen

If you're wondering why the name BenTen, you can find an answer here Why the name Benten ?

Features

Jira Feature Command
Create new Jira Story/Bug/Sub-Task create jira story , create jira bug, create jira subtask, create jira story Experience benten jira integration project BENTEN
Show details of a JIRA issue details of issue, details of issue BENTEN-1
Assign issue assign issue BENTEN-1 to @divakarungatla
Search issues assigned to me or created by me my issues, my tickets
Comment on an issue comment on issue, comment on issue BENTEN-1 this is an example comment
Log work for an issue/story log 3h 4m against issue BENTEN-1 this is a comment for logging work
Show subtasks of a story subtasks of story AAA-1234
Transition issue move BENTEN-1 to inprogress
Cycle time for a sprint cycle time of board Benten over last 2 sprints
Velocity of a team based on a sprint velocity of board Benten over last 2 sprints

Note: BenTen uses a headless user which you are going to specify in the benten properties file in the following sections to perform the jira operations. So some features like assign move will need the headless user to be added as admin to you projects. Here is how you do it Add user as admin in Jira.

Jenkins Feature Command
Search for Jenkins job search for jenkins job, search for jenkins job with prefix Purchase
Details of Jenkins job details of jenkins job, details of jenkins job Purchase-Service-Release
Build Jenkins job build jenkins job Purchase-Service-Release
Flickr Feature Command
Search for Photos or Videos flickr 5 photos of cats, flickr videos of dogs
Search Trendy Photos flickr trendy photos, flickr popular photos
Search Camera Brands flickr canon cameras
Weather Feature Command
Weather information in current city How is the weather in San Diego ?

BenTen - Architecture

Let's set up BenTen

Now that you have experienced the bot, let us set up BenTen with your own slack bot and run against your Jira and Jenkins.

If you are behind a corporate proxy, or especially if your local Maven installation has been configured to point to a repository within your local network, the command below may not work. One workaround is to temporarily disable or rename your Maven settings.xml file, and try again.

Setting up BenTen from binaries (recommended if you want just use existing capabilities and add custom features only specific to your organization)

There is a maven archetype(benten-archetype) that I created that can be used to set up a skeleton project super quick. Run the below command in your terminal.

mvn archetype:generate -DarchetypeGroupId=com.intuit.benten -DarchetypeArtifactId=benten-archetype -DarchetypeVersion=0.1.5 -DgroupId=com.mycompany -DartifactId=benten-starter
cd benten-starter
mvn clean install -Dmaven.test.skip=true

Setting up BenTen from sources (recommended if you want to contribute/add new features or integrations to BenTen )

To set up BenTen from sources follow the below steps

git clone https://github.com/intuit/benten
mvn clean install -Dmaven.test.skip=true

To use BenTen in your existing spring project include the below dependencies in your projects pom.xml and refer to Setting up to initialize BenTen.

<dependency>
    <groupId>com.intuit.benten</groupId>
    <artifactId>benten-core</artifactId>
    <version>0.1.5</version>
</dependency>

Include Jira, Jenkins, Weather and Flickr bolts

<dependency>
    <groupId>com.intuit.benten</groupId>
    <artifactId>benten-jira-bolt</artifactId>
    <version>0.1.5</version>
</dependency>
<dependency>
    <groupId>com.intuit.benten</groupId>
    <artifactId>benten-jenkins-bolt</artifactId>
    <version>0.1.5</version>
</dependency>
<dependency>
    <groupId>com.intuit.benten</groupId>
    <artifactId>benten-flickr-bolt</artifactId>
    <version>0.1.5</version>
</dependency>
    <groupId>com.intuit.benten</groupId>  
    <artifactId>benten-weather-bolt</artifactId>
    <version>0.1.5</version>
</dependency>

Create a slack team and slackbot(You can skip this section if you already have a slack bot API token)

Follow the below steps to create a slack team and then a slack bot. You can skip this step if you already have a team and are the admin.

Creating Slack team

  1. Open https://slack.com/
  2. Provide your email ID. Select Create New workspace.
  3. Check your email and enter the code to verify your email.
  4. Provide your name and set a password
  5. Add some details to your team in the next page
  6. Provide a company name
  7. Team URL should be unique - Also remember this URL - this is what is used to login to your slack instance
  8. Agree with the terms
  9. Skip the invite step
  10. You are up and running with your own instance of Slack.

Now that team is created, let us create a slack bot

Creating Slack bot

  1. Open your {team-URL}/apps (the one you created above). Ex: https://test-visual.slack.com/apps
  2. Search for bot in the search bar and select bots
  3. In the bots landing page click on Add configuration
  4. Provide a bot name. Ex: divakar-bot and click on Add Bot integration
  5. In the Setup instruction page: Copy and store the API Token. Ex: xoxb-22672546-n1X9APk3D0tfksr81NJj6VAM
  6. Save the integration

Create your own Dialog Flow Agent

You might have noticed the conversation interface of BenTen. Benten uses Dialog Flow to build the conversations. You can read more about Dialog flow at https://dialogflow.com/docs/getting-started/basics.

Let us set up your own dialog flow agent. Download the agent zip file from here benten-agent-v2

Follow the instructions in this page Create-BenTen-Agent-in-Dialog-flow to create the agent.

Follow the instructions in this page OAuth Setup For Dialogflow Agent to setup OAuth for the agent.

At the end of it you should have your own dialogflow Project ID with OAuth setup complete.

NOTE: The dialogflow client in Benten will not work unless the OAuth setup is complete.

Now open benten.properties

cd benten-starter
vi src/main/resources/benten.properties

In line #10 change the value of benten.ai.projectId with your Project ID from above

Start BenTen

cd benten-starter
mvn clean install -Dmaven.test.skip=true
vi src/main/resources/benten.properties

In line #11 replace <slackbot token> with your bot token from bot creation step above Creating Slack bot

mvn spring-boot:run

Now if you see your bot in Slack it should be active! Type hi to see it working. Type help jira or create jira story and you can see responses.

If you want to run benten on docker then install docker on your machine.

Execute below steps in the terminal.

cd benten-starter
docker build -f Dockerfile -t benten .
docker container run -it --publish 8081:8080 benten

Point BenTen to your own Jira instance

Remember, at this point benten is still running against the karate mocks that come as part of the BenTen code/artifacts. Now let us point it to you Jira instance. Follow the below steps

cd benten-starter
vi src/main/resources/benten.properties

In line #16 change benten.jira.baseurl url to point to your own jira instance instead of the localhost. Also change benten.jira.username and benten.jira.password accordingly. BenTen uses these credentials to connect to Jira. Save the changes.

cd benten-starter
vi src/main/resources/benten.properties

Restart your application

mvn clean install -Dmaven.test.skip=true
mvn spring-boot:run

Now try the jira commands from your slack-bot and it should work against your Jira!

If you need to use a proxy when you are on a corporate network, add JVM proxy params to the run command:

mvn spring-boot:run -Dhttp.proxyHost=<proxy-host> -Dhttp.proxyPort=<proxy-port>

Point BenTen to your own Jenkins instance

Similar to Jira make changes for Jenkins as well in benten.properties.

cd benten-starter
vi src/main/resources/benten.properties

In line #18 change benten.jenkins.baseurl url to point to your own jenkins instance instead of the localhost. Also change benten.jenkins.username and benten.jenkins.password accordingly. BenTen uses these credentials to connect to Jira. Save the changes.

Restart your application

mvn clean install -Dmaven.test.skip=true
mvn spring-boot:run

Type jenkins in your bot and try any of the operations to see them work against your jenkins.

Point BenTen to your own Flickr instance

Make changes for Flickr in benten.properties.

Generate your Flickr API key and secret key

In line #25,26 change benten.flickr.apikey and benten.flickr.secret accordingly. BenTen uses these keys to connect to the Flickr API. Save the changes.

Restart your application

mvn clean install -Dmaven.test.skip=true
mvn spring-boot:run

Configure BenTen to Open Weather Map

Sign up for Open weather map api's and get an api token

cd benten-starter
vi src/main/resources/benten.properties

In Line #26, change benten.weather.token to the api token generated by open weather api.

Restart your application

mvn clean install -Dmaven.test.skip=true
mvn spring-boot:run

Let's get to Action! (Adding a new ActionHandler)

Let us build a feature in BenTen now. Each feature is called an action in BenTen. Remember! the beauty of BenTen is that you need to concentrate only on the core logic. Let us see how.

We will build an action which will ping a service for n number of times and display the results in the slack-bot after every time it pings the application.

First let us build the conversation. Open your agent that you created in this section. Follow this wiki Creating BenTen Example Conversation in Dialogflow

Create a new package com.example in benten-starter.

cd benten-starter
mkdir com/example

Download BentenExampleAction.java and copy it to the com.example package. The contents of the file are explained below!

Restart your application.

mvn clean install -Dmaven.test.skip=true
mvn spring-boot:run

Open your slack bot. Type ping benten for 5 times and you should be able to see the below output

If you reached this point it might have stuck you that what you can build using BenTen is only limited by your thoughts! Get creative!

More Repositories

1

karate

Test Automation Made Simple
Java
5,080
star
2

LocationManager

Easily get the device's current location on iOS.
Objective-C
2,560
star
3

CardParts

A reactive, card-based UI framework built on UIKit for iOS developers.
Swift
2,505
star
4

sdp

An Android lib that provides a new size unit - sdp (scalable dp). This size unit scales with the screen size.
2,213
star
5

auto

Generate releases based on semantic version labels on pull requests.
TypeScript
2,191
star
6

wasabi

Wasabi A/B Testing service is an open source project that is no longer under active development or being supported
Java
1,128
star
7

AnimationEngine

Easily build advanced custom animations on iOS.
Objective-C
1,058
star
8

ssp

Variant of sdp project based on the sp size unit.
537
star
9

design-systems-cli

A CLI toolbox for creating design systems.
TypeScript
394
star
10

QuickBooks-V3-PHP-SDK

Official PHP SDK for QuickBooks REST API v3.0: https://developer.intuit.com/
PHP
237
star
11

devtools-ds

UI components, libraries, and templates for building robust devtools experiences.
TypeScript
237
star
12

GroupedArray

An Objective-C and Swift collection for iOS and OS X that stores objects grouped into sections.
Objective-C
216
star
13

fuzzy-matcher

A Java library to determine probability of objects being similar.
Java
213
star
14

katlas

A distributed graph-based platform to automatically collect, discover, explore and relate multi-cluster Kubernetes resources and metadata.
Go
208
star
15

superglue

Superglue is a lineage-tracking tool built to help visualize the propagation of data through complex pipelines composed of tables, jobs and reports.
Scala
153
star
16

truffle-shuffle

An Android data-driven, percentage-based UI Card Gallery Library
Kotlin
147
star
17

maven-build-scanner

Know your build - so you can make it faster
Java
139
star
18

foremast

Foremast adds application resiliency to Kubernetes by leveraging machine learnt patterns of application health to keep applications healthy and stable
Java
130
star
19

oauth-jsclient

Intuit's NodeJS OAuth client provides a set of methods to make it easier to work with OAuth2.0 and Open ID
JavaScript
116
star
20

costBuddy

costBuddy will gather cost information from multiple AWS accounts and generate a nice Grafana dashboard with alerting in place.
Python
111
star
21

Ignite

Modern markdown documentation generator
JavaScript
103
star
22

QuickBooks-V3-DotNET-SDK

.Net SDK for QuickBooks REST API v3 services
C#
102
star
23

accessibility-snippets

VSCode Snippets created to help developers write accessible code.
JavaScript
99
star
24

Trapheus

This tool automates restoration of RDS database instances from snapshots into any dev, staging or production environments. It supports individual RDS Snapshot as well as cluster snapshot restore operations.
Python
97
star
25

fawkes

🚀🚀 Fetch, parse, categorize, summarize user reviews 🚀🚀
Python
91
star
26

proof

A tapable integration testing library for your Storybook stories
TypeScript
86
star
27

Tank

Tank is a downloadable application that can be used to load test websites
Java
81
star
28

aws_account_utils

Deprecated - Utility to help create and modify your AWS account
Ruby
81
star
29

automation-for-humans

Converts English statements to automation.
Python
67
star
30

graphql-filter-java

This project is developed to help developers add filtering support to their graphql-java services
Java
66
star
31

simple_deploy

Maintenance Mode - Simple Deploy is an opinionated CLI tool for managing AWS Cloud Formation Stacks.
Ruby
64
star
32

oauth-pythonclient

The Python OAuth client provides a set of methods that make it easier to work with Intuit's OAuth and OpenID implementation.
Python
63
star
33

postcss-themed

A PostCSS plugin for generating themes.
TypeScript
61
star
34

QuickBooks-V3-Java-SDK

Java SDK for QuickBooks REST API v3 services
Java
60
star
35

commently

😀💬 Easily comment and update comments on GitHub PRs
TypeScript
56
star
36

AnimatedFormFieldTableViewCell

UITextField for iOS that enables the user to see both the Input Text and the Placeholder
Swift
56
star
37

autometer

Distributed load testing made simple
Shell
55
star
38

AutoRemoveObserver

iOS Auto-removing NSNotifications
Objective-C
51
star
39

Traverser

Traverser is a Java library that helps software engineers implement advanced iteration of a data structure.
Java
49
star
40

intuit-developer-nodejs

A starting point for anyone looking to quickly jump onto the Intuit Developer Platform, Intuit-developer-nodejs ties together OAuth, OpenID, NodeJS, QuickBooks APIs and SDK.
JavaScript
46
star
41

DockDockBuild

Support for running UNIX Makefiles on a Docker container
Kotlin
45
star
42

judo

Judo is an easy-to-use Command Line Interface (CLI) Integration Testing Framework, driven from a simple yaml file that also contains assertions.
JavaScript
45
star
43

react-json-reconciler

This project leverages the react-reconciler to allow users to serialize JSX trees into JSON objects.
TypeScript
45
star
44

bias-detector

Python
42
star
45

xhr-xdr-adapter

Enables (to the extent possible) support for Cross Origin Resource Sharing (CORS) on IE versions 8 and 9
JavaScript
41
star
46

user-data-for-fraud-prevention

Simple npm package with a utility to collect data from the browser required for compliance with fraud prevention APIs.
TypeScript
39
star
47

ami-query

Provide a REST interface to your organization's AMIs
Go
38
star
48

qb-animation-library

CSS and SCSS for adding QuickBooks animation to your project.
CSS
38
star
49

hooks

Hooks is a little module for plugins, in Kotlin
Kotlin
36
star
50

cyphfell

Converts WDIO to Cypress
JavaScript
34
star
51

storybook-addon-sketch

A Storybook add-on to get the contents of the current story as a Sketch file
TypeScript
31
star
52

saloon

An E2E test seeder for enterprise web applications
JavaScript
29
star
53

sac3

Official repo for SAC3: Reliable Hallucination Detection in Black-Box Language Models via Semantic-aware Cross-check Consistency
Jupyter Notebook
29
star
54

CloudRaider

A resiliency tool that automates Failure mode effect analysis tests, simplifying complex testing with a behavior-driven development and testing approach. Provides a programmatic way to execute controlled failures in AWS and a BDD way to write test cases, allowing test plans themselves to become test cases that can be executed as is.
Java
28
star
55

oauth-rubyclient

Ruby OAuth 2.0 client for QuickBooks Online
Ruby
27
star
56

identity-authz-apl

Attribute-based access control (ABAC), also known as policy-based access control, defines an access control paradigm whereby access rights are granted to users through the use of policies which reason over data in attributes. The policies can use any type of attributes (user attributes, resource attributes, object, environment attributes etc.). Read more here - https://en.wikipedia.org/wiki/Attribute-based_access_control ABAC Policy Language is used by ABAC to author policies. A policy consists of rules, which have "when" conditions and "then" actions. Policies are executed in a bounded time, goaled to reach a decision as quickly as possible in deterministic, fast and reliable way. Further light-weight execution consumes minimal resources.
Java
27
star
57

QuickFabric

A one-stop shop for all management and monitoring of Amazon Elastic Map Reduce (EMR) clusters across different AWS accounts and purposes.
JavaScript
26
star
58

metriks

Python package of commonly used metrics for evaluating information retrieval models.
Python
25
star
59

intuit-spring-cloud-config-inspector

Inspection of Spring Cloud Config properties made easy using React
JavaScript
25
star
60

mlctl

mlctl is the control plane for MLOps. It provides a CLI and a Python SDK for supporting key operations related to MLOps, such as "model training", "model hosting" etc.
Python
25
star
61

RBHC

This project implements machine learning to accomplish recursive binary hierarchical clustering of data primarily useful for any clickstream data along with providing cluster statistics for each cluster and visualization using d3js
Python
25
star
62

eslint-plugin-no-explicit-type-exports

A plugin to guard against exporting imported types.
TypeScript
24
star
63

istanbul-cobertura-badger

Create a Code Coverage badge for Node.js Apps running node-istanbul.
JavaScript
24
star
64

LD-React-Components

Semantic component helpers to support LaunchDarkly feature flags in your React app.
JavaScript
24
star
65

ts-readme

Generate docs from typescript and put it in a README
TypeScript
22
star
66

doc-blocks

A design system for doc-blocks UI components, built on @design-systems/cli.
TypeScript
22
star
67

text-provider

A react component which provides all the string constants using provider pattern
JavaScript
22
star
68

WeakForwarder

Objective-C NSProxy class for iOS and OS X to allow for real weak delegates.
Objective-C
22
star
69

node-pom-parser

Parsing Java's pom.xml and properly returning the json object, including attributes and values.
TypeScript
22
star
70

Decision-Trees-over-FHE

Decision trees training and prediction over encrypted data using Fully Homomorphic Encryption
C++
21
star
71

PHP-Payments-SDK

QuickBooks Online Payments SDK
PHP
20
star
72

rego

A command-line batch interface to the RuleFit statistical model building program.
R
20
star
73

universal-graph-client

A Java library that provides single API and a CLI to connect to all varieties of graph databases.
Java
19
star
74

innersource-scanner

A java api and command line tool for scanning, reporting and fixing a git repository's InnerSource Readiness based on a supplied specification which defines the files and file contents necessary for a repository to be considered ready for InnerSource contribution.
Java
19
star
75

funnel

A Go library that provides unification of identical operations (e.g. API requests).
Go
18
star
76

gitdetect

A GitHub scanning tool to help you find misplaced secrets in your source code repository files
Go
17
star
77

foremast-brain

Foremast-brain is a component of Foremast project.
Jupyter Notebook
17
star
78

ReplayWeb

ReplayWeb is a collection of tools to accelerate building and maintaining functional tests for user interfaces.
JavaScript
16
star
79

intuit-spring-cloud-config-validator

Validation tools for Spring Cloud Config repos: .json, .yam|, .yml and .properties, verified through script or GitHub Pre-receive Hook!
Python
16
star
80

heirloom

Maintenance Mode - Build, deploy and manage archives and their metadata in S3 and SimpleDB.
Ruby
15
star
81

naavik

Go
15
star
82

semantic-release-slack

A plugin for semantic-release that takes a Slack web hook and posts a message when a release is successful
JavaScript
14
star
83

cfn-deploy

A useful GitHub Action to help you deploy cloudformation templates
Shell
14
star
84

dse-pronto

Pronto is an automation suite for deploying and managing DataStax Cassandra clusters in AWS.
Shell
14
star
85

go-loadgen

go-loadgen is a log infrastructure testing tool. Also suitable for load testing big data pipelines
Go
13
star
86

standardly

Standardly allows you to check for compliance against standards. Once you code your standards into a 'rules' json object, you can scan a directory on your filesystem or a GitHub repo to check for its compliance against the standard.
JavaScript
13
star
87

graphql-orchestrator-java

GraphQL Orchestrator stitches the schemas from multiple micro-services and orchestrates the graphql queries to these services accurately at runtime
Groovy
12
star
88

spring-pulsar

Spring client library for apache pulsar allows consuming applications to integrate easily with apache pulsar.
Kotlin
12
star
89

unmazedboot

🐳 Generic SpringBoot Docker files and image management 🍃
Dockerfile
12
star
90

scss-cleanup-scripts

Shell scripts for removing redundant Sass files, variables, mixins and deleting unused images
Shell
12
star
91

apollo-mock-http

An easy and maintainable way of injecting mock data into Apollo GraphQL Client for fast feature development decoupled from API/Backend.
JavaScript
11
star
92

spring-config-client-fallback

Spring Cloud Config Client with Fallback implementation for cases when the the config server is down
Java
11
star
93

Autumn

Micro-services injectable infrastructure project. Autumn enables rapid development of mico-service applications.
Java
11
star
94

sdbport

Maintenance Mode - Import / Export SimpleDB Domains.
Ruby
11
star
95

cfn-clone

CLI to clone cloud formation stacks
Go
10
star
96

lean-schema

Shrink your large GraphQL Schema to only what you need with Intuit LeanSchema!
Python
10
star
97

swift-hooks

A little module for plugins, in swift.
Swift
10
star
98

thrive

Thrive is an ETL framework that runs single-row transformations on HDFS data and makes the data available in relational databases (Hive and Vertica).
Python
10
star
99

perfsizesagemaker

perfsizesagemaker is a tool that uses automated performance testing to determine the right size of infrastructure for hosting models on AWS SageMaker.
HTML
9
star
100

datum-ipsum

Java-based library to statistically characterize and randomly generate strings.
Java
9
star