Your first approach looks decent but may be improved. Rendering a UI for a corresponding user task is the way to go.
However, "completing" a UserTask via a Message Event is unnecessarily complex. Never Versions of the ZeeBeeClient allow the completion of UserTasks directly. See https://javadoc.io/doc/io.camunda/zeebe-client-java/8.6.6/io/camunda/zeebe/client/ZeebeClient.html#newUserTaskCompleteCommand(long)