Duplex JSON event / action channels