Renvoyer une notification persistante

Bonjour à tous,

Depuis Android 14 l’utilisateur peut balayer (swip) une notification persistante. Dans les faits elle n’est plus persistante. Dans certains cas, il est souhaitable que la notification revienne sur le téléphone tant qu’une alarme est en cours et qu’elle n’est pas acquitté.
Cela peut être utilisé pour guider l’utilisateur sur des actions physique à faire (traitement eau piscine dans mon cas). Tant qu’il ne confirme pas que c’est effectué, la notification reviens.

Cet automate permet d’intercepter le balayage d’une notification persistante. Il faut obligatoirement qu’elle est un TAG.

Recommandations

Pour permettre à l’utilisateur d’acquitter une alarme ou bien de la reporter, je vous invite à ajouter des boutons d’actions qui permettrons d’annuler ces notifications. Autrement elles reviendrons sans fin.
Prévoyez également un effacement automatique quand l’alarme n’est plus d’actualité.

Vous devez savoir utiliser les usr_id, c’est utilisé pour cibler le bon utilisateur. Si vous ne savez pas les gérer le script Notification multi-utilisateur avec présence permet de les prendre automatiquement en compte sans devoir se documenter sur ce sujet.

Code

Pour la mise en production, pensez à modifier le TAG qui sera intercepté. Vous pouvez vous aider du script Notification multi-utilisateur avec présence qui permet de les générer graphiquement sans devoir se documenter sur les notifications avancées.

Code de l'automate "Renvoie des notifications persistante"
alias: Renvoie des notifications persistante
description: >-
  Nécessaire depuis Android 14,  les versions ultérieure ne sont pas concernées

  Renvoie une notification persistante ayant le tag "qualite-eau" venant d'être
  balayée


  Les actions de notification sont ajoutées par le script appelé dans l'automate
trigger:
  - alias: Balayage notification TAG demo-persistant
    platform: event
    event_type: mobile_app_notification_cleared
    event_data:
      tag: demo-persistant
      persistent: "true"
    context: {}
condition: []
action:
  - alias: Renvoi la notification vers le USR_ID
    service: script.notification_avec_presence
    metadata: {}
    data:
      personnes:
        entity_id: "{{ trigger.event.context[\"user_id\"] }}"
      titre: "{{ trigger.event.data.title }}"
      message: "{{ trigger.event.data.message }}"
      resume: "{{ trigger.event.data.subject }}"
      tag: "{{ trigger.event.data.tag }}"
      icone: "{{ trigger.event.data.notification_icon }}"
      couleur: "{{ trigger.event.data.color }}"
      illustration: "{{ trigger.event.data.icon_url }}"
      collant: "{{ trigger.event.data.sticky }}"
      persistant: "{{ trigger.event.data.persistent }}"
      click: "{{ trigger.event.data.clickAction }}"
      actions:
        - action: "{{ trigger.event.data.action_1_key }}"
          title: "{{ trigger.event.data.action_1_title }}"
          uri: "{{ trigger.event.data.action_1_uri }}"
        - action: "{{ trigger.event.data.action_2_key }}"
          title: "{{ trigger.event.data.action_2_title }}"
          uri: "{{ trigger.event.data.action_2_uri }}"
        - action: "{{ trigger.event.data.action_3_key }}"
          title: "{{ trigger.event.data.action_3_title }}"
          uri: "{{ trigger.event.data.action_3_uri }}"
mode: single

Très rapidement je rajouterai des exemples permettant d’effacer ces notifications persistantes. Cela évitera qu’elle reviennent en boucle et que les utilisateurs grognent

2 « J'aime »

Voici les exemples en question pour faire une démo.

C’est un automate qui détecte les réponses des utilisateurs faite via les boutons action d’une notification. Selon la réponse de l’utilisateur, la notification est effacée sur tout les appareils ou uniquement sur les appareils de l’utilisateur ayant répondu.
Il faut déclarer un TAG pour pouvoir cibler le type de notification. Si vous préférez ne pas définir de TAG, cela concernera tout type de notification ayant les même caractéristique.

Je l’ai couplé avec le script Notification multi-utilisateur avec présence en utilisant toutes les options possible.

La notification sera renvoyé avec un user_id. Si vous ne savez pas utiliser les user_id, le script Notification multi-utilisateur avec présence les prends nativement en charge.
Grâce au script Notification multi-utilisateur avec présence, si un utilisateur possède plusieurs appareil, la notification vers un user_id sera envoyé vers tous ses appareils.

Code de l'automate "Demo annulation notification persistante"
alias: Demo annulation notification persistante
description: ""
trigger:
  - alias: "Réponse utilisateurs : Effectué"
    platform: event
    event_type: mobile_app_notification_action
    event_data:
      action: destruction
      tag: demo-persistant
    id: Effacement tout le monde
  - alias: "Réponse utilisateurs : Plus tard"
    platform: event
    event_type: mobile_app_notification_action
    event_data:
      action: refus
      tag: demo-persistant
    id: Effacement ciblé
condition: []
action:
  - alias: Si aucun ID envoi de la démo
    if:
      - condition: not
        conditions:
          - condition: trigger
            id:
              - Effacement tout le monde
              - Effacement ciblé
    then:
      - alias: Envoi de la démo
        service: script.notification_avec_presence
        metadata: {}
        data:
          personnes:
            entity_id:
              - person.joel
          prox_zone:
            entity_id: zone.home
          prox_distance: 200
          timeout: "18:00:00"
          titre: Titre facultatif
          message: >-
            Message persistant en démo<br>Sera renvoyé par un automate après un
            swip<br>Pour le supprimer, répondez à une des questions.
          icone: mdi:fire-alert
          log: true
          actions:
            - action: destruction
              title: Effectué
            - action: refus
              title: Plus tard
            - action: URI
              title: Historique
              uri: settings://notification_history
          resume: Message persistant en démo... dérouler pour plus d'info
          tag: demo-persistant
          collant: true
          persistant: true
          click: https://forum.hacf.fr/t/renvoyer-une-notification-persistante/45372
          couleur: red
          source: >-
            {% if source is defined %}{{ source }}

            {% elif trigger is defined and trigger.from_state is defined %}{{
            trigger.from_state.attributes.friendly_name }} depuis {{
            this.attributes.friendly_name }}

            {% elif trigger is defined and trigger.event and
            trigger.event.data.action is defined %}réponse {{
            trigger.event.data.action }} dans {{ this.attributes.friendly_name
            }}

            {% elif this is defined %}{{ this.attributes.friendly_name }}

            {% else %}déclenchement manuel depuis [nom du script où vous êtes]

            {% endif %}
  - alias: Si ID est "Effacement tout le monde"
    if:
      - condition: trigger
        id:
          - Effacement tout le monde
    then:
      - alias: Effacement notification TOUT les appareils sans localisation
        service: script.notification_avec_presence
        metadata: {}
        data:
          message: clear_notification
          log: true
          tag: demo-persistant
  - alias: Si ID est "Effacement ciblé"
    if:
      - condition: trigger
        id:
          - Effacement ciblé
    then:
      - alias: >-
          Effacement notification TOUT les appareils D'UN SEUL UTILISATEUR sans
          localisation
        service: script.notification_avec_presence
        metadata: {}
        data:
          message: clear_notification
          log: true
          tag: demo-persistant
          personnes:
            entity_id: "{{ trigger.event.context[\"user_id\"] }}"
mode: single

Amusez vous bien avez, j’espère que ça va vous libérer de toutes les parties gestion des notifications dans vos scripts.