Implements comprehensive Twilio WhatsApp content template support (Phase
1) enabling text, media, and quick reply templates with proper parameter
conversion, sync capabilities, and feature flag protection.
### Features Implemented
**Template Types Supported**
- Basic Text Templates: Simple text with variables ({{1}}, {{2}})
- Media Templates: Image/Video/Document templates with text variables
- Quick Reply Templates: Interactive button templates
- Phase 2 (Future): List Picker, Call-to-Action, Catalog, Carousel,
Authentication templates
**Template Synchronization**
- API Endpoint: POST
/api/v1/accounts/{account_id}/inboxes/{inbox_id}/sync_templates
- Background Job: Channels::Twilio::TemplatesSyncJob
- Storage: JSONB format in channel_twilio_sms.content_templates
- Auto-categorization: UTILITY, MARKETING, AUTHENTICATION categories
### Template Examples Tested
#### Text template
```
{ "name": "greet", "language": "en" }
```
#### Template with variables
```
{ "name": "order_status", "parameters": [{"type": "body", "parameters": [{"text": "John"}]}] }
```
#### Media template with image
```
{ "name": "product_showcase", "parameters": [
{"type": "header", "parameters": [{"image": {"link": "image.jpg"}}]},
{"type": "body", "parameters": [{"text": "iPhone"}, {"text": "$999"}]}
]}
```
#### Preview
<img width="1362" height="1058" alt="CleanShot 2025-08-26 at 10 01
51@2x"
src="https://github.com/user-attachments/assets/cb280cea-08c3-44ca-8025-58a96cb3a451"
/>
<img width="1308" height="1246" alt="CleanShot 2025-08-26 at 10 02
02@2x"
src="https://github.com/user-attachments/assets/9ea8537a-61e9-40f5-844f-eaad337e1ddd"
/>
#### User guide
https://www.chatwoot.com/hc/user-guide/articles/1756195741-twilio-content-templates
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com>
207 lines
5.3 KiB
YAML
207 lines
5.3 KiB
YAML
# DO NOT change the order of features EVER
|
|
############################################
|
|
# name: the name to be used internally in the code
|
|
# display_name: the name to be used in the UI
|
|
# enabled: whether the feature is enabled by default
|
|
# help_url: the url to the help center article
|
|
# chatwoot_internal: whether the feature is internal to Chatwoot and should not be shown in the UI for other self hosted installations
|
|
# deprecated: purpose of feature flag is done, no need to show it in the UI anymore
|
|
- name: inbound_emails
|
|
display_name: Inbound Emails
|
|
enabled: true
|
|
- name: channel_email
|
|
display_name: Email Channel
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/email
|
|
- name: channel_facebook
|
|
display_name: Facebook Channel
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/fb
|
|
- name: channel_twitter
|
|
display_name: Twitter Channel
|
|
enabled: true
|
|
deprecated: true
|
|
- name: ip_lookup
|
|
display_name: IP Lookup
|
|
enabled: false
|
|
- name: disable_branding
|
|
display_name: Disable Branding
|
|
enabled: false
|
|
premium: true
|
|
- name: email_continuity_on_api_channel
|
|
display_name: Email Continuity on API Channel
|
|
enabled: false
|
|
- name: help_center
|
|
display_name: Help Center
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/help-center
|
|
- name: agent_bots
|
|
display_name: Agent Bots
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/agent-bots
|
|
- name: macros
|
|
display_name: Macros
|
|
enabled: true
|
|
- name: agent_management
|
|
display_name: Agent Management
|
|
enabled: true
|
|
- name: team_management
|
|
display_name: Team Management
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/teams
|
|
- name: inbox_management
|
|
display_name: Inbox Management
|
|
enabled: true
|
|
- name: labels
|
|
display_name: Labels
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/labels
|
|
- name: custom_attributes
|
|
display_name: Custom Attributes
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/custom-attributes
|
|
- name: automations
|
|
display_name: Automations
|
|
enabled: true
|
|
- name: canned_responses
|
|
display_name: Canned Responses
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/canned
|
|
- name: integrations
|
|
display_name: Integrations
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/integrations
|
|
- name: voice_recorder
|
|
display_name: Voice Recorder
|
|
enabled: true
|
|
- name: mobile_v2
|
|
display_name: Mobile App V2
|
|
enabled: false
|
|
deprecated: true
|
|
- name: channel_website
|
|
display_name: Website Channel
|
|
enabled: true
|
|
- name: campaigns
|
|
display_name: Campaigns
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/campaigns
|
|
- name: reports
|
|
display_name: Reports
|
|
enabled: true
|
|
help_url: https://chwt.app/hc/reports
|
|
- name: crm
|
|
display_name: CRM
|
|
enabled: true
|
|
- name: auto_resolve_conversations
|
|
display_name: Auto Resolve Conversations
|
|
enabled: true
|
|
- name: custom_reply_email
|
|
display_name: Custom Reply Email
|
|
enabled: false
|
|
- name: custom_reply_domain
|
|
display_name: Custom Reply Domain
|
|
enabled: false
|
|
- name: audit_logs
|
|
display_name: Audit Logs
|
|
enabled: false
|
|
premium: true
|
|
- name: response_bot
|
|
display_name: Response Bot
|
|
enabled: false
|
|
premium: true
|
|
deprecated: true
|
|
- name: message_reply_to
|
|
display_name: Message Reply To
|
|
enabled: false
|
|
help_url: https://chwt.app/hc/reply-to
|
|
deprecated: true
|
|
- name: insert_article_in_reply
|
|
display_name: Insert Article in Reply
|
|
enabled: false
|
|
deprecated: true
|
|
- name: inbox_view
|
|
display_name: Inbox View
|
|
enabled: false
|
|
chatwoot_internal: true
|
|
- name: sla
|
|
display_name: SLA
|
|
enabled: false
|
|
premium: true
|
|
help_url: https://chwt.app/hc/sla
|
|
- name: help_center_embedding_search
|
|
display_name: Help Center Embedding Search
|
|
enabled: false
|
|
premium: true
|
|
chatwoot_internal: true
|
|
- name: linear_integration
|
|
display_name: Linear Integration
|
|
enabled: false
|
|
- name: captain_integration
|
|
display_name: Captain
|
|
enabled: false
|
|
premium: true
|
|
- name: custom_roles
|
|
display_name: Custom Roles
|
|
enabled: false
|
|
premium: true
|
|
- name: chatwoot_v4
|
|
display_name: Chatwoot V4
|
|
enabled: true
|
|
- name: report_v4
|
|
display_name: Report V4
|
|
enabled: true
|
|
deprecated: true
|
|
- name: contact_chatwoot_support_team
|
|
display_name: Contact Chatwoot Support Team
|
|
enabled: true
|
|
chatwoot_internal: true
|
|
- name: shopify_integration
|
|
display_name: Shopify Integration
|
|
enabled: false
|
|
chatwoot_internal: true
|
|
- name: search_with_gin
|
|
display_name: Search messages with GIN
|
|
enabled: false
|
|
chatwoot_internal: true
|
|
- name: channel_instagram
|
|
display_name: Instagram Channel
|
|
enabled: true
|
|
- name: crm_integration
|
|
display_name: CRM Integration
|
|
enabled: false
|
|
- name: channel_voice
|
|
display_name: Voice Channel
|
|
enabled: false
|
|
chatwoot_internal: true
|
|
- name: notion_integration
|
|
display_name: Notion Integration
|
|
enabled: false
|
|
- name: captain_integration_v2
|
|
display_name: Captain V2
|
|
enabled: false
|
|
premium: true
|
|
chatwoot_internal: true
|
|
- name: whatsapp_embedded_signup
|
|
display_name: WhatsApp Embedded Signup
|
|
enabled: false
|
|
- name: whatsapp_campaign
|
|
display_name: WhatsApp Campaign
|
|
enabled: false
|
|
- name: crm_v2
|
|
display_name: CRM V2
|
|
enabled: false
|
|
chatwoot_internal: true
|
|
- name: assignment_v2
|
|
display_name: Assignment V2
|
|
enabled: false
|
|
chatwoot_internal: true
|
|
- name: twilio_content_templates
|
|
display_name: Twilio Content Templates
|
|
enabled: false
|
|
deprecated: true
|
|
- name: advanced_search
|
|
display_name: Advanced Search
|
|
enabled: false
|
|
premium: true
|
|
chatwoot_internal: true
|