"Ask Concierge" option in the search router#88727
"Ask Concierge" option in the search router#88727chuckdries merged 18 commits intoExpensify:mainfrom
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 |
🦜 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 02be2176..809677aa 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -7823,6 +7823,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
topCategories: 'Topkategorien',
topMerchants: 'Top-Händler',
},
+ askConcierge: (message: string) => `Frage Concierge „${message}“`,
},
genericErrorPage: {
title: 'Ups, da ist etwas schiefgelaufen!',
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 0f17d9c9..d54d78ef 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -7845,6 +7845,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
topCategories: 'Catégories principales',
topMerchants: 'Meilleurs commerçants',
},
+ askConcierge: (message: string) => `Demander à Concierge « ${message} »`,
},
genericErrorPage: {
title: 'Oups, quelque chose s’est mal passé !',
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 2e5e210f..fab4cb9e 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -7812,6 +7812,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
topCategories: 'Categorie principali',
topMerchants: 'Principali esercenti',
},
+ askConcierge: (message: string) => `Chiedi a Concierge “${message}”`,
},
genericErrorPage: {
title: 'Oops, qualcosa è andato storto!',
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 266d0c95..1a06b1ac 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -7715,6 +7715,7 @@ ${reportName}
topCategories: '上位カテゴリ',
topMerchants: '上位加盟店',
},
+ askConcierge: (message: string) => `Concierge に「${message}」と聞く`,
},
genericErrorPage: {
title: 'おっと、問題が発生しました!',
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 3ffdb30e..1af4310d 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -7787,6 +7787,7 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
topCategories: 'Topcategorieën',
topMerchants: 'Topverkopers',
},
+ askConcierge: (message: string) => `Vraag Concierge: “${message}”`,
},
genericErrorPage: {
title: 'Oeps, er is iets misgegaan!',
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 06cf4d88..f6a8a166 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -7777,6 +7777,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
topCategories: 'Najpopularniejsze kategorie',
topMerchants: 'Najważniejsi sprzedawcy',
},
+ askConcierge: (message: string) => `Poproś Concierge: „${message}”`,
},
genericErrorPage: {
title: 'Ups, coś poszło nie tak!',
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 0acae2f2..85fb1efc 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -7779,6 +7779,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
topCategories: 'Principais categorias',
topMerchants: 'Principais estabelecimentos',
},
+ askConcierge: (message: string) => `Perguntar ao Concierge “${message}”`,
},
genericErrorPage: {
title: 'Opa, algo deu errado!',
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 308749e9..5256da0f 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -7579,6 +7579,7 @@ ${reportName}
topCategories: '热门类别',
topMerchants: '热门商家',
},
+ askConcierge: (message: string) => `询问 Concierge“${message}”`,
},
genericErrorPage: {
title: '哎呀,出错了!',
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!
|
jmusial
left a comment
There was a problem hiding this comment.
LGTM, just couple nits 🚀
|
@linhvovan29546 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] |
|
@linhvovan29546 I now noticed there's an issue when we show #admins chat inside the side panel instead of Concierge. I will work on a fix. edit: not sure what the intended behavior for this case is. I asked on Slack |
done, now the message is sent to the admins chat in that scenario (cc: @quinthar) Nagranie.z.ekranu.2026-04-30.o.09.42.49.mov |
@mhawryluk Could you please update the test steps? |
I think the issue is that we don't display "Concierge is thinking..." when asking from the search router. I will look into it |
@linhvovan29546 it should be fixed now, but unfortunately |
I think, for a PR of this scope, it’s a reasonable compromise. |
@mhawryluk This is difficult for the QA team to test the #admins side panel scenario. I think we should add a precondition in the test steps explaining how to set up an account with
|
updated, thanks! |
|
We did not find an internal engineer to review this PR, trying to assign a random engineer to #88636 as well as to this PR... Please reach out for help on Slack if no one gets assigned! |
There was a problem hiding this comment.
I've noticed two issues while testing native that I'm not entirely sure if they're related to this PR or not
The action 'DISMISS_MODAL' was not handled...console error. This seems relevant, as SearchRouter is in the stack trace- If you kill and relaunch the app on the concierge screen, the composer disappears (or perhaps it is hidden behind the navbar?)
search.router.ask.concierge.mp4
|
I've discovered that point 2 reproduces on main, so it's not related. |
|
@chuckdries For point 1, I can reproduce it when clicking the concierge item (this also happens on main). Screen.Recording.2026-05-01.at.08.20.13.mov |
|
🚧 @chuckdries has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/chuckdries in version: 9.3.66-0 🚀
|
|
Yes, help site changes are required. PR #88727 adds a new "Ask Concierge" option in the search bar, which is a new entry point to Concierge that should be documented. Draft PR created: #89496 Changes made:
Note: I was unable to add the PR to GitHub project 196 due to token permission limitations. Please add it manually: |
|
Deploy Blocker #89524 was identified to be related to this PR. |
|
Deploy Blocker #89535 was identified to be related to this PR. |
Explanation of Change
Adds an 'Ask Concierge' option to the Search Router that opens the Concierge side panel and immediately sends the typed text as a message.
Fixed Issues
$ #88636
PROPOSAL: N/A
Tests
For when there is #admins in the side panel instead:
Precondition:
Sign up with a new account and complete onboarding with the following selections:
Offline tests
Same but offline.
QA Steps
Same as tests.
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
Nagranie.z.ekranu.2026-04-28.o.17.41.36.mov
Android: mWeb Chrome
Nagranie.z.ekranu.2026-04-28.o.18.54.39.mov
iOS: Native
Simulator.Screen.Recording.-.iPhone.17.Pro.-.2026-04-28.at.17.37.41.mov
iOS: mWeb Safari
MacOS: Chrome / Safari
Nagranie.z.ekranu.2026-04-28.o.17.43.35.mov