now allow on-message callbacks, and convenience method to create message response