Ignition 7.8 has pretty much everything you want here, or will soon.
Rosters in the alarm pipeline block are now expressions, so you can dynamically assign which roster to use in the notification block. Two new scripting functions for rosters have also been added (I see we missed getting them into the docs – I’ll fix that today), which are system.alarm.getRosters() and system.alarm.createRoster()
We also have plans to add the ability to modify (add/remove users) rosters through scripting. Not sure where it is in the priority list, but it should make it into an early version of 7.8