iOS Notification Action Buttons

Hello -

I have deployed a notification that has two action button options…yet when I receive the notification on my phone, there are no buttons to click, even with a long press. The only thing that happens is the notification turns WHITE when I long press.

My code for the notification is below…any guidance or suggestions would be greatly appreciated.

iOS - 26.01
iPhone Pro Max 14

Squid

alias: Enhanced Trash Reminder
description: Reminds about all waste collections for tomorrow
triggers:
  - trigger: time
    at: "19:00:00"
conditions:
  - condition: template
    value_template: >-
      {% set tomorrow = (now().date() + timedelta(days=1)) %} {% set upcoming =
      state_attr('sensor.upcoming_waste', 'upcoming') %} {% if upcoming %}
        {% set tomorrow_collections = upcoming | selectattr('date', 'eq', tomorrow.isoformat()) | list %}
        {{ tomorrow_collections | length > 0 }}
      {% else %}
        false
      {% endif %}
actions:
  - action: notify.mobile_app_sids_iphone
    metadata: {}
    data:
      title: >-
        {% set tomorrow = (now().date() + timedelta(days=1)) %} {% set upcoming
        = state_attr('sensor.upcoming_waste', 'upcoming') %} {% set
        tomorrow_collections = upcoming | selectattr('date', 'eq',
        tomorrow.isoformat()) | list %} {% set count = tomorrow_collections |
        length %} {% if count == 1 %}
          🗑️ Trash Reminder
        {% elif count == 2 %}
          🗑️♻️ Waste Collection Reminder
        {% else %}
          🗑️ Multiple Collections Tomorrow
        {% endif %}
      message: >-
        {% set tomorrow = (now().date() + timedelta(days=1)) %} {% set upcoming
        = state_attr('sensor.upcoming_waste', 'upcoming') %} {% if upcoming %}
          {% set tomorrow_collections = upcoming | selectattr('date', 'eq', tomorrow.isoformat()) | list %}
          {% if tomorrow_collections %}
            {% set types = tomorrow_collections | map(attribute='type') | list %}
            {% set count = types | length %}
            {% if count == 1 %}
              Tomorrow, your {{ types[0] }} gets picked up. Please take it out tonight! 🌙
            {% elif count == 2 %}
              Tomorrow, both {{ types[0] }} and {{ types[1] }} get picked up. Don't forget to put both bins out tonight! 📦🗂️
            {% else %}
              Tomorrow, {{ types | join(', ') }} get picked up. Make sure all bins are out tonight! 📦📦📦
            {% endif %}
          {% else %}
            Error: No collections found for tomorrow.
          {% endif %}
        {% else %}
          Error: Unable to access waste collection data.
        {% endif %}
      data:
        push:
          sound: default
          badge: 1
        action_data:
          actions:
            - action: MARK_DONE
              title: ✅ Bins are out
            - action: SNOOZE
              title: ⏰ Remind me in 1 hour
mode: single

BUMP

Anyone have a suggestion to try? Would really like to know if the action buttons are supported in iOS 26

I also would like to know how actionable notifications work on iOS

Please remove action_data.

This should work:

      data:
        push:
          sound: default
          badge: 1
        actions:
          - action: MARK_DONE
            title: ✅ Bins are out
          - action: SNOOZE
            title: ⏰ Remind me in 1 hour

@ReneNulschDE

I’ve removed the acton_data and still do not receive any button on iOS.

Please post your complete formatted code again…

@ReneNulschDE
Sorry For the Slow Response…did not get a notification…

Here’s the code for the notification and actions…

Really appreciate your assistance with this!

Squid :squid:

alias: Enhanced Trash Reminder
description: Reminds me about all waste collections for tomorrow
triggers:
  - trigger: time
    at: "19:00:00"
conditions:
  - condition: template
    value_template: >-
      {% set tomorrow = (now().date() + timedelta(days=1)) %} {% set upcoming =
      state_attr('sensor.upcoming_waste', 'upcoming') %} {% if upcoming %}
        {% set tomorrow_collections = upcoming | selectattr('date', 'eq', tomorrow.isoformat()) | list %}
        {{ tomorrow_collections | length > 0 }}
      {% else %}
        false
      {% endif %}
