Question for a better way of automation

Hi All,

I have a lot of notifications that will be send. So I created a script to make things easier.
This is the script:

mobile_ha_engine:
  alias: "Notify Notify Mobile App Engine"
  description: "Notify App Mobile Engine to send messages to my mobile phone"
  mode: parallel

  variables:
    message_var: "{{ '' if message is not defined else message }}"
    title_var: "{{ 'not set' if title is not defined else title }}"
    subtitle_var: "{{ 'not set' if subtitle is not defined else subtitle }}"
    thread_var: "{{ 'home_assistant' if thread_id is not defined else thread_id }}"
    sound_var: "{{ 'none' if sound_name is not defined else sound_name }}"
    critical_var: "{{ 0 if critical_id is not defined else critical_id }}"
    volume_var: "{{ 0 if volume_level is not defined else volume_level }}"
    category_var: "{{ 'default' if category is not defined else category }}"

  sequence:
    - service: notify.mobile_app_peter_iphone
      data:
        message: "{{ message_var }}"
        title: "{{ title_var }}"
        data:
          subtitle: "{{ subtitle_var }}"
          push:
            thread-id: "{{ thread_var }}"
            sound:
              name: "{{ sound_var }}"
              critical: "{{ critical_var }}"
              volume: "{{ volume_var }}"
            category: "{{ category_var }}"

From different automations those variables will be send to the script:

message
title
subtitle
thread_id
sound_name
critical_id
volume_level
category

What I want to make script better to leave parts away when variable is empty.
Is that possible with {% macro %}?
When category, volume, critical, name, subtitle is not given, so variable is empty then leave that part away.