iachat/db/migrate
Aman Kumar 0ea616a6ea
feat: WhatsApp campaigns (#11910)
# Pull Request Template

## Description

This PR adds support for WhatsApp campaigns to Chatwoot, allowing
businesses to reach their customers through WhatsApp. The implementation
includes backend support for WhatsApp template messages, frontend UI
components, and integration with the existing campaign system.

Fixes #8465

Fixes https://linear.app/chatwoot/issue/CW-3390/whatsapp-campaigns

## Type of change

- [x] New feature (non-breaking change which adds functionality)
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] Breaking change (fix or feature that would cause existing
functionality not to work as expected)
- [ ] This change requires a documentation update

## How Has This Been Tested?

- Tested WhatsApp campaign creation UI flow
- Verified backend API endpoints for campaign creation
- Tested campaign service integration with WhatsApp templates
- Validated proper filtering of WhatsApp campaigns in the store

## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

## What we have changed:

We have added support for WhatsApp campaigns as requested in the
discussion.
Ref: https://github.com/orgs/chatwoot/discussions/8465

**Note:** This implementation doesn't exactly match the maintainer's
specification and variable support is missing. This is an initial
implementation that provides the core WhatsApp campaign functionality.

### Changes included:

**Backend:**
- Added `template_params` column to campaigns table (migration + schema)
- Created `Whatsapp::OneoffCampaignService` for WhatsApp campaign
execution
- Updated campaign model to support WhatsApp inbox types
- Added template_params support to campaign controller and API

**Frontend:**
- Added WhatsApp campaign page, dialog, and form components
- Updated campaign store to filter WhatsApp campaigns separately
- Added WhatsApp-specific routes and empty state
- Updated i18n translations for WhatsApp campaigns
- Modified sidebar to include WhatsApp campaigns navigation

This provides a foundation for WhatsApp campaigns that can be extended
with variable support and other enhancements in future iterations.

