site-kit-wp: Implement HaTS survey triggers for users who answers "Other" to any User Input question
Feature Description
Since we’re removing the text field next to the “Other” in all the User Input questions in #6181, we should implement surveys for users who answer other to get more information on their choice. This can be a single survey or multiple surveys, whichever is best UX.
Related Asana Task: https://app.asana.com/0/1201538818998708/1203393984679795
Do not alter or remove anything below. The following sections will be managed by moderators only.
Acceptance criteria
- A survey should be triggered for users who answer “Other” to at least one of the User Input questions.
- This should only be triggered once user completes answering the questions.
- This should also trigger after user edits user input question and at least one of the answers changes to “Other”.
- For sites with multiple admins, the survey will only appear to the admin who answered the question. This is regardless whether the question is user or site specific.
- Since there are three user input questions and user can answer Other to any combination of them, one of the following trigger IDs should be used based on the answer.
userInput_answered_other__purposeuserInput_answered_other__postFrequencyuserInput_answered_other__goalsuserInput_answered_other__purpose_postFrequencyuserInput_answered_other__purpose_goalsuserInput_answered_other__postFrequency_goalsuserInput_answered_other__purpose_postFrequency_goals
- The the survey returned from the Service will be queued and shown to the user as part of #6306.
Implementation Brief
- Create a new action
maybeTriggerUserInputSurveyaction inCORE_USERstore.- Get the current user input settings using the
getUserInputSettingsselector. - If there is at least one submitted answer contains
other-- Construct one of the survey
triggerIDmentioned in the AC. - Using the
triggerSurveyaction fromCORE_USERtrigger the survey for the user using the aforementionedtriggerID.
- Construct one of the survey
- Get the current user input settings using the
- Update the
saveUserInputSettingsaction ofCORE_USER:- If there was no error, before setting
isSavingto false,yieldthemaybeTriggerUserInputSurveyaction.
- If there was no error, before setting
- In addition to triggering the survey, we need to also make sure any existing outdated surveys in the
Survey_Queueis dequeued. For that:- In
Google\Site_Kit\Core\User_Input\REST_User_Input_Controllerclass:- Add a protected
$survey_queueinstance variable which will be received and assigned in the constructor. - In
POST:core/user/data/user-input-settingsrest route:- Before returning the return value of
rest_ensure_responsecheck if it’s aWP_REST_Response. - Dequeue
user_input_answered_other_surveysurvey using the$survey_queue->dequeue( survey_id ).- (Note: This is the preliminary
survey_idfor alluserInput“other” surveys )
- (Note: This is the preliminary
- Before returning the return value of
- Add a protected
- In
Google\Site_Kit\Core\User_Input\User_Inputclass:- In the constructor, pass a new
Survey_Queueinstance while creating theREST_User_Input_Controllerclass instance.
- In the constructor, pass a new
- In
Test Coverage
- Add tests for
maybeTriggerUserInputSurveyaction. - Add test coverage for
saveUserInputSettingsaction. - Add test coverage for the above PHP changes.
QA Brief
- Set up a new site, install, and connect Site KIt.
- Using the tester plugin, enable the
userInputfeature flag. - Go to the
/wp-admin/admin.php?page=googlesitekit-user-inputscreen. Answer the user input questions and answer “Other” for one or more questions. - In the User Input preview screen, open your browser developer tools and go to the “Network” tab. Ensure that network log recording is on so that network requests persist even though you get navigated to a different screen.
- Click “Save”.
- Ensure that you see a request to the
/wp-json/google-site-kit/v1/core/user/data/survey-trigger?_locale=userendpoint that has{"data":{"triggerID":"userInput_answered_other__[TRIGGER_ID]"}}in payload. - The
TRIGGER_IDplaceholder above should include slug of questions that you have answered “Other” for, according to the ACs. - Answer the questions again but do not choose “Other” this time. Verify that the above network request is not made in this case.
Changelog entry
- Implement HaTS survey triggers for users who answers “Other” to any User Input question
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 25 (2 by maintainers)
Commits related to this issue
- Merge branch 'develop' into enhancement/#6180-user-input-survey. — committed to google/site-kit-wp by nfmohit a year ago
- Merge pull request #7191 from google/enhancement/#6180-user-input-survey Implement survey for User Input — committed to google/site-kit-wp by eugene-manuilov a year ago
- Merge pull request #7222 from google/enhancement/#6180-user-input-survey-followup — committed to google/site-kit-wp by aaemnnosttv a year ago
Thanks @kuasha420 – I tweaked the name of the survey id but otherwise this looks good to me 👍
IB ✅
@aaemnnosttv Thank you for the review but this was the previous iteration of the IB before we had the call.
As par our slack discussion, I’ve updated the IB to unconditionally dequeue the
userInput_answered_othersurvey from theSurvey_Queueafter User Input Settings is saved. Any potential survey will get triggered afterwards from client-side, so as long as service keeps returning the (incomplete) survey, this approach should be perfectly fine and also make sure any pending survey is dequeued when the new answer doesn’t contain other.Please have a look. I’ll also keep @eugene-manuilov assigned here so he can confirm the detail about the service related detail I mentioned above.
Thank you both for all your help, I feel we’re very close to finalizing this!
Cheers.
@kuasha420 👋 Since we’ll be coming back to KMW and UIV2 over the next few sprints, I’m going to assign this one over to you for an IB so we can pick it up soon. Thanks!
@bethanylang This one is still blocked by 6306, however we had a call just before the break and made some decisions and progress on it. There’s a doc about it in the open slack channel and @aaemnnosttv is working on adding preliminary ACs to #6306. Once it moves forward, we will revisit this issue. Cheers!
@kuasha420 Today @aaemnnosttv @eugene-manuilov and I discussed in a dashboard sharing survey related meeting some enhancements that we need to make to the survey triggering infrastructure to support event-based surveys better. This will also affect how to trigger this survey here. I would therefore suggest to pause the work on this issue until we have finalized that approach. I will loop you in that conversation.
@bethanylang Added label!