A GraphQL API server for a chatbot system that manages conversation flows, triggers, responses, and actions.
- Node-based Conversation Flow: Create complex conversation trees with parent-child relationships
- Triggers: Define what activates specific conversation nodes (keywords, payloads, email patterns)
- Responses: Configure platform-specific responses with various message types
- Actions: Execute operations during conversations (e.g., sending emails)
- Authentication: Secure API with Bearer token authentication
- Node.js v23 (Tested version)
- npm or pnpm
-
Clone the repository:
git clone https://github.com/tauhid97k/graphql-chatbot.git cd graphql-chatbot -
Install dependencies:
npm install
-
Create a
.envfile in the root directory with the following content:PORT=4000 NODE_ENV=development -
Start the development server:
npm run dev
-
The GraphQL server will be available at: http://localhost:4000
All API requests require authentication using a Bearer token.
Authorization Header:
Authorization: Bearer graphql-chatbot-token-2025
Example using curl:
curl 'http://localhost:4000/' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer graphql-chatbot-token-2025' \
--data-raw '{"query":"query { nodes { _id name } }"}'Represents a step in the conversation flow.
type NodeObject {
_id: ID!
name: String!
description: String
parents: [NodeObject]
parentIds: [ID]
root: Boolean
trigger: Trigger
triggerId: ID
responses: [Response]
responseIds: [ID]
actions: [Action]
actionIds: [ID]
preActions: [Action]
preActionIds: [ID]
postActions: [Action]
postActionIds: [ID]
priority: Float
compositeId: ID
global: Boolean
colour: String
redirect: RedirectInfo
position: Position
saveCompositeId: Boolean
createdAt: Long!
updatedAt: Long
}Defines conditions that activate a node.
type Trigger {
_id: ID!
name: String!
description: String
functionString: String
resourceTemplateId: ID
resourceTemplate: ResourceTemplate
createdAt: Long!
updatedAt: Long
}Messages sent to users at each node.
type Response {
_id: ID!
name: String!
description: String
platforms: [ResponsePlatform]
createdAt: Long!
updatedAt: Long
}Operations performed during the conversation.
type Action {
_id: ID!
name: String!
description: String
functionString: String
resourceTemplateId: ID
resourceTemplate: ResourceTemplate
createdAt: Long!
updatedAt: Long
}query GetNode($nodeId: ID) {
node(nodeId: $nodeId) {
_id
name
description
responses {
_id
name
}
trigger {
_id
name
}
}
}Variables:
{
"nodeId": "6296be3470a0c1052f89cccb"
}query GetAllNodes {
nodes {
_id
name
description
root
global
}
}query GetAllActions {
actions {
_id
name
description
resourceTemplateId
}
}query GetAllTriggers {
triggers {
_id
name
description
resourceTemplateId
}
}query GetAllResponses {
responses {
_id
name
description
platforms {
integrationId
localeGroups {
localeGroupId
variations {
name
responses
}
}
}
}
}To explore the entire conversation flow, you can start with root nodes and traverse their children:
query GetRootNodes {
nodes {
_id
name
root
responses {
_id
name
}
trigger {
_id
name
}
}
}graphql-chatbot/
├── src/
│ ├── auth/
│ │ └── auth.ts # Authentication module
│ ├── config/
│ │ └── env.ts # Environment configuration
│ ├── datasource/
│ │ ├── action.json # Action data
│ │ ├── dataLoader.ts # Data loading utilities
│ │ ├── node.json # Node data
│ │ ├── resourceTemplate.json # Resource template data
│ │ ├── response.json # Response data
│ │ └── trigger.json # Trigger data
│ ├── index.ts # Main server entry point
│ ├── resolvers.ts # GraphQL resolvers
│ └── schema.ts # GraphQL schema
├── .env # Environment variables
├── package.json # Project dependencies
└── README.md # Project documentation
- Nodes can have parent-child relationships (creating a conversation tree)
- Nodes can be triggered by specific inputs (Triggers)
- Nodes can display responses (Responses) and perform actions (Actions)
- Actions and Triggers reference resource templates for their functionality
MIT