Skip to content

Add πŸ‘ / πŸ‘Ž feedback prompt under Concierge agent responsesΒ #96775

Description

@yuwenmemon

Problem

We want users to quickly tell us whether a Concierge agent response was helpful, directly in chat. Design is finalized β€” see the mocks in the parent issue https://github.com/Expensify/Expensify/issues/652178.

This issue covers the frontend only. The backend (capturing the feedback signal and posting the agent's thread replies) is already handled in Auth + Web-Expensify, so no new API work is required here.

Solution

Under each Concierge agent response, show a lightweight inline prompt:

Was that response useful? πŸ‘ πŸ‘Ž

  • User taps πŸ‘ β†’ add a πŸ‘ emoji reaction to that message. The prompt disappears. Nothing else happens.
  • User taps πŸ‘Ž β†’ add a πŸ‘Ž emoji reaction to that message. The prompt disappears. The backend then posts a Concierge reply in a thread on that message ("Please let us know what we can improve."), so the message's "N Replies" thread indicator appears. The user opens the thread and types what could be improved; the backend posts a short acknowledgement.

The πŸ‘/πŸ‘Ž are real emoji reactions β€” after tapping, the standard reaction pill (e.g. πŸ‘ 1) shows on the message, exactly like any other reaction. The prompt should not reappear once the current user has reacted πŸ‘/πŸ‘Ž to that response (it stays resolved across reloads). The agent's thread replies are posted by the backend and arrive via the normal Onyx/Pusher sync β€” the frontend does not author them.

Technical guidance (pointers, not prescriptive)

  • Where to render: add the prompt in src/pages/inbox/report/actionContents/ChatMessageContent.tsx as a sibling right after ReportActionItemMessage (next to the existing ChatActionableButtons). Reuse src/components/ReportActionItem/ActionableItemButtons.tsx.
  • When to show it (gating): only for a Concierge agent reply β€” the report is a Concierge chat (ReportUtils.isConciergeChatReport, actor CONST.ACCOUNT_ID.CONCIERGE); the action is an actual agent response (its originalMessage carries agentZeroRequestID and/or agentZero); and the current user has not already reacted πŸ‘/πŸ‘Ž to it.
  • Adding the reaction: call toggleEmojiReaction(...) from src/libs/actions/EmojiReactions.ts with the emoji object from EmojiUtils.findEmojiByName('+1') (πŸ‘) / findEmojiByName('-1') (πŸ‘Ž).
  • Hiding after answer: check EmojiUtils.hasAccountIDEmojiReacted(currentUserAccountID, ...) so it stays resolved across reloads.
  • Thread indicator (ReportActionItemThread) renders automatically once the backend posts the reply. (Open question for design: should tapping πŸ‘Ž also auto-open the thread, or just leave the indicator for the user to tap?)

Out of scope

  • Any feedback storage or new API β€” the backend owns capturing the signal.
  • The agent's thread replies ("Please let us know…" / the acknowledgement) β€” posted by the backend.
  • Custom @expensify.ai agents β€” this pass is Concierge only.

Acceptance criteria

  • The prompt appears beneath Concierge agent responses (not under user messages or plain Concierge system messages).
  • Tapping πŸ‘ adds a πŸ‘ reaction and hides the prompt; no thread is created client-side.
  • Tapping πŸ‘Ž adds a πŸ‘Ž reaction and hides the prompt.
  • The prompt stays hidden after reload once the user has reacted.
  • Works across web, desktop, iOS, Android, mWeb, and in dark mode.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions