Improve unified support conversation flow - #23238
Conversation
…ive CTA Add periodic and on-resume refresh for the conversations list and open chat, an adaptive reply CTA, an "Ongoing" status, and a smaller bot typing indicator. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Generated by 🚫 Danger |
|
|
After a Happiness Engineer ticket reply is sent successfully, show a
transient snackbar ("Your reply has been sent. Check your email for
updates.") so the user knows it worked. Bot chat sends are excluded.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
Collapse the auto-refresh guards into a single local flag so the function stays within the ReturnCount limit without tripping ComplexCondition. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
🤖 Build Failure AnalysisThis build has failures. Claude has analyzed them - check the build annotations for details. |
Delete the leftover translations for he_support_status_waiting_for_support and he_support_status_waiting_for_user across all locales. Their base strings were removed when the statuses were collapsed into "Ongoing", and lint flags translations without a base string (ExtraTranslation = error). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## trunk #23238 +/- ##
==========================================
- Coverage 37.92% 37.91% -0.02%
==========================================
Files 2334 2334
Lines 126984 127043 +59
Branches 17589 17614 +25
==========================================
+ Hits 48162 48166 +4
- Misses 74888 74943 +55
Partials 3934 3934 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
@adalpari I've not tested this yet, but Claude found a couple of issues that look like they should be addressed. |
Scope both auto-refresh timers to the STARTED lifecycle so they stop polling while backgrounded, switch the reply-sent confirmation to a conflated Channel so the event can't be dropped or block the send's finally block, and guard the silent list refresh against pull-to-refresh races. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Got it! I've fixed the three points set as "medium". Only the first one was a real worry though |
|
@adalpari I'm trying to test this but when I send a message I get a "Something went wrong" snackbar.
Inspection shows a 200 response with a lengthy body: |
|
That's a non-expected response. It's odd that your original message is not included in the response... Is it reproducible 100% of the time? |
Yes. |
What's your user type? |
|
Admin. |
Upgrade the wordpress-rs binding to the PR build and adapt to its API changes: handle the new MediaFileUnreadable / ConnectionError result variants, and switch the comments list-query param to the dedicated WpApiParamCommentsStatus type (with native All/Approve/Hold/Spam/Trash variants replacing the previous Custom(...) workaround). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…n-screen-updates # Conflicts: # WordPress/src/main/java/org/wordpress/android/ui/commentsrs/CommentsRsListTab.kt # gradle/libs.versions.toml # libs/fluxc/src/main/java/org/wordpress/android/fluxc/network/rest/wpapi/media/MediaRSApiRestClient.kt
Project dependencies changeslist! Upgraded Dependencies
rs.wordpress.api:android:1586-61c642e514bd58492e308c908d80ef145b74e9bf, (changed from 0.7.0)
rs.wordpress.api:kotlin:1586-61c642e514bd58492e308c908d80ef145b74e9bf, (changed from 0.7.0)tree +--- project :libs:fluxc
-| \--- rs.wordpress.api:android:0.7.0
-| +--- com.squareup.okhttp3:okhttp:5.4.0 (*)
-| +--- com.squareup.okhttp3:okhttp-tls:5.4.0
-| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.21 -> 2.4.10 (*)
-| | +--- com.squareup.okio:okio:3.17.0 (*)
-| | \--- com.squareup.okhttp3:okhttp:5.4.0 (*)
-| +--- net.java.dev.jna:jna:5.19.1
-| +--- rs.wordpress.api:kotlin:0.7.0
-| | +--- com.squareup.okhttp3:okhttp:5.4.0 (*)
-| | +--- com.squareup.okhttp3:okhttp-tls:5.4.0 (*)
-| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2 -> 1.11.0 (*)
-| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.3.21 -> 2.4.10 (*)
-| \--- org.jetbrains.kotlin:kotlin-stdlib:2.3.21 -> 2.4.10 (*)
+| \--- rs.wordpress.api:android:1586-61c642e514bd58492e308c908d80ef145b74e9bf
+| +--- com.squareup.okhttp3:okhttp:5.4.0 (*)
+| +--- com.squareup.okhttp3:okhttp-tls:5.4.0
+| | +--- org.jetbrains.kotlin:kotlin-stdlib:2.1.21 -> 2.4.10 (*)
+| | +--- com.squareup.okio:okio:3.17.0 (*)
+| | \--- com.squareup.okhttp3:okhttp:5.4.0 (*)
+| +--- net.java.dev.jna:jna:5.19.1
+| +--- rs.wordpress.api:kotlin:1586-61c642e514bd58492e308c908d80ef145b74e9bf
+| | +--- com.squareup.okhttp3:okhttp:5.4.0 (*)
+| | +--- com.squareup.okhttp3:okhttp-tls:5.4.0 (*)
+| | +--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2 -> 1.11.0 (*)
+| | \--- org.jetbrains.kotlin:kotlin-stdlib:2.3.21 -> 2.4.10 (*)
+| \--- org.jetbrains.kotlin:kotlin-stdlib:2.3.21 -> 2.4.10 (*)
-\--- rs.wordpress.api:android:0.7.0 (*)
+\--- rs.wordpress.api:android:1586-61c642e514bd58492e308c908d80ef145b74e9bf (*) |
|
@nbradbury I've made some changes in the RS layer. Could you give it another try? |
|
This seems to be working well now. I asked Claude for a review, and I think the auto-refresh and spinner issues likely should be addressed. |
That's on its way (235388-ghe-Automattic/wpcom). Thanks for flagging it! |
A conversation poll started before a reply send could finish afterwards and restore a pre-reply snapshot, making the reply vanish right after the "reply sent" confirmation. Add a generation counter bumped when a send begins so a stale poll drops its result, plus an in-flight flag so overlapping polls can't apply out of order. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The in-button spinner used onPrimary while the button is forced into its disabled state (greyed container), leaving it invisible in both themes. Tint it with the Material 3 disabled content color so it reads as the greyed-out control the user expects. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Both addressed. Thanks! About the other "race condition" mentioned. I think it's better to keep it that way because the list for the server response will always overwrite a possible local change added optimistically to the list. So, that's expected. |
nbradbury
left a comment
There was a problem hiding this comment.
Looks good! I'll approve so you can merge once the wp-rs hash is changed.




TL/DR
In this PR we are addressing multiple feedback we got from the support uniffied conversation testing.
We have fixed some bugs, like having problems getting answers in real-time, but aso there are some improvements like better states, text sent confirmation messages, better CTAs captions, and so on
Description
Several UI and behaviour improvements to the new (unified) support
conversation flow, gated behind the
MODERN_SUPPORTexperimental feature:list now refresh silently every minute (no pull-to-refresh spinner), and
both refresh again whenever the screen returns to the foreground
(
onStart), so Happiness Engineer replies show up in the app without useraction. Background refreshes never surface an error or clobber an
in-flight reply.
successfully, a transient snackbar confirms it — "Your reply has been
sent. Check your email for updates." Bot chat sends are excluded, and a
failed send still shows the existing error snackbar instead.
open,new,hold, andpendingconversations now display a single Ongoing badge, hiding the internal
Zendesk statuses that were previously exposed as "Waiting for Support" /
"Waiting for User".
button (and the reply form title) now reads "Reply" when the last
message is from support, and "Add more info" when the last message is
the user's own or the bot's (e.g. a freshly created ticket). While the
conversation is still loading the button shows a spinner instead of a
premature, incorrect label.
were reduced in size.
Related Linear issues
Testing instructions
Requires the
MODERN_SUPPORTexperimental feature enabled(Me → App Settings → Experimental Features), and a WordPress.com account
with existing support conversations.
Basically, start a new support conversation with the bot. Then at some point ask it to "talk to a human" and move the conversation to Zendesk. Answer from Zendesk, resolve the ticket and check the flow works. Report any improvements you believe could be useful.
NOTE: if you don't want to ask for Zendesk permissions (you can get one-day permissions) send me a DM, and I'll follow the ticket.