actions:
  - action: notify.mobile_app_iphone
    metadata: {}
    data:
      title: >-
        {% set tomorrow = (now().date() + timedelta(days=1)) %} {% set upcoming
        = state_attr('sensor.upcoming_waste', 'upcoming') %} {% set
        tomorrow_collections = upcoming | selectattr('date', 'eq',
        tomorrow.isoformat()) | list %} {% set count = tomorrow_collections |
        length %} {% if count == 1 %}
          🗑️ Trash Reminder
        {% elif count == 2 %}
          🗑️♻️ Waste Collection Reminder
        {% else %}
          🗑️ Multiple Collections Tomorrow
        {% endif %}
      message: >-
        {% set tomorrow = (now().date() + timedelta(days=1)) %} {% set upcoming
        = state_attr('sensor.upcoming_waste', 'upcoming') %} {% if upcoming %}
          {% set tomorrow_collections = upcoming | selectattr('date', 'eq', tomorrow.isoformat()) | list %}
          {% if tomorrow_collections %}
            {% set types = tomorrow_collections | map(attribute='type') | list %}
            {% set count = types | length %}
            {% if count == 1 %}
              Tomorrow, your {{ types[0] }} gets picked up. Please take it out tonight! 🌙
            {% elif count == 2 %}
              Tomorrow, both {{ types[0] }} and {{ types[1] }} get picked up. Don't forget to put both bins out tonight! 📦🗂️
            {% else %}
              Tomorrow, {{ types | join(', ') }} get picked up. Make sure all bins are out tonight! 📦📦📦
            {% endif %}
          {% else %}
            Error: No collections found for tomorrow.
          {% endif %}
        {% else %}
          Error: Unable to access waste collection data.
        {% endif %}
      data:
        push:
          sound: default
          badge: 1
          actions:
            - action: MARK_DONE
              title: ✅ Bins are out
            - action: SNOOZE
              title: ⏰ Remind me in 1 hour
mode: single

ACTIONS

alias: Waste Reminder Actions
description: Handle quick actions from waste reminder
triggers:
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: MARK_DONE
  - trigger: event
    event_type: mobile_app_notification_action
    event_data:
      action: SNOOZE
conditions: []
actions:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ trigger.event.data.action == 'MARK_DONE' }}"
        sequence:
          - action: notify.mobile_app_new_iphone
            data:
              message: Great! Your bins are ready for pickup tomorrow. 👍
              title: Bins Ready ✅
      - conditions:
          - condition: template
            value_template: "{{ trigger.event.data.action == 'SNOOZE' }}"
        sequence:
          - delay: "01:00:00"
          - action: notify.mobile_app_sids_new_iphone
            data:
              title: "🔔 Reminder: Bins Still Need to Go Out"
              message: >-
                {% set tomorrow = (now().date() + timedelta(days=1)) %} {% set
                upcoming = state_attr('sensor.upcoming_waste', 'upcoming') %} {%
                set tomorrow_collections = upcoming | selectattr('date', 'eq',
                tomorrow.isoformat()) | list %} {% set types =
                tomorrow_collections | map(attribute='type') | list %} Don't
                forget: {{ types | join(' and ') }} collection tomorrow!
mode: parallel

You need to fix the spacing. push and actions need to be on the same level.

     data:
       push:
         sound: default
         badge: 1
       actions:
         - action: MARK_DONE
           title: ✅ Bins are out
         - action: SNOOZE
           title: ⏰ Remind me in 1 hour

here is an example that I use for my notification (using “waste collection schedule” component as source).

triggers:
  - at: "19:00:00"
    trigger: time
conditions:
  - condition: template
    value_template: "{{ 'in 1 days' in states('sensor.next_collection') }}"
actions:
  - target:
      entity_id: input_boolean.tonne_bestaetigt
    action: input_boolean.turn_off
  - data:
      title: 🗑️ Tonnenkontrolle
      message: "{{ states('sensor.next_collection') }} - Bitte Tonne rausstellen!"
      data:
        actions:
          - action: TONNE_BESTAETIGT
            title: ✅ Draußen
        push:
          sound:
            name: default
            critical: 1
            badge: 1
    action: notify.mobile_app_iphone_16_2_von_rene

Adjusting the spacing did the trick…

Thank you for all of the assistance!!

Squid :squid: