Working with Web Applications

More information on how to consume HTTP callbacks can now be found in the Events recipe

You may want to integrate your bot with applications such as GitHub or GitLab to trigger a handler or just send a message to Slack. Usually this is done by providing an HTTP callback to those applications so they can POST data when there is an event.

We already saw in the previous section that is is very easy to implement custom events so we will use this feature to implement HTTP integrations as well. Since this is such a dominant use-case we already provide the module to make it easy for everybody to write their own custom integrations.

package main

import (

	joehttp ""

type ExampleBot struct {

func main() {
	b := &ExampleBot{Bot: joe.New("example",


	err := b.Run()
	if err != nil {

func (b *ExampleBot) HandleHTTP(context.Context, joehttp.RequestEvent) error {
	return errors.New("TODO: Add your custom logic here")