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.