Update Concierge welcome copy to describe AI agent#81774
Conversation
Changes askConcierge copy from 'Ask me anything!' to a full welcome sentence that introduces Concierge as a personal AI agent. Also updates SidebarUtils to use the new copy as the complete welcome message for Concierge chats instead of appending to the generic chat intro. Co-authored-by: Rushat Gabhane <rushatgabhane@users.noreply.github.com>
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index bdf66411..0e74fc61 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -918,7 +918,7 @@ const translations: TranslationDeepObject<typeof en> = {
yourSpace: 'Dein Bereich',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `Willkommen in ${roomName}!`,
usePlusButton: ({additionalText}: UsePlusButtonParams) => `Verwende die +‑Taste, um eine Ausgabe zu ${additionalText}.`,
- askConcierge: 'Dies ist dein Chat mit Concierge, deinem persönlichen KI-Agenten. Ich kann fast alles, probier es aus!',
+ askConcierge: 'Dies ist dein Chat mit Concierge, deinem persönlichen KI-Agenten. Ich kann fast alles – probier es aus!',
conciergeSupport: 'Dein persönlicher KI-Agent',
create: 'erstellen',
iouTypes: {
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 862003a9..f47280d4 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -922,7 +922,7 @@ const translations: TranslationDeepObject<typeof en> = {
yourSpace: 'Votre espace',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `Bienvenue dans ${roomName} !`,
usePlusButton: ({additionalText}: UsePlusButtonParams) => `Utilisez le bouton + pour ${additionalText} une dépense.`,
- askConcierge: 'Ceci est votre chat avec Concierge, votre agent IA personnel. Je peux faire presque tout, essayez-moi !',
+ askConcierge: 'Voici votre discussion avec Concierge, votre agent IA personnel. Je peux faire presque tout, essayez-moi !',
conciergeSupport: 'Votre agent IA personnel',
create: 'créer',
iouTypes: {
diff --git a/src/languages/it.ts b/src/languages/it.ts
index dbb9f1d7..5a28981d 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -918,7 +918,7 @@ const translations: TranslationDeepObject<typeof en> = {
yourSpace: 'Il tuo spazio',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `Benvenuto in ${roomName}!`,
usePlusButton: ({additionalText}: UsePlusButtonParams) => `Usa il pulsante + per ${additionalText} una spesa.`,
- askConcierge: 'Questa è la tua chat con Concierge, il tuo agente IA personale. Posso fare quasi tutto, mettimi alla prova!',
+ askConcierge: 'Questa è la tua chat con Concierge, il tuo assistente personale basato su IA. Posso fare quasi qualsiasi cosa, mettimi alla prova!',
conciergeSupport: 'Il tuo agente IA personale',
create: 'crea',
iouTypes: {
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 6b497b7c..c7060a0d 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -914,7 +914,7 @@ const translations: TranslationDeepObject<typeof en> = {
yourSpace: 'あなたのスペース',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `${roomName} へようこそ!`,
usePlusButton: ({additionalText}: UsePlusButtonParams) => `+ ボタンを使って経費を${additionalText}します。`,
- askConcierge: 'こちらはあなた専属のAIエージェント、Conciergeとのチャットです。ほぼ何でもできますので、お試しください!',
+ askConcierge: 'これは、あなた専属のAIエージェントであるConciergeとのチャットです。私はほとんど何でもできます、試してみてください!',
conciergeSupport: 'あなた専用のAIエージェント',
create: '作成',
iouTypes: {
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 5fdfb5e7..c2b5813b 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -917,7 +917,7 @@ const translations: TranslationDeepObject<typeof en> = {
yourSpace: 'Jouw ruimte',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `Welkom bij ${roomName}!`,
usePlusButton: ({additionalText}: UsePlusButtonParams) => `Gebruik de +-knop om een uitgave te ${additionalText}.`,
- askConcierge: 'Dit is je chat met Concierge, je persoonlijke AI-agent. Ik kan bijna alles, probeer het maar!',
+ askConcierge: 'Dit is je chat met Concierge, je persoonlijke AI-agent. Ik kan bijna alles, probeer me maar uit!',
conciergeSupport: 'Jouw persoonlijke AI-agent',
create: 'maken',
iouTypes: {
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index cb61ad8a..2aac0a95 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -918,7 +918,7 @@ const translations: TranslationDeepObject<typeof en> = {
yourSpace: 'Twoja przestrzeń',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `Witaj w ${roomName}!`,
usePlusButton: ({additionalText}: UsePlusButtonParams) => `Użyj przycisku +, aby ${additionalText} wydatek.`,
- askConcierge: 'To Twój czat z Concierge, Twoim osobistym agentem AI. Mogę zrobić prawie wszystko, wypróbuj mnie!',
+ askConcierge: 'To jest Twój czat z Concierge, Twoim osobistym agentem AI. Potrafię zrobić prawie wszystko, spróbuj mnie!',
conciergeSupport: 'Twój osobisty agent AI',
create: 'utwórz',
iouTypes: {
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 98d33c51..0ce546df 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -917,7 +917,7 @@ const translations: TranslationDeepObject<typeof en> = {
yourSpace: 'Seu espaço',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `Bem-vindo(a) a ${roomName}!`,
usePlusButton: ({additionalText}: UsePlusButtonParams) => `Use o botão + para ${additionalText} uma despesa.`,
- askConcierge: 'Este é o seu chat com o Concierge, seu agente pessoal de IA. Posso fazer quase tudo, experimente!',
+ askConcierge: 'Este é o seu chat com o Concierge, seu agente de IA pessoal. Posso fazer quase tudo, faça o teste!',
conciergeSupport: 'Seu agente de IA pessoal',
create: 'criar',
iouTypes: {
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 5b7d00cb..10026d53 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -907,7 +907,7 @@ const translations: TranslationDeepObject<typeof en> = {
yourSpace: '你的空间',
welcomeToRoom: ({roomName}: WelcomeToRoomParams) => `欢迎来到 ${roomName}!`,
usePlusButton: ({additionalText}: UsePlusButtonParams) => `使用 + 按钮来${additionalText}一笔费用。`,
- askConcierge: '这是您与 Concierge(您的个人 AI 代理)的聊天。我几乎什么都能做,来试试吧!',
+ askConcierge: '这是你与 Concierge 的聊天,你的个人 AI 助手。我几乎无所不能,来试试我吧!',
conciergeSupport: '您的专属AI助手',
create: '创建',
iouTypes: {
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@iwiznia let's merge this based on - https://github.com/Expensify/Expensify/issues/596193#issuecomment-3863477254 |
|
@MelvinBot mark this ready for review |
|
@QichenZhu Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
Done! PR has been marked as ready for review. ✅ |
|
Hi @rushatgabhane,
Thanks! |
LMK when you reviewed |
|
The failing Analysis: The error is Resolution: A reviewer needs to copy and post the Reviewer Checklist as a comment on this PR. This is not a code fix — it's a process step that must be completed manually by the reviewer. |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppandroid-native.webmAndroid: mWeb Chromeandroid-web.webmiOS: HybridAppios-native.moviOS: mWeb Safariios-web.movMacOS: Chrome / Safarimac-web.mov |
|
🚧 @iwiznia has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/iwiznia in version: 9.3.17-0 🚀
|
|
🚀 Deployed to production by https://github.com/lakchote in version: 9.3.17-9 🚀
|
The LOOKING_AROUND intent still sent a support-era message about expenses, travel, and corporate card management, which conflicts with the new AI-focused Concierge welcome shipped in PRs #81331/#81774. This narrows the PR scope to only the LOOKING_AROUND cleanup: - Remove onboardingLookingAroundMessage from all 10 language files - Set message to empty string for LOOKING_AROUND in OnboardingFlow.ts - Add message guard to prevent pushing empty messages to guidedSetupData - Add skipSignOff logic to suppress "It's great to meet you!" for LOOKING_AROUND - Add unit tests for LOOKING_AROUND onboarding behavior Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The LOOKING_AROUND intent still sent a support-era message about expenses, travel, and corporate card management, which conflicts with the new AI-focused Concierge welcome shipped in PRs #81331/#81774. This narrows the PR scope to only the LOOKING_AROUND cleanup: - Remove onboardingLookingAroundMessage from all 10 language files - Set message to empty string for LOOKING_AROUND in OnboardingFlow.ts - Add message guard to prevent pushing empty messages to guidedSetupData - Add skipSignOff logic to suppress "It's great to meet you!" for LOOKING_AROUND - Add unit tests for LOOKING_AROUND onboarding behavior Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Explanation of Change
Updates the Concierge welcome text to introduce Concierge as a personal AI agent with a descriptive sentence: "This is your chat with Concierge, your personal AI agent. I can do almost anything, try me!"
Previously, the Concierge chat welcome message was composed by appending
askConcierge("Ask me anything!") tobeginningOfChatHistory("This chat is with Concierge."), resulting in "This chat is with Concierge. Ask me anything!". This PR changesaskConciergeto be a standalone welcome sentence and updatesSidebarUtils.tsto use it as the complete message for Concierge chats (replacing the generic intro rather than appending to it).Updated across all 10 supported languages.
Fixed Issues
$ https://github.com/Expensify/Expensify/issues/596193
Tests
Offline tests
N/A - This is a copy-only change that doesn't affect offline behavior.
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari
cc @rushatgabhane