Overview
Chatwoot’s omnichannel inbox provides a unified interface to manage customer conversations across all your communication channels. View and respond to messages from website chat, email, social media, and messaging apps - all in one place.
All channels feed into a single unified inbox, allowing agents to manage conversations seamlessly regardless of the source channel.
Supported Channels
Chatwoot supports a wide range of communication channels:
Website Web Widget for live chat on your website
Email Connect your email inboxes via IMAP/SMTP
Facebook Facebook Messenger and Instagram Direct
WhatsApp WhatsApp Business API and Twilio integration
Twitter Twitter direct messages and mentions
SMS SMS via Twilio and other providers
Telegram Telegram bot integration
TikTok TikTok business messaging
Channel Configuration
Creating an Inbox
Each channel requires an inbox configuration:
# Create an inbox with channel
inbox = account. inboxes . create! (
name: "Customer Support" ,
channel: web_widget_channel,
enable_auto_assignment: true ,
greeting_enabled: true ,
greeting_message: "Hi! How can we help you today?"
)
Inbox Settings
Automatically assign incoming conversations to available agents based on assignment rules. inbox. update! (
enable_auto_assignment: true ,
auto_assignment_config: {
max_assignment_limit: 10
}
)
Configure business hours to show out-of-office messages when agents are unavailable. inbox. update! (
working_hours_enabled: true ,
out_of_office_message: "We're currently closed. We'll respond when we're back." ,
timezone: "America/New_York"
)
Enable customer satisfaction surveys after conversation resolution. inbox. update! (
csat_survey_enabled: true
)
Collect visitor email addresses during conversations. inbox. update! (
enable_email_collect: true
)
Channel-Specific Features
Embed a chat widget on your website:
< script >
( function ( d , t ) {
var BASE_URL = "https://app.chatwoot.com" ;
var g = d . createElement ( t ), s = d . getElementsByTagName ( t )[ 0 ];
g . src = BASE_URL + "/packs/js/sdk.js" ;
g . defer = true ;
g . async = true ;
s . parentNode . insertBefore ( g , s );
g . onload = function (){
window . chatwootSDK . run ({
websiteToken: 'your_website_token' ,
baseUrl: BASE_URL
})
}
})( document , "script" );
</ script >
Email Channel
Connect email inboxes for support:
email_channel = Channel :: Email . create! (
account: account,
email: "[email protected] " ,
imap_enabled: true ,
imap_address: "imap.gmail.com" ,
imap_port: 993 ,
imap_email: "[email protected] " ,
imap_password: "app_password" ,
smtp_enabled: true ,
smtp_address: "smtp.gmail.com" ,
smtp_port: 587
)
WhatsApp
Integrate WhatsApp Business API:
whatsapp_channel = Channel :: Whatsapp . create! (
account: account,
phone_number: "+1234567890" ,
provider: "whatsapp_cloud" ,
provider_config: {
api_key: "your_api_key" ,
phone_number_id: "your_phone_number_id"
}
)
Inbox Management
Adding Team Members
Assign agents to specific inboxes:
# Add multiple members to an inbox
inbox. add_members ([agent1. id , agent2. id , agent3. id ])
# Remove members
inbox. remove_members ([agent1. id ])
# Get assignable agents
assignable_agents = inbox. assignable_agents
Channel Callbacks
Some channels require webhook URLs for callbacks:
# Get callback webhook URL for the channel
callback_url = inbox. callback_webhook_url
# => "https://app.chatwoot.com/webhooks/whatsapp/+1234567890"
Best Practices
Message Timing : Some channels have messaging window restrictions (e.g., WhatsApp allows replies within 24 hours of customer message).
Use allow_messages_after_resolved to control whether agents can send messages after a conversation is resolved.
Sender Name Configuration
Control how agent names appear in messages:
# Friendly: "John from Acme Corp"
inbox. update! ( sender_name_type: :friendly )
# Professional: "Acme Corp Support"
inbox. update! ( sender_name_type: :professional )
Lock to Single Conversation
Prevent multiple conversations from the same contact:
inbox. update! ( lock_to_single_conversation: true )
API Reference
Check Channel Type
inbox. web_widget? # => true/false
inbox. email? # => true/false
inbox. whatsapp? # => true/false
inbox. facebook? # => true/false
inbox. twitter? # => true/false
inbox. telegram? # => true/false
inbox. sms? # => true/false
Inbox Type
inbox. inbox_type # => "Website", "Email", "WhatsApp", etc.
inbox. channel_type # => "Channel::WebWidget", "Channel::Email", etc.
Conversations Learn about managing conversations
Teams Organize agents into teams
Automation Automate inbox workflows
Reports Analyze channel performance