GithubHelp home page GithubHelp logo

intuit / benten Goto Github PK

View Code? Open in Web Editor NEW
133.0 19.0 57.0 392 KB

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

License: MIT License

Java 93.70% Gherkin 6.05% JavaScript 0.21% Dockerfile 0.04%

benten's Introduction

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!

benten's People

Contributors

ashpak-shaikh avatar divakarungatla avatar itstc avatar jakeleveroni avatar jdfalko avatar rnidagal avatar roxiomontes avatar sharathshashidhar avatar strangest-quark 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  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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

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

benten's Issues

An error occured when I tried to do this operation: `Project is required.`

Hi, I've installed and configured the bot but when I'm trying to create a new issue it displays the following error.

 `Component/s is required.`

Chat log

jirabot APP [11:20 AM]
Ok! Give me the `Summary` of the story ?

António Carvalho [11:20 AM]
test

jirabot APP [11:20 AM]
Component/s ? 
1 `DevOps`   2 `Web`   3 `Example` 

António Carvalho [11:20 AM]
1

jirabot APP [11:20 AM]
Product ? 
1 `Web1`   2 `Web2`   

António Carvalho [11:20 AM]
1

jirabot APP [11:20 AM]
I am working on it

bot APP [11:20 AM]
An error occured when I tried to do this operation: 
 `Project is required.`

Application log

11:50:16.769 [ForkJoinPool.commonPool-worker-1] INFO  c.i.b.channel.slack.SlackChannel - Found a conversation catalyst command for action: action_jira_comment_issue .Entering catalyst conversation.
11:50:16.771 [ForkJoinPool.commonPool-worker-1] INFO  c.i.b.channel.slack.SlackChannel - Handling action action=action_jira_create, user=antonio.carvalho
11:50:16.949 [AsyncHttpClient-2-1] INFO  a.s.rtm.SlackRealTimeMessagingClient - Slack RTM message : {"ok":true,"reply_to":0,"ts":"1542109816.017800","text":"I am working on it \n"}
11:50:17.289 [ForkJoinPool.commonPool-worker-1] ERROR c.i.benten.jira.BentenJiraClient - com.intuit.benten.jira.exceptions.BentenJiraException: Project is required.
java.lang.RuntimeException: com.intuit.benten.jira.exceptions.BentenJiraException: Project is required.
        at com.intuit.benten.jira.http.JiraHttpClient.createIssue(JiraHttpClient.java:207)
        at com.intuit.benten.jira.BentenJiraClient.createIssue(BentenJiraClient.java:161)
        at com.intuit.benten.jira.actionhandlers.JiraCreateIssueActionHandler.handle(JiraCreateIssueActionHandler.java:61)
        at com.intuit.benten.channel.slack.SlackChannel.lambda$null$2(SlackChannel.java:246)
        at java.util.concurrent.CompletableFuture.uniAccept(CompletableFuture.java:656)
        at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:632)
        at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.intuit.benten.jira.exceptions.BentenJiraException: Project is required.
        at com.intuit.benten.jira.http.JiraHttpClient.handleJiraException(JiraHttpClient.java:227)
        at com.intuit.benten.jira.http.JiraHttpClient.createIssue(JiraHttpClient.java:200)
        ... 10 common frames omitted

Exception while trying to run the build