---------

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-07-16 09:04:02 +05:30
..
20230426130150_init_schema.rb chore: Squash migrations till 05/2023 (#8862) 2024-02-06 17:00:38 +04:00
20230503101201_create_sla_policies.rb feat: SLA CRUD APIs (EE) (#7027) 2023-05-11 22:42:56 +05:30
20230509101256_add_index_to_messages_created_at.rb feat(perf): add index to messages created at (#7044) 2023-05-10 11:34:49 +05:30
20230510060828_add_index_to_messages_for_reportings.rb feat: add index migration (#7050) 2023-05-10 17:55:14 +05:30
20230510113208_set_default_empty_string_for_contact_name.rb chore: Add migration to set the default empty string value for contact name (#7052) 2023-05-11 17:35:19 +05:30
20230515051424_update_article_image_keys.rb feat: add migration to fix image signed keys (#7076) 2023-05-15 15:13:26 +05:30
20230523104139_add_partial_index_for_resolved_contacts.rb feat(perf): contacts query performance (#7175) 2023-05-23 17:22:47 +05:30
20230525085402_add_custom_sender_name_toggle.rb feat: Ability to customise the email sender name [CW-1629] (#7345) 2023-07-04 20:46:01 +05:30
20230608040738_add_processed_message_content_to_messages.rb fix: Automations condition based quoted text (#7272) 2023-06-09 17:00:05 +05:30
20230612103936_add_index_to_reporting_events.rb feat: add index to reporting events [CW-1960] (#7294) 2023-06-12 18:23:42 +05:30
20230614044633_add_sender_name_to_in.rb feat: Ability to customise the email sender name [CW-1629] (#7345) 2023-07-04 20:46:01 +05:30
20230620132319_add_sla_policy_to_conversations.rb chore: Add sla policy association to conversation (#7360) 2023-06-21 14:48:50 +05:30
20230620212340_add_waiting_since_to_conversations.rb feat: Add a sort option for conversations waiting for a reply from an agent (#7364) 2023-06-21 13:20:39 -07:00
20230706090122_sentiment_column_to_messages.rb feat: Sentiment Analysis (#7475) 2023-07-12 15:03:31 +05:30
20230714054138_add_api_key_sid_to_twilio_sms.rb feat: Add support for API key authentication in Twilio (#7523) 2023-07-14 19:20:54 -07:00
20230727065605_add_partial_index_contact_account_id.rb feat(perf): contact page loading speed (#7629) 2023-07-27 13:32:22 +05:30
20230801180936_update_default_status_in_hooks.rb fix: Update the default status of the hooks to enabled (#7652) 2023-08-01 12:14:47 -07:00
20230905060223_add_regex_to_custom_attribute_definition.rb feat: Support Regex validation for custom attributes (#7856) 2024-01-23 18:01:57 +04:00
20231011041615_ensure_message_private_not_null.rb chore: Ensure null validation for private attribute in messages (#8085) 2023-10-11 13:16:59 +05:30
20231013072802_add_icon_to_categories.rb feat: Adds the ability to set an emoji for help center category (#8111) 2023-10-20 13:52:30 +05:30
20231114111614_change_feature_flags_to_bigint_in_accounts.rb feat: convert feature_flag to bigint [CW-2767] (#8350) 2023-11-17 15:50:24 -08:00
20231129091149_add_snoozed_until_to_notifications.rb feat: Snooze notification API (#8439) 2023-12-04 12:32:35 +05:30
20231201014644_remove_notifications_with_message_primary_actor.rb chore: Change primary actor to Conversation for all the notification types. (#8435) 2023-12-06 10:43:09 +05:30
20231211010807_add_cached_labels_list.rb chore(migration): Re-run database migration job for caching. (#8581) 2023-12-18 17:29:02 -08:00
20231219000743_re_run_cache_label_job.rb chore(migration): Re-run database migration job for caching. (#8581) 2023-12-18 17:29:02 -08:00
20231219073832_add_last_activity_at_to_notifications.rb feat: Add last_activity_at field to Notification model (#8585) 2023-12-20 13:02:37 +05:30
20231223033019_refactor_sla_policy_columns.rb feat: sla 1 - refactor sla_policies model and add applied_sla model (#8602) 2024-01-23 23:48:02 +05:30
20231223040257_create_applied_slas.rb feat: sla 1 - refactor sla_policies model and add applied_sla model (#8602) 2024-01-23 23:48:02 +05:30
20240124054340_add_contact_type_to_contacts.rb feat: Add contact_type attribute to contact model (#8768) 2024-01-24 12:26:47 +05:30
20240124084032_add_middle_name_and_last_name_to_contacts.rb feat: Add middle_name and last_name to contact model (#8771) 2024-01-24 16:22:04 +05:30
20240129080827_add_location_and_country_code_to_contacts.rb feat: Add attributes location and country_code to Contact model (#8803) 2024-01-29 14:10:14 +05:30
20240131040316_remove_imap_inbox_syned_at_from_channel_email.rb chore: Remove unused attribute imap_inbox_synced_at (#8822) 2024-01-31 11:48:46 +04:00
20240207103014_change_applied_sla_sla_status_to_enum.rb feat: Add sidekiq jobs to monitor applied SLAs (#8828) 2024-02-07 21:44:56 +04:00
20240213131252_add_blocked_to_contacts.rb feat: Ability to block contacts permanently (#8922) 2024-02-21 14:18:42 -08:00
20240215065844_add_meta_to_notifications.rb feat: Add meta to notification model (#8941) 2024-02-16 14:38:02 +05:30
20240216055809_add_unique_index_to_applied_slas.rb feat: sla-7 ensure applied_sla uniqueness (#8938) 2024-02-20 21:59:49 +05:30
20240306201954_change_identifier_type_in_notifications_subscriptions.rb fix: Change the column identifier from string to text to avoid overflow (#9073) 2024-03-07 11:13:01 +05:30
20240319062553_create_sla_events.rb feat: add sla events table (#9126) 2024-03-20 11:59:37 +05:30
20240322071629_convert_cached_label_list_to_text.rb fix: Convert cached_label_list to text (#9143) 2024-03-25 18:47:08 -07:00
20240415210313_add_channel_web_widget_to_portals.rb feat: Add widget to help center config (#9235) 2024-04-15 16:46:48 -07:00
20240515201632_index_improvements_conversations_contacts.rb chore: Improved indexes for Conversations & Contacts [CW-3300] (#9475) 2024-05-15 16:10:39 -07:00
20240516003531_add_index_for_message_type_account_date.rb chore: Add indexes to improve reporting performance (#9478) 2024-05-15 21:21:15 -07:00
20240726220747_add_custom_roles.rb feat: Add APIs to manage custom roles in Chatwoot (#9995) 2024-08-23 17:18:28 +05:30
20240923215335_add_locale_to_article.rb fix: Include uncategorized articles in the all article section to allow edit/delete (#10153) 2024-09-23 23:39:03 -07:00
20241217041352_fix_old_audio_alert_data.rb fix: Update old data to fix login issues (#10594) 2024-12-17 17:17:11 +05:30
20250104200055_create_captain_tables.rb feat(ee): Add Captain features (#10665) 2025-01-14 16:15:47 -08:00
20250104210328_remove_robin_tables.rb feat(ee): Add Captain features (#10665) 2025-01-14 16:15:47 -08:00
20250105001414_add_status_to_captain_documents.rb feat(ee): Add Captain features (#10665) 2025-01-14 16:15:47 -08:00
20250105005821_remove_not_null_from_captain_documents.rb feat(ee): Add Captain features (#10665) 2025-01-14 16:15:47 -08:00
20250107030743_add_config_to_captain_assistant.rb feat(ee): Add Captain features (#10665) 2025-01-14 16:15:47 -08:00
20250108031358_create_captain_inbox.rb feat(ee): Add Captain features (#10665) 2025-01-14 16:15:47 -08:00
20250108211541_remove_index_from_captain_assistants.rb feat(ee): Add Captain features (#10665) 2025-01-14 16:15:47 -08:00
20250116000103_add_status_to_captain_assistant_responses.rb feat: Add a review step for FAQs generated from conversations before using it (#10693) 2025-01-16 09:54:34 +05:30
20250116061033_convert_document_to_polymorphic_association.rb fix(ce): Check the edition before running the data migration (#10728) 2025-01-21 10:00:37 +05:30
20250207040150_add_meta_to_attachment.rb feat: Show shared contact's name in Telegram channel (#10856) 2025-02-11 19:39:54 +05:30
20250228185548_add_internal_attributes_to_accounts.rb feat: Add support for account abuse detection (#11001) 2025-02-28 15:28:19 -08:00
20250315202035_add_index_to_articles.rb chore: Limit the number of articles retrieved by widget (#11095) 2025-03-15 14:10:12 -07:00
20250326034635_add_instagram_channel.rb feat: Added Instagram channel migration (#11181) 2025-03-26 11:12:32 +05:30
20250402233933_remove_portal_members.rb chore: Clean up report & knowledge base policies (#11234) 2025-04-03 16:00:32 -07:00
20250410061725_convert_csml_bots_to_webhook_bots.rb feat: Implement UI for Agent Bots in settings and remove CSML support (#11276) 2025-04-16 18:02:49 +05:30
20250416182131_flip_chatwoot_v4_default_feature_flag_installation_config.rb chore: Enable chatwoot_v4 feature flag by default for accounts (#11321) 2025-04-17 08:53:37 +05:30
20250421082927_add_settings_column_to_account.rb feat: Add support for minutes in auto resolve feature (#11269) 2025-05-07 00:36:15 -07:00
20250421085134_update_auto_resolve_to_mminutes.rb feat: Add support for minutes in auto resolve feature (#11269) 2025-05-07 00:36:15 -07:00
20250512231036_create_copilot_threads.rb feat: Add support for persistent copilot threads and messages (#11489) 2025-05-15 17:37:04 -07:00
20250512231037_create_copilot_messages.rb feat: Add support for persistent copilot threads and messages (#11489) 2025-05-15 17:37:04 -07:00
20250514045638_add_csat_config_to_inboxes.rb feat: Improve CSAT responses (#11485) 2025-05-16 14:18:52 +05:30
20250523024825_remove_uuid_from_copilot_threads.rb feat: Add support for realtime-events in copilot-threads and copilot-messages (#11557) 2025-05-22 22:25:05 -07:00
20250523024826_remove_user_id_from_copilot_messages.rb feat: Add support for realtime-events in copilot-threads and copilot-messages (#11557) 2025-05-22 22:25:05 -07:00
20250523031839_change_message_type_to_integer_in_copilot_messages.rb feat: Add support for realtime-events in copilot-threads and copilot-messages (#11557) 2025-05-22 22:25:05 -07:00
20250620120000_create_channel_voice.rb feat: Whatsapp embedded signup (#11612) 2025-07-14 21:37:06 -07:00
20250627195529_add_index_to_messages.rb fix: disable_ddl_transaction! on add_index action (#11833) 2025-06-27 16:58:50 -07:00
20250709102213_add_template_params_to_campaigns.rb feat: WhatsApp campaigns (#11910) 2025-07-16 09:04:02 +05:30
20250710145708_create_captain_scenarios.rb feat: add Captain::Scenario Model and API [CW-4597] (#11907) 2025-07-14 16:12:38 +05:30
20250714104358_add_response_guidelines_and_guardrails_to_captain_assistants.rb feat: add response guidelines and guardrails field (#11911) 2025-07-15 08:56:03 +05:30