OpenDialog - open source chatbot framework

Find out how to get started

Where did OpenDialog come from?

OpenDialog started life as an internal platform to build client projects with at GreenShoot Labs. We're long time advocates of open source software and we quickly realised that other people would find it useful too.

What exactly does OpenDialog aim to do?

  • Make it easy to design and manage conversations while allowing for very flexible flows.
  • Make conversational flows and patterns shareable across different applications.
  • Make it simple for both small and large teams to collaborate.
  • Provides a robust deployment process that can support simple applications but also more complex organisational and editorial flows.
  • Be very scalable and easily used with other tools and technologies.
  • Be flexible in allowing you to choose how to interpret user utterances, with the ability to combine different tools in a single application and even throughout a single conversation (from your own NLP tooling to cloud-based services to simple regular expressions).
  • Provides a range of plugins that allow you to easily take advantage of cloud-based NLP tools (Luis.ai, Dialogflow, Amazon Comprehend, etc.) as well as other open-source tools (Rasa, spaCy, etc.).

What problems is OpenDialog trying to solve?

At its core, OpenDialog is trying to solve three challenges.

  1. How can we think about, design, implement and re-use non-trivial conversational patterns consistently and coherently?
  2. How do we connect conversation to action, integrate with other systems and have a standard way of describing and engineering the whole?
  3. How can we support large teams as they collaborate to build services with conversational interfaces and support a variety of editorial flows for conversations?

Some of the user stories we are explicitly considering are:

  1. As a conversation manager, I want to manage conversations and the content of the conversations without needing developers to change the code constantly.
  2. As a conversation designer, I want to test different conversation ideas and be able to change my mind and roll back on conversations both in a test environment and on a production environment.
  3. As a developer, I want to implement integrations into other services and build more extensive application flows that cleanly include the conversational aspect in a scalable way that separates concerns.
  4. As a developer, I want to be able to re-use solutions across different domains and identify broad execution patterns in a conversational context.
  5. As a product owner, I want to keep track of the performance of my conversational application as conversations evolve.

OpenDialog takes an agent-based view of a chatbots.

Multi-agent systems development is a subfield of AI that studies the possible architecture of individual agents as well as the architecture of systems that allow multiple agents to coordinate towards both individual and joint goals.

OpenDialog models the interaction between the user and the chatbot as that between agents in a multi-agent system. In particular, we draw from work around around electronic institutions to describe the overall context within which users and bots operate in. In addition, we looked at enhanced Dooley graphs for the added flexibility in representing the exchange of messages between participants in a conversation.

What's the tech stack?

At its core OpenDialog is built on top of the Laravel framework.

We have a conversation markup language to describe conversations in YAML and a message markup language to manage messages for different conversational interfaces.

We provide our own front-end web chat component using Vue.js

The conversation engine uses Dgraph to store and traverse conversation graphs (more about these in the next blog post), contextual information, and log conversations for subsequent analysis.

OpenDialog is licensed under the Apache 2.0 open source licence.

I want more! And code! Now!

We're preparing our first fully documented release at the moment, in the meantime: