iachat/app/javascript/dashboard/i18n/locale/en/captain.json
Rodribm10 cfffea9c16 feat(captain): semantic memory fixes + roleta + reclamações + analytics
Consolida o trabalho desta branch de abril/2026 em um bloco pronto pra
testar em staging antes do merge pra main.

## Correções de memória semântica
- ExtractionService: Princípio Zero + Regra de Ouro (ação consumada vs intenção).
- Cenário Daniela_Reservas: Passo 0 de classificação (consulta/intenção/fora).

## Roleta da Sorte (end-to-end)
- Schema Supabase + 7 RPCs atômicas (server-side, idempotentes).
- Services: Offer, Redeem, WeeklyReport.
- Jobs: OfferRouletteJob (hook em ConfirmationService após Pix pago),
  NotifyRevealed + Scheduler de fallback.
- Tool manual GenerateRoletaLinkTool + endpoint público /roleta/notify.
- Dashboard /captain/roleta com Resgate + Relatório + anomaly detection.

## Cenário Reclamacoes_Ouvidoria
- Triagem P1-P4, framework LAST, Three-level listening, Self-check.
- Sem compensação material, detecção de cliente frustrado eleva prioridade.

## Analytics
- Funil de conversão /captain/funnel: 5 etapas via regex, zero LLM.
- Detector de churn via ChurnOutreach* (cron dias úteis 10h-17h BRT).

## Trabalho pré-existente incluído
- Captain Executive Reports (ceo_digest, mattermost_delivery).
- get_reserva_preco_tool, Lifecycle ajustes, Reservations UI polimentos.

## Outros
- .gitignore: patterns pra credenciais.
- Migrations de scenarios idempotentes.
- i18n completa pt_BR+en pra roleta/funnel.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 15:36:25 -03:00

869 lines
30 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"CAPTAIN_RESERVATIONS": {
"HEADER": "Reservations",
"EMPTY": "No reservations found.",
"CREATE_SUCCESS": "Reservation successfully created.",
"CREATE_ERROR": "Failed to create reservation.",
"NEW_RESERVATION_MODAL": {
"TITLE": "New Reservation",
"CONFIRM": "Create Reservation",
"CANCEL": "Cancel",
"FIELDS": {
"CONTACT_ID": "Contact ID",
"CONTACT_ID_PLACEHOLDER": "Enter the contact ID",
"INBOX": "Inbox",
"INBOX_PLACEHOLDER": "Select an inbox",
"STATUS": "Reservation Status",
"STATUS_PLACEHOLDER": "Select status",
"SUITE_IDENTIFIER": "Suite Identifier (Ex: 101, Master Suite)",
"CHECK_IN": "Check-in",
"CHECK_OUT": "Check-out",
"TOTAL_AMOUNT": "Total Amount"
}
},
"VIEW": {
"LIST": "List",
"KANBAN": "Kanban",
"REVENUE": "Revenue"
},
"FILTERS": {
"SEARCH": "Search by name, CPF, or phone",
"STATUS": "Status",
"STATUS_ALL": "All statuses",
"UNIT": "Unit",
"UNIT_ALL": "All units",
"SUITE": "Suite",
"DATE_FROM": "From",
"DATE_TO": "To",
"SORT": "Sort",
"SORT_DEFAULT": "Operational priority",
"SORT_CHECK_IN": "Check-in date",
"SORT_UPDATED": "Last update",
"SORT_CREATED": "Created at",
"APPLY": "Apply filters",
"CLEAR": "Clear filters",
"HIDE": "Hide filters"
},
"KPI": {
"TOTAL": "Total on page",
"PENDING_PIX": "Awaiting PIX",
"CHECKIN_TODAY": "Check-in today",
"REVENUE_TODAY": "Revenue today"
},
"PILLS": {
"ALL": "All",
"DRAFT": "Draft",
"PENDING_PAYMENT": "Awaiting PIX",
"CONFIRMED": "Confirmed",
"CANCELLED": "Cancelled"
},
"QUICK_DATE": {
"TODAY": "Today",
"TOMORROW": "Tomorrow",
"WEEK": "7 days",
"ALL": "All"
},
"CARD": {
"CHECK_IN": "Check-in",
"AMOUNT": "Amount",
"TODAY": "Today",
"TOMORROW": "Tomorrow",
"YESTERDAY": "Yesterday",
"PIX_EXPIRED": "Expired",
"PIX_EXPIRES_IN_MIN": "Expires in {minutes}min",
"PIX_EXPIRES_IN_HR": "Expires in {hours}h"
},
"TABLE": {
"CUSTOMER": "Customer",
"UNIT": "Unit",
"SUITE": "Suite",
"CHECK_IN": "Check-in",
"AMOUNT": "Amount",
"STATUS": "Status",
"UPDATED_AT": "Updated",
"ACTIONS": "Actions"
},
"STATUS": {
"SCHEDULED": "Scheduled",
"PENDING_PAYMENT": "Awaiting payment",
"ACTIVE": "Active",
"CONFIRMED": "Confirmed",
"COMPLETED": "Completed",
"CANCELLED": "Cancelled",
"DRAFT": "Draft"
},
"ACTIONS": {
"OPEN_CONVERSATION": "Open conversation",
"COPY_PIX": "Copy Pix",
"MORE": "More",
"REGENERATE_PIX": "Resend PIX",
"MARK_AS_PAID": "Mark as paid",
"MARK_AS_PAID_CONFIRM": "Mark this reservation as manually paid?",
"MARKED_AS_PAID": "Reservation marked as paid.",
"MARK_AS_PAID_FAILED": "Failed to mark as paid.",
"CANCEL": "Cancel reservation",
"CANCEL_REASON_PROMPT": "Cancellation reason (optional):",
"CANCELLED": "Reservation cancelled.",
"CANCEL_FAILED": "Failed to cancel.",
"PIX_REGENERATED": "New PIX generated and sent.",
"PIX_REGENERATE_FAILED": "Failed to resend PIX."
},
"KANBAN": {
"EMPTY_COLUMN": "No reservations in this status."
},
"REVENUE": {
"ONLY_CONFIRMED": "Revenue includes only reservations with confirmed status.",
"SUMMARY": {
"TOTAL_REVENUE": "Total revenue",
"CONFIRMED_COUNT": "Confirmed reservations",
"AVERAGE_TICKET": "Average ticket"
},
"CHARTS": {
"BY_UNIT": "Revenue by unit",
"BY_SUITE": "Revenue by suite"
},
"API": {
"ERROR": "Unable to load revenue."
}
},
"SIDEBAR": {
"NO_RESERVATION": "No reservation linked to this conversation.",
"LOADING": "Loading reservation details...",
"STATUS": "Status",
"SUITE": "Suite",
"CHECK_IN": "Check-in",
"CHECK_OUT": "Check-out",
"AMOUNT": "Amount",
"UPDATED_AT": "Updated at"
},
"API": {
"PIX_EXPIRED": "Pix for this reservation is expired.",
"PIX_NOT_GENERATED": "Pix has not been generated yet.",
"PIX_COPIED": "Pix copied successfully.",
"PIX_COPY_FAILED": "Unable to copy Pix."
}
},
"CAPTAIN_ORCHESTRATOR_EDITOR": {
"MISSING_DELIMITER_PREFIX": "This prompt was saved before the sections split. All content appears in the \"System Base Prompt\" field. Click",
"MISSING_DELIMITER_BUTTON": "Restore Default",
"MISSING_DELIMITER_SUFFIX": "to get automatic splitting, or manually move assistant content to the correct field."
},
"CAPTAIN_ROLETA": {
"HEADER": "Roulette — Redeem",
"TAB_REDEEM": "Redeem",
"TAB_REPORT": "Report",
"REDEEM": {
"TITLE": "Deliver prize to guest",
"DESC": "Type the code the guest showed on WhatsApp and confirm the redemption. Jasmine automatically sends a confirmation to the guest.",
"CODE_LABEL": "Coupon code",
"CODE_PLACEHOLDER": "Ex: ABC123",
"NOTES_LABEL": "Note (optional)",
"NOTES_PLACEHOLDER": "Any detail about the redemption",
"SUBMIT": "Confirm redemption",
"SUBMITTING": "Registering...",
"SUCCESS_PREFIX": "{prize} delivered to ",
"SUCCESS_FULL": "✅ {prize} delivered to {name}.",
"ERROR_FULL": "⚠️ {message}",
"FALLBACK_CLIENT": "guest",
"ERROR_EMPTY_CODE": "Type the code printed on the guest's coupon.",
"ERROR_NOT_FOUND": "Code not found. Check the spelling.",
"ERROR_ALREADY_REDEEMED": "This coupon has already been redeemed.",
"ERROR_NO_PRIZE": "This coupon landed on \"No luck\" — nothing to deliver.",
"ERROR_NO_RECEPTIONIST": "Log in again and try once more.",
"ERROR_RPC_FAILED": "Error calling the reservations server.",
"ERROR_EXCEPTION": "Something broke. Tell the tech team.",
"ERROR_DEFAULT": "Not registered."
},
"HISTORY": {
"TITLE": "Active coupons (last 7 days)",
"LOADING": "Loading...",
"EMPTY": "No active coupons in recent days.",
"LOAD_ERROR": "Error loading pending coupons",
"COL_CODE": "Code",
"COL_PRIZE": "Prize",
"COL_CLIENT": "Guest",
"COL_GENERATED": "Generated",
"COL_STATUS": "Redemption",
"STATUS_REDEEMED_PREFIX": "✅ ",
"STATUS_PENDING": "⏳ Pending"
},
"REPORT": {
"TITLE": "Redemptions by receptionist",
"DESC": "Anti-fraud: flags those redeeming well above team average.",
"PERIOD_7": "Last 7 days",
"PERIOD_14": "Last 14 days",
"PERIOD_30": "Last 30 days",
"LOADING": "Loading report...",
"EMPTY": "No redemptions in this period.",
"LOAD_ERROR": "Error loading report",
"KPI_TOTAL": "Total redemptions",
"KPI_AVG": "Average per person",
"KPI_COUNT": "Active receptionists",
"KPI_THRESHOLD": "Alert threshold",
"KPI_THRESHOLD_PREFIX": "≥ ",
"COL_RECEPTIONIST": "Receptionist",
"COL_TOTAL": "Total",
"COL_BRINDES": "Gifts",
"COL_DESCONTOS": "Discounts",
"COL_SUM_DISCOUNT": "Σ % discount",
"COL_STATUS": "Status",
"STATUS_ANOMALY": "⚠️ Above average",
"STATUS_NORMAL": "Normal",
"FOOTER_HINT": "Alert triggers when a receptionist has ≥ {threshold} redemptions (minimum 5, or 2.5× team average). Verify guest conversations on WhatsApp to confirm."
}
},
"CAPTAIN_FUNNEL": {
"HEADER": "Conversion Funnel",
"DESC": "Track the customer journey from price inquiry to paid Pix. Identifies where customers drop off.",
"PERIOD_7": "7 days",
"PERIOD_30": "30 days",
"PERIOD_60": "60 days",
"PERIOD_90": "90 days",
"LOADING": "Loading funnel...",
"EMPTY": "No Captain conversations in this period. Try a different range.",
"LOAD_ERROR": "Error loading funnel",
"INSIGHT_LABEL": "Biggest drop-off point",
"INSIGHT_FULL": "{lost} customers dropped between \"{from}\" and \"{to}\" — that's {pct} of those who reached the previous stage.",
"FUNNEL_TITLE": "Overall funnel ({count} conversations analyzed)",
"BY_SUITE_TITLE": "By suite category",
"BY_SUITE_HEADER": "Suite",
"BY_SUITE_FOOTER": "Category detected by mention in conversation content. Conversations without specific mention are not shown in this breakdown.",
"STAGES": {
"price_inquiry": "Asked price",
"price_answered": "Received quote",
"reservation_drafted": "Reservation started",
"pix_generated": "Pix generated",
"pix_paid": "Pix paid"
}
},
"CAPTAIN_SETTINGS": {
"TITLE": "Captain Settings",
"UNITS": {
"TITLE": "Pix Units",
"DESC": "Manage the settings of different Pix units integrated with Banco Inter.",
"ADD_UNIT": "Add Unit",
"EDIT_UNIT": "Edit Unit",
"DELETE_UNIT": "Delete Unit",
"LIST": {
"TABLE_HEADER": [
"Pix Key",
"Account",
"Certificates",
"Monitoring",
"Actions"
],
"CERT": "Cert",
"KEY": "Key",
"PROACTIVE_ON": "Auto-check on",
"PROACTIVE_OFF": "Auto-check off",
"SEPARATOR": "|",
"ADD_NEW_UNIT": "Add a Pix Unit",
"NO_UNITS_MESSAGE": "There are no pix units entered yet. Create one now to start receiving by Banco Inter pix."
},
"DELETE": {
"BUTTON_TEXT": "Delete",
"TITLE": "Delete Pix Unit",
"DESC": "Are you sure you want to delete this pix unit? This action cannot be undone.",
"CONFIRM": {
"TITLE": "Confirm Deletion",
"MESSAGE": "Are you sure you want to delete the Unit?",
"YES": "Delete",
"NO": "Cancel"
},
"API": {
"SUCCESS_MESSAGE": "Unit deleted successfully.",
"ERROR_MESSAGE": "There was an error trying to delete the unit."
}
},
"ADD": {
"TITLE": "New Pix Unit",
"DESC": "Add your Banco Inter app credentials",
"CANCEL_BUTTON_TEXT": "Cancel",
"SUBMIT_BUTTON_TEXT": "Create unit",
"API": {
"SUCCESS_MESSAGE": "Unit created successfully!",
"ERROR_MESSAGE": "There was an error trying to create the unit."
}
},
"EDIT": {
"TITLE": "Edit Pix Unit",
"DESC": "Update Banco Inter credentials",
"CANCEL_BUTTON_TEXT": "Cancel",
"SUBMIT_BUTTON_TEXT": "Save unit",
"API": {
"SUCCESS_MESSAGE": "Unit updated successfully!",
"ERROR_MESSAGE": "There was an error trying to update."
}
},
"FORM": {
"NAME": {
"LABEL": "Unit Name",
"PLACEHOLDER": "Ex: Headquaters",
"ERROR": "Name is required"
},
"INTER_PIX_KEY": {
"LABEL": "Pix Key (from Inter app)",
"PLACEHOLDER": "Ex: 12.345.678/0001-90",
"ERROR": "Pix key is required",
"HELP_TEXT": "Your Pix key that will receive the charges"
},
"INTER_ACCOUNT_NUMBER": {
"LABEL": "Inter account number",
"PLACEHOLDER": "Ex: 1234567-8",
"ERROR": "Account number is required"
},
"INTER_CLIENT_ID": {
"LABEL": "Inter App Client ID",
"PLACEHOLDER": ""
},
"INTER_CLIENT_SECRET": {
"LABEL": "Inter App Client Secret",
"PLACEHOLDER": ""
},
"INTER_CERT_CONTENT": {
"LABEL": "Certificate Content (.crt)",
"PLACEHOLDER": "Paste the text contained in the .crt file here...",
"UPLOAD_BUTTON": "Import .crt file"
},
"INTER_KEY_CONTENT": {
"LABEL": "Key Content (.key)",
"PLACEHOLDER": "Paste the text contained in the .key file here...",
"UPLOAD_BUTTON": "Import .key file"
},
"PROACTIVE_PIX_POLLING": {
"LABEL": "Proactive payment confirmation (Banco Inter)",
"CHECKBOX_LABEL": "Check payment automatically every 10 minutes for up to 1 hour",
"HELP_TEXT": "When enabled, the system proactively queries Inter to confirm pending Pix payments.",
"DISABLED_HELP_TEXT": "Complete Banco Inter credentials (Client ID/Secret, account, Pix key, certificate and key) to enable."
},
"CERT_PRESENT_HELP": "Certificate already configured.",
"CANCEL": "Cancel",
"SAVE": "Save"
},
"INBOX": {
"LABEL": "Pix Unit",
"PLACEHOLDER": "Select a unit",
"NO_UNIT": "No unit linked",
"CONNECT_UNIT_LABEL": "Link Pix Unit",
"CONNECT_UNIT_PLACEHOLDER": "Choose the Inter unit for this inbox",
"CONNECT_UNIT_HELP": "Select which Pix Unit should be used by this inbox."
},
"TEST": {
"HEADER_TITLE": "Header validation",
"HEADER_DESCRIPTION": "Visual test to validate page rendering.",
"BODY_TEXT": "If this screen appears, the issue is likely in the table or Vuex, not in the base layout."
}
},
"GALLERY": {
"TITLE": "Gallery",
"DESC": "Manage suite photos that subagents can send to customers.",
"ADD_ITEM": "Add Photo",
"EDIT_ITEM": "Edit",
"DELETE_ITEM": "Delete",
"LIST": {
"TABLE_HEADER": [
"Image",
"Inbox and description",
"Category",
"Suite",
"Actions"
],
"ADD_NEW_ITEM": "Add gallery photos",
"NO_ITEMS_MESSAGE": "There are no photos available yet for automatic customer sending."
},
"DELETE": {
"CONFIRM": {
"TITLE": "Delete photo",
"MESSAGE": "Are you sure you want to delete this photo from the gallery?",
"YES": "Delete"
},
"API": {
"SUCCESS_MESSAGE": "Photo deleted successfully.",
"ERROR_MESSAGE": "Unable to delete the photo."
}
},
"ADD": {
"TITLE": "New gallery photo",
"DESC": "Upload a suite photo and metadata for agent search.",
"SUBMIT_BUTTON_TEXT": "Save photo",
"API": {
"SUCCESS_MESSAGE": "Photo created successfully!",
"ERROR_MESSAGE": "Unable to create the photo."
}
},
"EDIT": {
"TITLE": "Edit gallery photo",
"DESC": "Update gallery metadata and image.",
"SUBMIT_BUTTON_TEXT": "Save changes",
"API": {
"SUCCESS_MESSAGE": "Photo updated successfully!",
"ERROR_MESSAGE": "Unable to update the photo."
}
},
"FORM": {
"INBOX": {
"LABEL": "Inbox",
"GLOBAL_OPTION": "Global (all inboxes)",
"HELP": "Select which inbox can use these photos.",
"GLOBAL_HELP": "These photos can be used by agents in any inbox.",
"SPECIFIC_HELP": "These photos will be used only in inbox {inbox}."
},
"SUITE_CATEGORY": {
"LABEL": "Suite category",
"PLACEHOLDER": "Ex: Hydromassage",
"ERROR": "Suite category is required"
},
"SUITE_NUMBER": {
"LABEL": "Suite number/identifier",
"PLACEHOLDER": "Ex: 101",
"ERROR": "Suite identifier is required"
},
"DESCRIPTION": {
"LABEL": "Photo description",
"PLACEHOLDER": "Describe what appears in this photo",
"ERROR": "Description is required"
},
"IMAGE": {
"LABEL": "Image",
"HELP_TEXT": "Use clear photos. Recommended formats: PNG/JPG.",
"ERROR": "Image is required",
"PREVIEW_ALT": "Photo preview"
},
"ACTIVE": {
"LABEL": "Available for agent sending"
}
}
},
"NOTIFICATIONS": {
"TITLE": "Automatic Notifications",
"DESCRIPTION": "Configure messages sent automatically before or after the guest's arrival.",
"LOADING": "Loading notifications...",
"ADD": "Add notification",
"ACTIVE": "Active",
"INACTIVE": "Inactive",
"DIRECTION": {
"BEFORE": "before",
"AFTER": "after",
"OF_ARRIVAL": "arrival"
},
"FORM": {
"LABEL_PLACEHOLDER": "Template name (e.g. Arrival Instructions)",
"CONTENT_PLACEHOLDER": "Message to send... Use {{guest_name}}, {{check_in_time}}, {{suite_name}}",
"SEND": "Send",
"MINUTES": "min",
"CANCEL": "Cancel",
"SAVE": "Save"
},
"CREATE": {
"SUCCESS": "Notification created successfully!",
"ERROR": "Error creating notification. Please try again."
},
"UPDATE": {
"SUCCESS": "Notification updated!",
"ERROR": "Error updating notification."
},
"DELETE": {
"SUCCESS": "Notification removed.",
"ERROR": "Error removing notification."
},
"INBOX_LABEL": "Select inbox",
"NO_CAPTAIN_INBOXES": "No inboxes with Captain configured.",
"SELECT_INBOX_HINT": "Click an inbox above to view and configure its templates.",
"EMPTY": {
"TITLE": "No templates configured",
"DESC": "Create automatic message templates for this inbox."
}
}
},
"CAPTAIN": {
"BANNER": {
"RESPONSES": "You have used more than 80% of your responses limit. To continue using Captain AI, please upgrade.",
"DOCUMENTS": "Documents limit reached. Please upgrade to continue using Captain AI."
},
"FORM": {
"CANCEL": "Cancel",
"CREATE": "Create",
"EDIT": "Update"
},
"RESPONSES": {
"HEADER": "FAQs",
"PENDING_FAQS": "Pending FAQs",
"ADD_NEW": "Create new FAQ",
"DOCUMENTABLE": {
"CONVERSATION": "Conversation #{id}"
},
"SELECTED": "{count} selected",
"SELECT_ALL": "Select all ({count})",
"UNSELECT_ALL": "Unselect all ({count})",
"SEARCH_PLACEHOLDER": "Search FAQs...",
"BULK_APPROVE_BUTTON": "Approve",
"BULK_DELETE_BUTTON": "Delete",
"BULK_APPROVE": {
"SUCCESS_MESSAGE": "FAQs approved successfully",
"ERROR_MESSAGE": "An error occurred while approving FAQs. Try again."
},
"BULK_DELETE": {
"TITLE": "Delete FAQs?",
"DESCRIPTION": "Are you sure you want to delete selected FAQs? This action cannot be undone.",
"CONFIRM": "Yes, delete all",
"SUCCESS_MESSAGE": "FAQs deleted successfully",
"ERROR_MESSAGE": "An error occurred while deleting FAQs, please try again."
},
"DELETE": {
"TITLE": "Are you sure you want to delete this FAQ?",
"DESCRIPTION": "",
"CONFIRM": "Yes, delete",
"SUCCESS_MESSAGE": "FAQ deleted successfully",
"ERROR_MESSAGE": "An error occurred while deleting FAQ, please try again."
}
}
},
"CAPTAIN_REPORTS": {
"TITLE": "AI Reports",
"DESC": "Weekly AI-generated insights based on each unit's conversations.",
"LOADING": "Loading reports...",
"ALL_UNITS": "All units",
"ALL_INBOXES": "All inboxes",
"UNITS_GROUP": "Pix Units",
"INBOXES_GROUP": "Inboxes",
"TABS": {
"DASHBOARD": "Dashboard",
"INSIGHTS": "AI Insights",
"OPERATIONAL": "Operational",
"EXECUTIVE": "Executive",
"LANDING_PAGES": "Landing Pages"
},
"EXECUTIVE": {
"LOADING": "Loading executive digest...",
"NO_DATA": "No insights for the period. Run the weekly analysis to see data here.",
"TITLE": "Executive Digest",
"SUBTITLE": "Same report sent to Mattermost, with drill-down and filters.",
"DELIVER_BUTTON": "Send to Mattermost now",
"DELIVER_SUCCESS": "Digest queued. It will arrive in Mattermost shortly.",
"DELIVER_ERROR": "Failed to dispatch the digest. Check Rails log.",
"CONVERSATIONS": "Conversations",
"MESSAGES": "Messages",
"UNITS_ANALYZED": "Units analyzed",
"INSIGHTS_COUNT": "Insights generated",
"UNIT_TABLE": "Comparative by unit",
"COL_UNIT": "Unit",
"COL_CONVS": "Conversations",
"COL_DELTA": "vs previous week",
"COL_AI_RATE": "AI success rate",
"COL_FAILURES": "Failures",
"AI_FAILURES": "Where Angelina failed (click to see conversations)",
"OPPORTUNITIES": "Opportunities — what customers asked for",
"OPPORTUNITIES_HINT": "Click an opportunity to see real conversations where it was mentioned.",
"COMPLAINTS": "Recurring complaints",
"PRAISES": "Recurring praises",
"RECOMMENDATIONS": "AI Recommendations",
"DRILLDOWN_TITLE": "Related conversations",
"NO_CONVERSATIONS_FOUND": "No conversations found with those keywords in the period.",
"NO_CONVERSATIONS_HINT": "The insight description is an AI abstraction. If no keyword matches the literal conversation text, nothing is returned. Try clicking a more specific item.",
"SEARCH_TOKENS": "Keywords searched",
"OPEN_CONVERSATION": "Open in Chatwoot"
},
"LP": {
"LOADING": "Loading data...",
"NO_DATA": "No clicks recorded yet. Integrate the pixel on your landing page to see data here.",
"TOTAL_CLICKS": "Total Clicks",
"TOTAL_CONVERSIONS": "Conversions (WhatsApp)",
"CONVERSION_RATE": "Conversion Rate",
"TOTAL_DROPOFF": "Drop-off (No conversation)",
"DROPOFF_RATE": "Drop-off Rate",
"UNIQUE_CONTACTS": "Unique contacts converted",
"FUNNEL_TITLE": "Landing page funnel",
"DAILY_TREND": "Daily click vs conversion trend",
"BY_SOURCE": "Clicks by Source",
"BY_CAMPAIGN": "Clicks by Campaign",
"BY_HOSTNAME": "Clicks by Landing Page",
"CLICKS": "clicks",
"CONV": "conv",
"REFRESH": "Refresh",
"LEGEND_CLICKS": "Clicks",
"LEGEND_CONVERSIONS": "Conversions"
},
"FILTER_DATE": {
"LABEL": "Period:",
"START": "Start Date",
"END": "End Date",
"TODAY": "Today",
"YESTERDAY": "Yesterday",
"LAST_7_DAYS": "Last 7 days",
"LAST_30_DAYS": "Last 30 days",
"THIS_WEEK": "This week",
"LAST_WEEK": "Last Week",
"CURRENT_MONTH": "Current Month",
"LAST_MONTH": "Last Month",
"CUSTOM": "Custom",
"SEPARATOR": "-"
},
"INSIGHT": {
"CONVERSATIONS": "conversations",
"MESSAGES": "messages",
"TOP_TOPICS": "Top Topics",
"AI_FAILURES": "AI Failures",
"BULLET": "•",
"COUNT_PREFIX": "(",
"COUNT_SUFFIX": ")",
"TIMES": "x",
"SENTIMENT": "Sentiment",
"SENTIMENT_POSITIVE": "Positive",
"SENTIMENT_NEGATIVE": "Negative",
"SENTIMENT_NEUTRAL": "Neutral",
"PRAISES": "Customer Praises",
"COMPLAINTS": "Complaints",
"FAQ_GAPS": "FAQ Gaps",
"FAQ_GAPS_HINT": "Questions customers ask that the agent doesn't cover",
"MOST_REQUESTED_SUITES": "Most Requested Suites",
"PRICE_REACTIONS": "Price Reactions",
"PRICE_OBJECTIONS": "price objections",
"RECOMMENDATIONS": "Recommendations",
"SHOW_DETAILS": "View full analysis",
"HIDE_DETAILS": "Hide details"
},
"EMPTY": {
"TITLE": "No reports generated",
"MESSAGE": "Generate a new report to analyze support performance."
},
"GENERATE": {
"BUTTON": "Generate Analysis",
"SUCCESS": "Report requested successfully! It may take a few minutes.",
"ERROR": "Error requesting report generation.",
"DATE_REQUIRED": "Please select start and end dates."
},
"STATUS": {
"PENDING": "Pending",
"PROCESSING": "Processing",
"DONE": "Completed",
"FAILED": "Failed"
},
"OPERATIONAL": {
"LOADING": "Loading operational data...",
"NO_DATA": "No operational data for the selected period.",
"CONVERSATIONS_SECTION": "Conversations",
"RESERVATIONS_SECTION": "Reservations",
"TOTAL": "Total",
"RESOLVED": "Resolved",
"OPEN": "Open",
"AVG_RESOLUTION": "Avg resolution time",
"RES_TOTAL": "Total reservations",
"RES_PAID": "Paid",
"RES_EXPIRED": "Expired",
"RES_REVENUE": "Paid revenue",
"BY_INBOX": "Volume by inbox",
"RESOLUTION_RATE_TOOLTIP": "Resolution rate",
"DAILY_DIST": "Daily distribution",
"HOURLY_DIST": "Hourly distribution",
"PEAK": "Peak"
},
"DASHBOARD": {
"TOTAL_CONVERSATIONS": "Analyzed conversations",
"AVG_SENTIMENT": "Avg. positive sentiment",
"FAQ_GAPS_TOTAL": "FAQ gaps identified",
"WEEKS_ANALYZED": "weeks analyzed",
"NO_DATA": "Not enough data. Generate more AI reports to see the dashboard.",
"SENTIMENT_TREND": "Sentiment trend by week",
"FAILURES_RANKING": "Agent failure ranking",
"FAILURES_RANKING_HINT": "Most frequent situations where the AI couldn't respond well",
"FAQ_PRIORITY": "Priority FAQs to create",
"FAQ_PRIORITY_HINT": "Questions customers ask most that aren't in the FAQ yet",
"CUSTOMER_BEHAVIOR": "Customer behavior",
"TOP_TOPICS_TITLE": "Most discussed topics",
"SUITES_TITLE": "Most requested suites",
"COMPLAINTS_TREND": "Complaints volume by week",
"HANDOFFS_TITLE": "Estimated handoffs to human",
"HANDOFFS_HINT": "Based on AI failure frequency. Direct handoff tracking coming soon.",
"TREND_UP": "rising",
"TREND_DOWN": "falling",
"TREND_STABLE": "stable",
"WEEKS": "weeks"
},
"FAQ_QUICK_ADD": {
"BUTTON": "Create FAQ",
"TITLE": "Create FAQ from AI suggestion",
"QUESTION_LABEL": "Question (suggested by AI)",
"ANSWER_LABEL": "Answer",
"ANSWER_PLACEHOLDER": "Write the answer to this question...",
"ASSISTANT_LABEL": "AI Agent",
"ASSISTANT_PLACEHOLDER": "Select the agent",
"CANCEL": "Cancel",
"SAVE": "Save FAQ",
"SUCCESS": "FAQ created successfully!",
"ERROR": "Error creating FAQ. Please try again."
}
},
"CAPTAIN_LIFECYCLE": {
"HEADER": "Customer Journey",
"SUBTITLE": "Automated WhatsApp messages along the reservation lifecycle",
"TABS": {
"RULES": "Rules",
"SETTINGS": "Settings",
"HISTORY": "History"
},
"RULES": {
"EMPTY": "No rules configured yet.",
"CREATE": "New rule",
"TEMPLATES_TITLE": "Ready-made templates",
"COLUMNS": {
"NAME": "Name",
"EVENT": "Event",
"OFFSET": "Offset",
"FILTER": "Filter",
"STATUS": "Status",
"ACTIONS": "Actions"
},
"STATUS": {
"ENABLED": "Active",
"DISABLED": "Disabled"
},
"ACTIONS": {
"EDIT": "Edit",
"DUPLICATE": "Duplicate",
"TOGGLE": "Enable/Disable",
"DELETE": "Delete"
},
"DELETE_CONFIRM": "Are you sure you want to delete this rule?",
"TOAST": {
"CREATED": "Rule created successfully.",
"UPDATED": "Rule updated.",
"DELETED": "Rule deleted."
},
"WIZARD": {
"TITLE_CREATE": "New rule",
"TITLE_EDIT": "Edit rule",
"STEP_WHEN": "When?",
"STEP_WHO": "Who?",
"STEP_WHAT": "What?",
"STEP_REVIEW": "Review",
"NEXT": "Next",
"BACK": "Back",
"SAVE": "Save",
"CANCEL": "Cancel",
"OFFSET_UNIT_LABEL": "min",
"STEP_LABELS": {
"WHEN": "1. When?",
"WHO": "2. Who?",
"WHAT": "3. What?",
"REVIEW_TAB": "4. Review"
},
"REVIEW": {
"NAME": "Name:",
"EVENT": "Event:",
"OFFSET": "Offset (min):",
"UNITS": "Units:",
"MESSAGE": "Message:"
},
"FIELDS": {
"NAME": "Rule name",
"DESCRIPTION": "Description",
"EVENT": "Trigger event",
"OFFSET_VALUE": "Value",
"OFFSET_UNIT": "Unit",
"OFFSET_DIRECTION": "Direction",
"UNITS": "Units",
"CATEGORIAS": "Suite categories",
"PERMANENCIAS": "Stay types",
"MESSAGE_TYPE": "Message type",
"MESSAGE_BODY": "Message body",
"PRIORITY": "Priority",
"ENABLED": "Rule active"
},
"OFFSET_UNITS": {
"MINUTES": "Minutes",
"HOURS": "Hours",
"DAYS": "Days"
},
"OFFSET_DIRECTIONS": {
"BEFORE": "Before",
"AFTER": "After"
},
"EVENTS": {
"RESERVATION_CONFIRMED": "Reservation confirmed (Pix paid)",
"CHECKIN_SCHEDULED_AT": "Check-in time",
"CHECKOUT_SCHEDULED_AT": "Check-out time",
"RESERVATION_CANCELLED": "Reservation cancelled",
"RESERVATION_NO_SHOW": "No-show"
},
"MESSAGE_TYPES": {
"TEXT": "Plain text",
"BUTTONS": "Text with buttons",
"LIST": "List menu",
"URL_BUTTON": "Link button"
}
}
},
"SETTINGS": {
"GUARDS_TITLE": "Anti-spam guards",
"QUIET_HOURS_ENABLED": "Enable quiet hours",
"QUIET_HOURS_FROM": "From",
"QUIET_HOURS_TO": "To",
"MIN_INTERVAL": "Minimum interval between messages (min)",
"MIN_INTERVAL_HELP": "0 disables",
"PAUSE_ON_REPLY": "Pause if customer replied",
"PAUSE_ON_REPLY_WINDOW": "Window (min)",
"OPT_OUT_LABEL": "Opt-out label",
"MAX_PER_RESERVATION_INFO": "Maximum of 5 messages per reservation (not configurable)",
"CONCIERGE_TITLE": "Concierge (Sofia) per Unit",
"CONCIERGE_INBOX": "WhatsApp Inbox",
"CONCIERGE_PERSONA": "Persona name",
"CONCIERGE_KNOWLEDGE": "Knowledge base (markdown)",
"CONCIERGE_VARIABLES": "Unit variables",
"CONCIERGE_VARIABLE_KEY": "Key",
"CONCIERGE_VARIABLE_VALUE": "Value",
"CONCIERGE_ADD_VARIABLE": "Add variable",
"CONCIERGE_CONFIGURED": "Configured",
"CONCIERGE_NOT_CONFIGURED": "Not configured",
"SAVE": "Save changes",
"TOAST": {
"SAVED": "Settings saved.",
"CONCIERGE_SAVED": "Unit concierge updated."
}
},
"HISTORY": {
"EMPTY": "No deliveries recorded.",
"COLUMNS": {
"RULE": "Rule",
"CUSTOMER": "Customer",
"RESERVATION": "Reservation",
"STATUS": "Status",
"FIRE_AT": "Fired at",
"REASON": "Reason",
"ACTIONS": ""
},
"STATUS": {
"SCHEDULED": "Scheduled",
"SENT": "Sent",
"SKIPPED": "Skipped",
"FAILED": "Failed",
"CANCELLED": "Cancelled"
},
"FILTERS": {
"STATUS": "Status",
"RULE": "Rule",
"FROM": "From",
"TO": "To",
"ALL": "All"
},
"PREVIEW": "Preview",
"TOTAL": "total",
"PAGINATION": {
"PREV": "Prev",
"NEXT": "Next"
},
"MODAL": {
"TITLE": "Message preview",
"CLOSE": "Close",
"RULE": "Rule",
"STATUS": "Status",
"REASON": "Reason",
"ERROR": "Error",
"FIRE_AT": "Fire at",
"SENT_AT": "Sent at",
"RENDERED": "Rendered",
"RESERVATION_ID": "Reservation #"
}
}
}
}