# 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>
422 lines
18 KiB
JSON
422 lines
18 KiB
JSON
{
|
||
"PROFILE_SETTINGS": {
|
||
"LINK": "Profile Settings",
|
||
"TITLE": "Profile Settings",
|
||
"BTN_TEXT": "Update Profile",
|
||
"DELETE_AVATAR": "Delete Avatar",
|
||
"AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully",
|
||
"AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again",
|
||
"UPDATE_SUCCESS": "Your profile has been updated successfully",
|
||
"PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully",
|
||
"AFTER_EMAIL_CHANGED": "Your profile has been updated successfully, please login again as your login credentials are changed",
|
||
"FORM": {
|
||
"PICTURE": "Profile Picture",
|
||
"AVATAR": "Profile Image",
|
||
"ERROR": "Please fix form errors",
|
||
"REMOVE_IMAGE": "Remove",
|
||
"UPLOAD_IMAGE": "Upload image",
|
||
"UPDATE_IMAGE": "Update image",
|
||
"PROFILE_SECTION": {
|
||
"TITLE": "Profile",
|
||
"NOTE": "Your email address is your identity and is used to log in."
|
||
},
|
||
"SEND_MESSAGE": {
|
||
"TITLE": "Hotkey to send messages",
|
||
"NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.",
|
||
"UPDATE_SUCCESS": "Your settings have been updated successfully",
|
||
"CARD": {
|
||
"ENTER_KEY": {
|
||
"HEADING": "Enter (↵)",
|
||
"CONTENT": "Send messages by pressing Enter key instead of clicking the send button."
|
||
},
|
||
"CMD_ENTER_KEY": {
|
||
"HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)",
|
||
"CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button."
|
||
}
|
||
}
|
||
},
|
||
"INTERFACE_SECTION": {
|
||
"TITLE": "Interface",
|
||
"NOTE": "Customize the look and feel of your Chatwoot dashboard.",
|
||
"FONT_SIZE": {
|
||
"TITLE": "Font size",
|
||
"NOTE": "Adjust the text size across the dashboard based on your preference.",
|
||
"UPDATE_SUCCESS": "Your font settings have been updated successfully",
|
||
"UPDATE_ERROR": "There is an error while updating the font settings, please try again",
|
||
"OPTIONS": {
|
||
"SMALLER": "Smaller",
|
||
"SMALL": "Small",
|
||
"DEFAULT": "Default",
|
||
"LARGE": "Large",
|
||
"LARGER": "Larger",
|
||
"EXTRA_LARGE": "Extra Large"
|
||
}
|
||
}
|
||
},
|
||
"MESSAGE_SIGNATURE_SECTION": {
|
||
"TITLE": "Personal message signature",
|
||
"NOTE": "Create a unique message signature to appear at the end of every message you send from any inbox. You can also include an inline image, which is supported in live-chat, email, and API inboxes.",
|
||
"BTN_TEXT": "Save message signature",
|
||
"API_ERROR": "Couldn't save signature! Try again",
|
||
"API_SUCCESS": "Signature saved successfully",
|
||
"IMAGE_UPLOAD_ERROR": "Couldn't upload image! Try again",
|
||
"IMAGE_UPLOAD_SUCCESS": "Image added successfully. Please click on save to save the signature",
|
||
"IMAGE_UPLOAD_SIZE_ERROR": "Image size should be less than {size}MB"
|
||
},
|
||
"MESSAGE_SIGNATURE": {
|
||
"LABEL": "Message Signature",
|
||
"ERROR": "Message Signature cannot be empty",
|
||
"PLACEHOLDER": "Insert your personal message signature here."
|
||
},
|
||
"PASSWORD_SECTION": {
|
||
"TITLE": "Password",
|
||
"NOTE": "Updating your password would reset your logins in multiple devices.",
|
||
"BTN_TEXT": "Change password"
|
||
},
|
||
"ACCESS_TOKEN": {
|
||
"TITLE": "Access Token",
|
||
"NOTE": "This token can be used if you are building an API based integration",
|
||
"COPY": "Copy",
|
||
"RESET": "Reset",
|
||
"CONFIRM_RESET": "Are you sure?",
|
||
"CONFIRM_HINT": "Click again to confirm",
|
||
"RESET_SUCCESS": "Access token regenerated successfully",
|
||
"RESET_ERROR": "Unable to regenerate access token. Please try again"
|
||
},
|
||
"AUDIO_NOTIFICATIONS_SECTION": {
|
||
"TITLE": "Audio Alerts",
|
||
"NOTE": "Enable audio alerts in dashboard for new messages and conversations.",
|
||
"PLAY": "Play sound",
|
||
"ALERT_TYPES": {
|
||
"NONE": "None",
|
||
"MINE": "Assigned",
|
||
"ALL": "All",
|
||
"ASSIGNED": "My assigned conversations",
|
||
"UNASSIGNED": "Unassigned conversations",
|
||
"NOTME": "Open conversations assigned to others"
|
||
},
|
||
"ALERT_COMBINATIONS": {
|
||
"NONE": "You haven't selected any options, you won't receive any audio alerts.",
|
||
"ASSIGNED": "You'll receive alerts for conversations assigned to you.",
|
||
"UNASSIGNED": "You'll receive alerts for any unassigned conversations.",
|
||
"NOTME": "You'll receive alerts for conversations assigned to others.",
|
||
"ASSIGNED+UNASSIGNED": "You'll receive alerts for your assigned conversations and any unattended ones.",
|
||
"ASSIGNED+NOTME": "You'll receive alerts for conversations assigned to you and to others, but not for unassigned ones.",
|
||
"NOTME+UNASSIGNED": "You'll receive alerts for unattended conversations and those assigned to others.",
|
||
"ASSIGNED+NOTME+UNASSIGNED": "You'll receive alerts for all conversations."
|
||
},
|
||
"ALERT_TYPE": {
|
||
"TITLE": "Alert events for conversations",
|
||
"NONE": "None",
|
||
"ASSIGNED": "Assigned Conversations",
|
||
"ALL_CONVERSATIONS": "All Conversations"
|
||
},
|
||
"DEFAULT_TONE": {
|
||
"TITLE": "Alert tone:"
|
||
},
|
||
"CONDITIONS": {
|
||
"TITLE": "Alert conditions:",
|
||
"CONDITION_ONE": "Send audio alerts only if the browser window is not active",
|
||
"CONDITION_TWO": "Send alerts every 30s until all the assigned conversations are read"
|
||
},
|
||
"SOUND_PERMISSION_ERROR": "Autoplay is disabled in your browser. To hear alerts automatically, enable sound permission in your browser settings or interact with the page.",
|
||
"READ_MORE": "Read more"
|
||
},
|
||
"EMAIL_NOTIFICATIONS_SECTION": {
|
||
"TITLE": "Email Notifications",
|
||
"NOTE": "Update your email notification preferences here",
|
||
"CONVERSATION_ASSIGNMENT": "Send email notifications when a conversation is assigned to me",
|
||
"CONVERSATION_CREATION": "Send email notifications when a new conversation is created",
|
||
"CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation",
|
||
"ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation",
|
||
"PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in a participating conversation",
|
||
"SLA_MISSED_FIRST_RESPONSE": "Send email notifications when a conversation misses first response SLA",
|
||
"SLA_MISSED_NEXT_RESPONSE": "Send email notifications when a conversation misses next response SLA",
|
||
"SLA_MISSED_RESOLUTION": "Send email notifications when a conversation misses resolution SLA"
|
||
},
|
||
"NOTIFICATIONS": {
|
||
"TITLE": "Notification preferences",
|
||
"TYPE_TITLE": "Notification type",
|
||
"EMAIL": "Email",
|
||
"PUSH": "Push notification",
|
||
"TYPES": {
|
||
"CONVERSATION_CREATED": "A new conversation is created",
|
||
"CONVERSATION_ASSIGNED": "A conversation is assigned to you",
|
||
"CONVERSATION_MENTION": "You are mentioned in a conversation",
|
||
"ASSIGNED_CONVERSATION_NEW_MESSAGE": "A new message is created in an assigned conversation",
|
||
"PARTICIPATING_CONVERSATION_NEW_MESSAGE": "A new message is created in a participating conversation",
|
||
"SLA_MISSED_FIRST_RESPONSE": "A conversation misses first response SLA",
|
||
"SLA_MISSED_NEXT_RESPONSE": "A conversation misses next response SLA",
|
||
"SLA_MISSED_RESOLUTION": "A conversation misses resolution SLA"
|
||
},
|
||
"BROWSER_PERMISSION": "Enable push notifications for your browser so you’re able to receive them"
|
||
},
|
||
"API": {
|
||
"UPDATE_SUCCESS": "Your notification preferences are updated successfully",
|
||
"UPDATE_ERROR": "There is an error while updating the preferences, please try again"
|
||
},
|
||
"PUSH_NOTIFICATIONS_SECTION": {
|
||
"TITLE": "Push Notifications",
|
||
"NOTE": "Update your push notification preferences here",
|
||
"CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me",
|
||
"CONVERSATION_CREATION": "Send push notifications when a new conversation is created",
|
||
"CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation",
|
||
"ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation",
|
||
"PARTICIPATING_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in a participating conversation",
|
||
"HAS_ENABLED_PUSH": "You have enabled push for this browser.",
|
||
"REQUEST_PUSH": "Enable push notifications",
|
||
"SLA_MISSED_FIRST_RESPONSE": "Send push notifications when a conversation misses first response SLA",
|
||
"SLA_MISSED_NEXT_RESPONSE": "Send push notifications when a conversation misses next response SLA",
|
||
"SLA_MISSED_RESOLUTION": "Send push notifications when a conversation misses resolution SLA"
|
||
},
|
||
"PROFILE_IMAGE": {
|
||
"LABEL": "Profile Image"
|
||
},
|
||
"NAME": {
|
||
"LABEL": "Your full name",
|
||
"ERROR": "Please enter a valid full name",
|
||
"PLACEHOLDER": "Please enter your full name"
|
||
},
|
||
"DISPLAY_NAME": {
|
||
"LABEL": "Display name",
|
||
"ERROR": "Please enter a valid display name",
|
||
"PLACEHOLDER": "Please enter a display name, this would be displayed in conversations"
|
||
},
|
||
"AVAILABILITY": {
|
||
"LABEL": "Availability",
|
||
"STATUS": {
|
||
"ONLINE": "Online",
|
||
"BUSY": "Busy",
|
||
"OFFLINE": "Offline"
|
||
},
|
||
"SET_AVAILABILITY_SUCCESS": "Availability has been set successfully",
|
||
"SET_AVAILABILITY_ERROR": "Couldn't set availability, please try again",
|
||
"IMPERSONATING_ERROR": "Cannot change availability while impersonating a user"
|
||
},
|
||
"EMAIL": {
|
||
"LABEL": "Your email address",
|
||
"ERROR": "Please enter a valid email address",
|
||
"PLACEHOLDER": "Please enter your email address, this would be displayed in conversations"
|
||
},
|
||
"CURRENT_PASSWORD": {
|
||
"LABEL": "Current password",
|
||
"ERROR": "Please enter the current password",
|
||
"PLACEHOLDER": "Please enter the current password"
|
||
},
|
||
"PASSWORD": {
|
||
"LABEL": "New password",
|
||
"ERROR": "Please enter a password of length 6 or more",
|
||
"PLACEHOLDER": "Please enter a new password"
|
||
},
|
||
"PASSWORD_CONFIRMATION": {
|
||
"LABEL": "Confirm new password",
|
||
"ERROR": "Confirm password should match the password",
|
||
"PLACEHOLDER": "Please re-enter your new password"
|
||
}
|
||
}
|
||
},
|
||
"SIDEBAR_ITEMS": {
|
||
"CHANGE_AVAILABILITY_STATUS": "Change",
|
||
"CHANGE_ACCOUNTS": "Switch account",
|
||
"SWITCH_ACCOUNT": "Switch account",
|
||
"CONTACT_SUPPORT": "Contact support",
|
||
"SELECTOR_SUBTITLE": "Select an account from the following list",
|
||
"PROFILE_SETTINGS": "Profile settings",
|
||
"KEYBOARD_SHORTCUTS": "Keyboard shortcuts",
|
||
"APPEARANCE": "Change appearance",
|
||
"SUPER_ADMIN_CONSOLE": "SuperAdmin console",
|
||
"DOCS": "Read documentation",
|
||
"LOGOUT": "Log out"
|
||
},
|
||
"APP_GLOBAL": {
|
||
"TRIAL_MESSAGE": "days trial remaining.",
|
||
"TRAIL_BUTTON": "Buy Now",
|
||
"DELETED_USER": "Deleted User",
|
||
"EMAIL_VERIFICATION_PENDING": "It seems that you haven't verified your email address yet. Please check your inbox for the verification email.",
|
||
"RESEND_VERIFICATION_MAIL": "Resend verification email",
|
||
"EMAIL_VERIFICATION_SENT": "Verification email has been sent. Please check your inbox.",
|
||
"ACCOUNT_SUSPENDED": {
|
||
"TITLE": "Account Suspended",
|
||
"MESSAGE": "Your account is suspended. Please reach out to the support team for more information."
|
||
}
|
||
},
|
||
"COMPONENTS": {
|
||
"CODE": {
|
||
"BUTTON_TEXT": "Copy",
|
||
"CODEPEN": "Open in CodePen",
|
||
"COPY_SUCCESSFUL": "Copied to clipboard"
|
||
},
|
||
"SHOW_MORE_BLOCK": {
|
||
"SHOW_MORE": "Show More",
|
||
"SHOW_LESS": "Show Less"
|
||
},
|
||
"FILE_BUBBLE": {
|
||
"DOWNLOAD": "Download",
|
||
"UPLOADING": "Uploading...",
|
||
"INSTAGRAM_STORY_UNAVAILABLE": "This story is no longer available."
|
||
},
|
||
"LOCATION_BUBBLE": {
|
||
"SEE_ON_MAP": "See on map"
|
||
},
|
||
"FORM_BUBBLE": {
|
||
"SUBMIT": "Submit"
|
||
},
|
||
"MEDIA": {
|
||
"IMAGE_UNAVAILABLE": "This image is no longer available.",
|
||
"LOADING_FAILED": "Loading failed"
|
||
}
|
||
},
|
||
"CONFIRM_EMAIL": "Verifying...",
|
||
"SETTINGS": {
|
||
"INBOXES": {
|
||
"NEW_INBOX": "Add Inbox"
|
||
}
|
||
},
|
||
"SIDEBAR": {
|
||
"NO_ITEMS": "No items",
|
||
"CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:",
|
||
"SWITCH": "Switch",
|
||
"INBOX_VIEW": "Inbox View",
|
||
"CONVERSATIONS": "Conversations",
|
||
"INBOX": "My Inbox",
|
||
"ALL_CONVERSATIONS": "All Conversations",
|
||
"MENTIONED_CONVERSATIONS": "Mentions",
|
||
"PARTICIPATING_CONVERSATIONS": "Participating",
|
||
"UNATTENDED_CONVERSATIONS": "Unattended",
|
||
"REPORTS": "Reports",
|
||
"SETTINGS": "Settings",
|
||
"CONTACTS": "Contacts",
|
||
"ACTIVE": "Active",
|
||
"CAPTAIN": "Captain",
|
||
"CAPTAIN_ASSISTANTS": "Assistants",
|
||
"CAPTAIN_DOCUMENTS": "Documents",
|
||
"CAPTAIN_RESPONSES": "FAQs",
|
||
"HOME": "Home",
|
||
"AGENTS": "Agents",
|
||
"AGENT_BOTS": "Bots",
|
||
"AUDIT_LOGS": "Audit Logs",
|
||
"INBOXES": "Inboxes",
|
||
"NOTIFICATIONS": "Notifications",
|
||
"CANNED_RESPONSES": "Canned Responses",
|
||
"INTEGRATIONS": "Integrations",
|
||
"PROFILE_SETTINGS": "Profile Settings",
|
||
"ACCOUNT_SETTINGS": "Account Settings",
|
||
"APPLICATIONS": "Applications",
|
||
"LABELS": "Labels",
|
||
"CUSTOM_ATTRIBUTES": "Custom Attributes",
|
||
"AUTOMATION": "Automation",
|
||
"MACROS": "Macros",
|
||
"TEAMS": "Teams",
|
||
"BILLING": "Billing",
|
||
"CUSTOM_VIEWS_FOLDER": "Folders",
|
||
"CUSTOM_VIEWS_SEGMENTS": "Segments",
|
||
"ALL_CONTACTS": "All Contacts",
|
||
"TAGGED_WITH": "Tagged with",
|
||
"NEW_LABEL": "New label",
|
||
"NEW_TEAM": "New team",
|
||
"NEW_INBOX": "New inbox",
|
||
"REPORTS_CONVERSATION": "Conversations",
|
||
"CSAT": "CSAT",
|
||
"LIVE_CHAT": "Live Chat",
|
||
"SMS": "SMS",
|
||
"WHATSAPP": "WhatsApp",
|
||
"CAMPAIGNS": "Campaigns",
|
||
"ONGOING": "Ongoing",
|
||
"ONE_OFF": "One off",
|
||
"REPORTS_SLA": "SLA",
|
||
"REPORTS_BOT": "Bot",
|
||
"REPORTS_AGENT": "Agents",
|
||
"REPORTS_LABEL": "Labels",
|
||
"REPORTS_INBOX": "Inbox",
|
||
"REPORTS_TEAM": "Team",
|
||
"SET_AVAILABILITY_TITLE": "Set yourself as",
|
||
"SET_YOUR_AVAILABILITY": "Set your availability",
|
||
"SLA": "SLA",
|
||
"CUSTOM_ROLES": "Custom Roles",
|
||
"BETA": "Beta",
|
||
"REPORTS_OVERVIEW": "Overview",
|
||
"REAUTHORIZE": "Your inbox connection has expired, please reconnect\n to continue receiving and sending messages",
|
||
"HELP_CENTER": {
|
||
"TITLE": "Help Center",
|
||
"ARTICLES": "Articles",
|
||
"CATEGORIES": "Categories",
|
||
"LOCALES": "Locales",
|
||
"SETTINGS": "Settings"
|
||
},
|
||
"CHANNELS": "Channels",
|
||
"SET_AUTO_OFFLINE": {
|
||
"TEXT": "Mark offline automatically",
|
||
"INFO_TEXT": "Let the system automatically mark you offline when you aren't using the app or dashboard.",
|
||
"INFO_SHORT": "Automatically mark offline when you aren't using the app."
|
||
},
|
||
"DOCS": "Read docs"
|
||
},
|
||
"BILLING_SETTINGS": {
|
||
"TITLE": "Billing",
|
||
"DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.",
|
||
"CURRENT_PLAN": {
|
||
"TITLE": "Current Plan",
|
||
"PLAN_NOTE": "You are currently subscribed to the **{plan}** plan with **{quantity}** licenses",
|
||
"SEAT_COUNT": "Number of seats",
|
||
"RENEWS_ON": "Renews on"
|
||
},
|
||
"VIEW_PRICING": "View Pricing",
|
||
"MANAGE_SUBSCRIPTION": {
|
||
"TITLE": "Manage your subscription",
|
||
"DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.",
|
||
"BUTTON_TXT": "Go to the billing portal"
|
||
},
|
||
"CAPTAIN": {
|
||
"TITLE": "Captain",
|
||
"DESCRIPTION": "Manage usage and credits for Captain AI.",
|
||
"BUTTON_TXT": "Buy more credits",
|
||
"DOCUMENTS": "Documents",
|
||
"RESPONSES": "Responses",
|
||
"UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more."
|
||
},
|
||
"CHAT_WITH_US": {
|
||
"TITLE": "Need help?",
|
||
"DESCRIPTION": "Do you face any issues in billing? We are here to help.",
|
||
"BUTTON_TXT": "Chat with us"
|
||
},
|
||
"NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again."
|
||
},
|
||
"CREATE_ACCOUNT": {
|
||
"NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.",
|
||
"NEW_ACCOUNT": "New Account",
|
||
"SELECTOR_SUBTITLE": "Create a new account",
|
||
"API": {
|
||
"SUCCESS_MESSAGE": "Account created successfully",
|
||
"EXIST_MESSAGE": "Account already exists",
|
||
"ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later"
|
||
},
|
||
"FORM": {
|
||
"NAME": {
|
||
"LABEL": "Company Name",
|
||
"PLACEHOLDER": "Wayne Enterprises"
|
||
},
|
||
"SUBMIT": "Submit",
|
||
"CANCEL": "Cancel"
|
||
}
|
||
},
|
||
"KEYBOARD_SHORTCUTS": {
|
||
"TOGGLE_MODAL": "View all shortcuts",
|
||
"TITLE": {
|
||
"OPEN_CONVERSATION": "Open conversation",
|
||
"RESOLVE_AND_NEXT": "Resolve and move to next",
|
||
"NAVIGATE_DROPDOWN": "Navigate dropdown items",
|
||
"RESOLVE_CONVERSATION": "Resolve Conversation",
|
||
"GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard",
|
||
"ADD_ATTACHMENT": "Add Attachment",
|
||
"GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard",
|
||
"TOGGLE_SIDEBAR": "Toggle Sidebar",
|
||
"GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar",
|
||
"MOVE_TO_NEXT_TAB": "Move to next tab in conversation list",
|
||
"GO_TO_SETTINGS": "Go to Settings",
|
||
"SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note",
|
||
"SWITCH_TO_REPLY": "Switch to Reply",
|
||
"TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown"
|
||
}
|
||
}
|
||
}
|