back to manuals

Terraform Provider

Comprehensive guide to the ChatBotKit Terraform Provider for managing AI chatbot infrastructure as code with full resource support and automated deployments.

The ChatBotKit Terraform Provider enables you to manage your AI chatbot infrastructure using Terraform. Define bots, datasets, skillsets, integrations, and more through declarative configuration files, enabling version control, automated deployments, and infrastructure consistency across environments.

Key Features

  • Infrastructure as Code: Manage ChatBotKit resources declaratively
  • Full Resource Coverage: Support for bots, datasets, skillsets, integrations, and more
  • Data Sources: Read existing resources for reference in configurations
  • Import Support: Bring existing resources under Terraform management
  • State Management: Track resource changes and drift detection
  • CI/CD Integration: Automate deployments through pipelines

Installation

From Terraform Registry

Add the provider to your Terraform configuration:

Then initialize Terraform:

Requirements

  • Terraform 1.0 or higher
  • A ChatBotKit API key from the Dashboard

Authentication

Configure authentication using either method:

Environment Variable (Recommended for CI/CD):

Provider Configuration:

Quick Start

Here's a complete example that creates a knowledge-based support bot:

Deploy with:

Resources

The provider supports the following resources for creating and managing ChatBotKit entities:

Core Resources

ResourceDescription
chatbotkit_botAI chatbot agents with configurable models and behaviors
chatbotkit_datasetKnowledge bases for retrieval-augmented generation
chatbotkit_skillsetCollections of abilities (tools) for bots
chatbotkit_skillset_abilityIndividual abilities within a skillset
chatbotkit_blueprintReusable templates for bot configurations
chatbotkit_secretSecure credential storage
chatbotkit_fileFile uploads for datasets and other uses
chatbotkit_portalCustomer-facing portal configurations

Integration Resources

ResourceDescription
chatbotkit_discord_integrationDiscord bot deployment
chatbotkit_slack_integrationSlack workspace integration
chatbotkit_telegram_integrationTelegram bot deployment
chatbotkit_whatsapp_integrationWhatsApp Business integration
chatbotkit_messenger_integrationFacebook Messenger integration
chatbotkit_email_integrationEmail-based interactions
chatbotkit_twilio_integrationTwilio SMS/voice integration
chatbotkit_widget_integrationEmbeddable chat widget
chatbotkit_notion_integrationNotion workspace sync
chatbotkit_sitemap_integrationWebsite content ingestion
chatbotkit_trigger_integrationEvent-based triggers
chatbotkit_extract_integrationData extraction pipelines
chatbotkit_mcpserver_integrationMCP server connections

Data Sources

Read existing resources without managing them:

Available data sources:

  • chatbotkit_bot
  • chatbotkit_dataset
  • chatbotkit_blueprint
  • chatbotkit_skillset

Resource Examples

Bot with Full Configuration

Dataset with Records

Skillset with Multiple Abilities

Multi-Channel Deployment

Importing Existing Resources

Bring existing resources under Terraform management:

After importing, add the resource to your configuration to prevent Terraform from trying to delete it.

State Management

Remote State

For team collaboration, use remote state backends:

Workspaces

Manage multiple environments with workspaces:

CI/CD Integration

GitHub Actions Example

Best Practices

Use Variables for Reusability

Organize with Modules

terraform/ ├── main.tf ├── variables.tf ├── outputs.tf └── modules/ ├── support-bot/ │ ├── main.tf │ ├── variables.tf │ └── outputs.tf └── sales-bot/ └── ...

Use Lifecycle Rules

Tag Resources with Metadata

Troubleshooting

Common Issues

Authentication Errors:

Error: 401 Unauthorized

Verify your API key is set correctly via environment variable or provider configuration.

Resource Not Found:

Error: Resource not found

The resource may have been deleted outside of Terraform. Remove it from state with:

State Drift:

~ resource "chatbotkit_bot" "support" { ~ name = "Old Name" -> "New Name" }

Someone modified the resource outside Terraform. Run terraform apply to reconcile or update your configuration to match.

Debug Logging

Enable detailed logging:

Additional Resources