You should use custom actions:
class ActionGreet(Action):
def name(self):
return 'action_greet'
def run(self, dispatcher, tracker, domain):
if tracker.get_slot('firstname'):
firstname = tracker.get_slot('firstname')
dispatcher.utter_message(f'Hello, {firstname}')
else:
dispatcher.utter_message(f'Hello')
return []