Feat: added concierge menu item#86576
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 359ffed10b
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| description: translate('initialSettingsPage.helpPage.conciergeChatDescription'), | ||
| icon: icons.ConciergeAvatar, | ||
| iconType: CONST.ICON_TYPE_AVATAR, | ||
| onPress: () => Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(conciergeReportID)), |
There was a problem hiding this comment.
Route concierge item through concierge resolver
The new Help menu action navigates directly to ROUTES.REPORT_WITH_ID using conciergeReportID, but that ID is legitimately absent for some sessions (e.g., before report data finishes loading or when the concierge chat has not been created yet). In those cases this builds an invalid r/undefined route instead of opening/creating the concierge chat, which is the behavior provided by the existing navigateToConciergeChat/ROUTES.CONCIERGE flow.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
used navigateToConciergeChat as suggested to be consistent with other places
|
@Expensify/design May be some of your 👀 |
|
@Valforte Can you pls run translation flow? Thx |
Reviewer Checklist
Screenshots/VideosAndroid: HybridApp<! -- add screenshots or videos here --> Android: mWeb Chrome2026-03-30.19-45-28.mp4iOS: HybridApp2026-03-30.19-37-22.mp4iOS: mWeb Safari2026-03-30.19-36-48.mp4MacOS: Chrome / Safari2026-03-30.19-34-27.mp4 |
|
Looks pretty good to me. Should we actually just be opening up the Concierge RHP instead of navigating to Inbox? I'm not entirely sure, so just asking! |
|
Great question Shawn! I'm actually not sure either? It might feel a bit better to just open the Concierge RHP right here, but there may be a reason to go to Inbox that I'm unaware of. |
🦜 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 7d464622..f3bf296a 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -1990,7 +1990,13 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Kontoeinstellungen',
account: 'Konto',
general: 'Allgemein',
- helpPage: {title: 'Hilfe und Support', description: 'Wir sind rund um die Uhr für Sie da', helpSite: 'Hilfeseite'},
+ helpPage: {
+ title: 'Hilfe und Support',
+ description: 'Wir sind rund um die Uhr für Sie da',
+ helpSite: 'Hilfeseite',
+ conciergeChat: 'Concierge',
+ conciergeChatDescription: 'Ihr persönlicher KI-Agent',
+ },
},
closeAccountPage: {
closeAccount: 'Konto schließen',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 5cb6ed39..066484a6 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -1995,7 +1995,13 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Paramètres du compte',
account: 'Compte',
general: 'Général',
- helpPage: {title: 'Aide et assistance', description: 'Nous sommes là pour vous aider 24 h/24, 7 j/7', helpSite: 'Site d’aide'},
+ helpPage: {
+ title: 'Aide et assistance',
+ description: 'Nous sommes là pour vous aider 24 h/24, 7 j/7',
+ helpSite: 'Site d’aide',
+ conciergeChat: 'Concierge',
+ conciergeChatDescription: 'Votre agent IA personnel',
+ },
},
closeAccountPage: {
closeAccount: 'Fermer le compte',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 2eaf50b4..996a796a 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -1988,7 +1988,13 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Impostazioni account',
account: 'Account',
general: 'Generale',
- helpPage: {title: 'Aiuto e supporto', description: 'Siamo qui per aiutarti 24 ore su 24, 7 giorni su 7', helpSite: 'Sito di assistenza'},
+ helpPage: {
+ title: 'Aiuto e supporto',
+ description: 'Siamo qui per aiutarti 24 ore su 24, 7 giorni su 7',
+ helpSite: 'Sito di assistenza',
+ conciergeChat: 'Concierge',
+ conciergeChatDescription: 'Il tuo assistente IA personale',
+ },
},
closeAccountPage: {
closeAccount: 'Chiudi account',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 6395dccd..e6c45d7d 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -1967,7 +1967,13 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'アカウント設定',
account: 'アカウント',
general: '一般',
- helpPage: {title: 'ヘルプとサポート', description: '24時間365日いつでもサポートいたします', helpSite: 'ヘルプサイト'},
+ helpPage: {
+ title: 'ヘルプとサポート',
+ description: '24時間365日いつでもサポートいたします',
+ helpSite: 'ヘルプサイト',
+ conciergeChat: 'Concierge',
+ conciergeChatDescription: 'あなた専用のAIエージェント',
+ },
},
closeAccountPage: {
closeAccount: 'アカウントを閉じる',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 2582ad6b..ae0b0c5e 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -1984,7 +1984,13 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Accountinstellingen',
account: 'Account',
general: 'Algemeen',
- helpPage: {title: 'Hulp en ondersteuning', description: 'We zijn er om je 24/7 te helpen', helpSite: 'Helppagina'},
+ helpPage: {
+ title: 'Hulp en ondersteuning',
+ description: 'We zijn er om je 24/7 te helpen',
+ helpSite: 'Helppagina',
+ conciergeChat: 'Concierge',
+ conciergeChatDescription: 'Je persoonlijke AI-agent',
+ },
},
closeAccountPage: {
closeAccount: 'Account sluiten',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 3bcc856b..8a9b01eb 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -1984,7 +1984,13 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Ustawienia konta',
account: 'Konto',
general: 'Ogólne',
- helpPage: {title: 'Pomoc i wsparcie', description: 'Jesteśmy tu, żeby pomagać ci 24/7', helpSite: 'Centrum pomocy'},
+ helpPage: {
+ title: 'Pomoc i wsparcie',
+ description: 'Jesteśmy tu, żeby pomagać ci 24/7',
+ helpSite: 'Centrum pomocy',
+ conciergeChat: 'Concierge',
+ conciergeChatDescription: 'Twój osobisty agent AI',
+ },
},
closeAccountPage: {
closeAccount: 'Zamknij konto',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index d6595356..d7b93ea8 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -1980,7 +1980,13 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Configurações da conta',
account: 'Conta',
general: 'Geral',
- helpPage: {title: 'Ajuda e suporte', description: 'Estamos aqui para ajudar você 24 horas por dia, 7 dias por semana', helpSite: 'Site de ajuda'},
+ helpPage: {
+ title: 'Ajuda e suporte',
+ description: 'Estamos aqui para ajudar você 24 horas por dia, 7 dias por semana',
+ helpSite: 'Site de ajuda',
+ conciergeChat: 'Concierge',
+ conciergeChatDescription: 'Seu agente de IA pessoal',
+ },
},
closeAccountPage: {
closeAccount: 'Encerrar conta',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index f7e2e47f..8f72c780 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -1937,7 +1937,7 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: '账户设置',
account: '账户',
general: '常规',
- helpPage: {title: '帮助与支持', description: '我们全天候 24/7 为您提供帮助', helpSite: '帮助网站'},
+ helpPage: {title: '帮助与支持', description: '我们全天候 24/7 为您提供帮助', helpSite: '帮助网站', conciergeChat: 'Concierge', conciergeChatDescription: '你的个人 AI 助理'},
},
closeAccountPage: {
closeAccount: '关闭账户',
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
For me, no. I don't think the goal is to have a variety of places to chat with Concierge for the sake of variety. To me, it makes more sense to always open the RHP so you can continue to navigate/browse the app while still being able to chat with Concierge. But curious what @johncschuster and @dubielzyk-expensify had in mind too. |
|
Yeah I agree with Shawn. I kinda feel like if anything it promotes "Concierge Anywhere" better by subtly training people that they can use that Concierge icon in the top right. |
|
Yeah, I don't think it's redundant also because if you go to So I think if anything it just reiterates the point and ties it together when they eventually click the top right Concierge icon. |
|
Ok, Thanks for the input. Updated! Screen.Recording.2026-03-31.at.05.36.49.mov |
|
Looks good to me 👍 |
joekaufmanexpensify
left a comment
There was a problem hiding this comment.
Seems fine for product
|
Wouldn't it be better to update the step to |
|
🚧 @Valforte 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/Valforte in version: 9.3.52-0 🚀
Bundle Size Analysis (Sentry): |
|
🤖 Help site changes are required. I reviewed the changes in this PR and found two help site articles that describe how to access Concierge and need to include the new Settings > Help and support > Concierge path:
Draft PR created: #86998 Please mark it as "Ready for review" when it is ready for review. |
|
🚀 Deployed to production by https://github.com/roryabraham in version: 9.3.52-9 🚀
|

Explanation of Change
Added a concierge menu item in the help page.
Fixed Issues
$ #85992
PROPOSAL:
Tests
Offline tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand 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
l1.webm
Android: mWeb Chrome
l2.webm
iOS: Native
Simulator.Screen.Recording.-.iPhone.15.Pro.-.2026-03-28.at.01.14.47.mov
iOS: mWeb Safari
Simulator.Screen.Recording.-.iPhone.15.Pro.-.2026-03-28.at.01.18.07.mov
MacOS: Chrome / Safari
Screen.Recording.2026-03-25.at.18.30.52.mov