Caused by: org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanPropertyBindingResult: 1 errors
Field error in object 'server' on field 'environment': rejected value [local]; codes [typeMismatch.server.environment,typeMismatch.environment,typeMismatch.org.springframework.core.env.Environment,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [server.environment,environment]; arguments []; default message [environment]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.core.env.Environment' for property 'environment'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'org.springframework.core.env.Environment' for property 'environment': no matching editors or conversion strategy found]
at org.springframework.boot.bind.PropertiesConfigurationFactory.checkForBindingErrors (PropertiesConfigurationFactory.java:359)
at org.springframework.boot.bind.PropertiesConfigurationFactory.doBindPropertiesToTarget (PropertiesConfigurationFactory.java:276)
at org.springframework.boot.bind.PropertiesConfigurationFactory.bindPropertiesToTarget (PropertiesConfigurationFactory.java:240)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization (ConfigurationPropertiesBindingPostProcessor.java:330)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization (ConfigurationPropertiesBindingPostProcessor.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization (AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject (AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:202)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType (DefaultListableBeanFactory.java:519)
at org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizerBeanPostProcessor.getCustomizers (EmbeddedServletContainerCustomizerBeanPostProcessor.java:82)
at org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizerBeanPostProcessor.postProcessBeforeInitialization (EmbeddedServletContainerCustomizerBeanPostProcessor.java:72)
at org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizerBeanPostProcessor.postProcessBeforeInitialization (EmbeddedServletContainerCustomizerBeanPostProcessor.java:59)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization (AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject (AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:202)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory (EmbeddedWebApplicationContext.java:199)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer (EmbeddedWebApplicationContext.java:162)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh (EmbeddedWebApplicationContext.java:134)
at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:537)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh (EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh (SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run (SpringApplication.java:303)
at BentenStarterApplication.main (BentenStarterApplication.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:498)
at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run (AbstractRunMojo.java:527)
at java.lang.Thread.run (Thread.java:748)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.502 s
[INFO] Finished at: 2018-10-31T11:57:46+05:30
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.10.RELEASE:run (default-cli) on project benten-starter: An exception occurred while running. null: InvocationTargetException: Unable to start embedded container; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tomcatEmbeddedServletContainerFactory' defined in class path resource [org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration$EmbeddedTomcat.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverProperties': Could not bind properties to ServerProperties (prefix=server, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanPropertyBindingResult: 1 errors
[ERROR] Field error in object 'server' on field 'environment': rejected value [local]; codes [typeMismatch.server.environment,typeMismatch.environment,typeMismatch.org.springframework.core.env.Environment,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [server.environment,environment]; arguments []; default message [environment]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.core.env.Environment' for property 'environment'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'org.springframework.core.env.Environment' for property 'environment': no matching editors or conversion strategy found]

Possible Features

  • Getting alerts on stuck jobs deployment (alert me on #job_number on X time units)

  • Notify me when job is failing

  • Notification via Email

Dialogflow list parameters exception

With BenTen, Just curious if there has been any testing with Dialogflow list parameters or if this is just me that is experiencing these run-time errors (entirely possible that I'm doing something wrong with the Java code for my intent). I cannot seem to get it to successfully pass a DialogFlow parameter into BenTen through slack if the IsList checkbox is checked in dialog flow. unchecking that checkbox allows the code and the single string value to be passed and used successfully in my local testing. also, Looking at the mvn spring-boot console it seems to throw some run-time exceptions anytime Dialogflow sends a list parameter.

Link in try it out section has expired

Click on the Link given in try it out section for joining slack,
Create account page for #SLACK opens and displays below message
"This invite link is no longer active.
Please check with the person who shared it with you to see if there's a new link available."

Build a web chat interface for BenTen

Currently Slack is the only channel supported by BenTen. Create a web chat interface. So users who want to build bots using BenTen feature need not be tied to Slack. Implement a web channel implementation similar to Slack channel.

Official Benten Slack channel status ?

Hello there,

Benten purpose seems very interesting ! Just want to try it through the official benten slack channel but seems it doesn't work anymore.

Could you give us a status regarding this project ? Does the slack channel is still valid and the demo is up ?

Thanks a lot.

Create a new benten-outlook-calendar-bolt

Create a new benten-outlook-calendar-bolt that integrates with outlook calendar APIs. Expose useful methods that would provide information about schedule and free meeting rooms from slack.

Exception while trying to build a jenkins job

  • integrated my jenkins with the bot

  • when I use the key words "Search for a Jenkins Job test", it returns the correct list of jobs with the prefix that I specified - Expected

  • Now when I enter the key words "Build Jenkins Job test_mavenBuild" (build returned during earlier step), I'm getting below exception:

org.apache.http.client.HttpResponseException: No valid crumb was included in the request
at com.offbytwo.jenkins.client.validator.HttpResponseValidator.validateResponse(HttpResponseValidator.java:11)
at com.offbytwo.jenkins.client.JenkinsHttpClient.post(JenkinsHttpClient.java:239)
at com.offbytwo.jenkins.model.Job.build(Job.java:74)
at com.intuit.benten.BentenJenkinsClient.build(BentenJenkinsClient.java:98)
at com.intuit.benten.jenkins.actionhandlers.JenkinsBuildJobByJobNameActionHandler.handle(JenkinsBuildJobByJobNameActionHandler.java:26)
at com.intuit.benten.channel.slack.SlackChannel.lambda$null$2(SlackChannel.java:241)
at java.util.concurrent.CompletableFuture.uniAccept(CompletableFuture.java:656)
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:632)
at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
17:12:41.667 [ForkJoinPool.commonPool-worker-0] ERROR c.i.b.channel.slack.SlackChannel - com.intuit.benten.jenkins.exceptions.BentenJenkinsException: No val
id crumb was included in the request
java.util.concurrent.CompletionException: com.intuit.benten.jenkins.exceptions.BentenJenkinsException: No valid crumb was included in the request
at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
at java.util.concurrent.CompletableFuture.uniAccept(CompletableFuture.java:659)
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:632)
at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.intuit.benten.jenkins.exceptions.BentenJenkinsException: No valid crumb was included in the request
at com.intuit.benten.BentenJenkinsClient.build(BentenJenkinsClient.java:121)
at com.intuit.benten.jenkins.actionhandlers.JenkinsBuildJobByJobNameActionHandler.handle(JenkinsBuildJobByJobNameActionHandler.java:26)
at com.intuit.benten.channel.slack.SlackChannel.lambda$null$2(SlackChannel.java:241)
at java.util.concurrent.CompletableFuture.uniAccept(CompletableFuture.java:656)
... 6 common frames omitted
org.apache.http.client.HttpResponseException: No valid crumb was included in the request
at com.offbytwo.jenkins.client.validator.HttpResponseValidator.validateResponse(HttpResponseValidator.java:11)
at com.offbytwo.jenkins.client.JenkinsHttpClient.post(JenkinsHttpClient.java:239)
at com.offbytwo.jenkins.model.Job.build(Job.java:74)
at com.intuit.benten.BentenJenkinsClient.build(BentenJenkinsClient.java:98)
at com.intuit.benten.jenkins.actionhandlers.JenkinsBuildJobByJobNameActionHandler.handle(JenkinsBuildJobByJobNameActionHandler.java:26)
at com.intuit.benten.channel.slack.SlackChannel.lambda$null$2(SlackChannel.java:241)
at java.util.concurrent.CompletableFuture.uniAccept(CompletableFuture.java:656)
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:632)
at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
17:14:10.836 [ForkJoinPool.commonPool-worker-2] ERROR c.i.b.channel.slack.SlackChannel - com.intuit.benten.jenkins.exceptions.BentenJenkinsException: No val
id crumb was included in the request
java.util.concurrent.CompletionException: com.intuit.benten.jenkins.exceptions.BentenJenkinsException: No valid crumb was included in the request
at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
at java.util.concurrent.CompletableFuture.uniAccept(CompletableFuture.java:659)
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:632)
at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:443)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.intuit.benten.jenkins.exceptions.BentenJenkinsException: No valid crumb was included in the request
at com.intuit.benten.BentenJenkinsClient.build(BentenJenkinsClient.java:121)
at com.intuit.benten.jenkins.actionhandlers.JenkinsBuildJobByJobNameActionHandler.handle(JenkinsBuildJobByJobNameActionHandler.java:26)
at com.intuit.benten.channel.slack.SlackChannel.lambda$null$2(SlackChannel.java:241)
at java.util.concurrent.CompletableFuture.uniAccept(CompletableFuture.java:656)
... 6 common frames omitted

Create benten-twitter bolt

Create benten-twitter bolt that integrates with twitter apis and exposes useful methods like search twitter by a certain word, get latest tweets or post a tweet etc..

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.