I have absolutely no idea, what to do here. My attempts at “fixing” my telegram notifications all failed, so I reverted back to my existing config and likely I am not going to upgrade beyond 2026.4.0. This is just the worst documented config change I’ve seen in 5+ years of using Home Assistant.
It’s pretty simple. You just change this:
- action: telegram_bot.send_photo
data:
target: !secret telegram_general_chat_group_id
url: http://10.1.1.241:11080/endpoint/@scrypted/webhook/public/<redacted>/takePicture
caption: Driveway
To this:
- action: telegram_bot.send_photo
data:
chat_id: !secret telegram_general_chat_group_id
url: http://10.1.1.241:11080/endpoint/@scrypted/webhook/public/<redacted>/takePicture
caption: Driveway
Agreed. The migration nag has been posted in my HA instance for months now and my OCD brain really hates it. My issue is how telegram groups should be handled. I’m traveling to my other HA instance 700 miles away and dread upgrading there, just to see another nag I can’t do anything about.
You specify the group in the chat_id option like so:
- action: telegram_bot.send_message
data:
chat_id: your_group_id_here # you can use !secrets
title: Some title text here # optional
message: Message text here
https://www.home-assistant.io/integrations/telegram_bot/#action-telegram_botsend_message

At least for now.
The plan is to move to target: & entity_id: in 2026.9. However because of the way it is currently spoecified it would cause issues without this intermediate chat_id step. See: Telegram bot is using non standard config for specifying a target entity id. · Issue #164503 · home-assistant/core · GitHub
I’ve been following this since the notification in HA, but has any progress been made with regards to steps to follow to implement the ‘repair’? I’m just a bit lost as to what exactly needs to be changed (just the YAML telegram bot configuration, or also all the automations, or only the automations?) and how, and the page being referred to (Telegram bot - Home Assistant) isn’t making much sense to me.
Share one of your notification actions and I’ll give you an example of the current format.
Thank you, I really appreciate your support for this (and other) changes! I tried using the help of generative AI to modify a few of my affected automations, although I will still need to fix the new ‘target’ depreciation at a later point in time. It seems to be working as expected, and maybe it could be useful to others following this thread.
Old automation:
- action: notify.telegram_notifier_family
data:
message: "\U0001F514 Doorbell ({{ now().strftime('%X') }})"
continue_on_error: true
enabled: true
# More stuff
# More stuff
# More stuff
# More stuff
# More stuff
# More stuff
- parallel:
# Other actions
# Other actions
# Other actions
# Other actions
# Other actions
# Other actions
- action: notify.telegram_notifier_family
data:
title: "\U0001F514 Doorbell ({{ now().strftime('%X') }})"
message: '{{ generated_content.data }}'
data:
photo:
- url: https://secret_url_for_the_camera.com?token={{state_attr('camera.secret_camera','access_token')}}
caption: "{% if generated_content is defined and generated_content.data
is defined %}\n {{ generated_content.data }}\n{% else %}\n Doorbell
pressed - AI analysis unavailable\n{% endif %}\n"
continue_on_error: true
enabled: true
- choose:
- conditions:
- condition: template
value_template: "{{ generated_content is defined and \n generated_content.data
is defined }}\n"
sequence:
- action: notify.telegram_notifier_family
data:
title: "\U0001F514 Doorbell ({{ now().strftime('%X') }})"
message: '{{ generated_content.data }}'
data:
photo:
- url: https://secret_url_for_the_camera.com?token={{state_attr('camera.secret_camera','access_token')}}
caption: "{% if generated_content is defined and generated_content.data
is defined %}\n {{ generated_content.data }}\n{% else %}\n Doorbell
pressed - AI analysis unavailable\n{% endif %}\n"
continue_on_error: true
- conditions:
- condition: template
value_template: "{{ generated_content is not defined or \n (generated_content
is defined and generated_content.data is not defined) }}\n"
sequence:
- action: notify.telegram_notifier_family
data:
title: "\U0001F514 Doorbell ({{ now().strftime('%X') }})"
message: Doorbell pressed - AI analysis unavailable
data:
photo:
- url: https://secret_url_for_the_camera.com?token={{state_attr('camera.secret_camera','access_token')}}
New automation:
- action: notify.send_message
target:
entity_id: notify.telegram_bot_I_suppose_this_number_is_secret_now
data:
message: "\U0001F514 Doorbell ({{ now().strftime('%X') }})"
continue_on_error: true
enabled: true
# More stuff
# More stuff
# More stuff
# More stuff
# More stuff
# More stuff
- parallel:
# Other actions
# Other actions
# Other actions
# Other actions
# Other actions
# Other actions
- action: telegram_bot.send_photo
data:
entity_id:
- notify.telegram_bot_I_suppose_this_number_is_secret_now
url: https://secret_url_for_the_camera.com?token={{
state_attr('camera.secret_camera', 'access_token')
}}
caption: '{{ generated_content.data | default(''Doorbell pressed - AI analysis
unavailable'') }}'
continue_on_error: true
enabled: true
- choose:
- conditions:
- condition: template
value_template: "{{ generated_content is defined and \n generated_content.data
is defined }}\n"
sequence:
- action: telegram_bot.send_photo
data:
entity_id:
- notify.telegram_bot_I_suppose_this_number_is_secret_now
url: https://secret_url_for_the_camera.com?token={{
state_attr('camera.secret_camera', 'access_token')
}}
caption: '{{ generated_content.data }}'
continue_on_error: true
- conditions:
- condition: template
value_template: "{{ generated_content is not defined or \n (generated_content
is defined and generated_content.data is not defined) }}\n"
sequence:
- action: telegram_bot.send_photo
data:
entity_id:
- notify.telegram_bot_I_suppose_this_number_is_secret_now
url: https://secret_url_for_the_camera.com?token={{
state_attr('camera.secret_camera', 'access_token')
}}
caption: Doorbell pressed - AI analysis unavailable
continue_on_error: true
For the old automation, I used this in my configuration.yaml:
notify:
#Other stuff
#Other stuff
#Other stuff
#Other stuff
- name: telegram_notifier_family
platform: telegram
chat_id: !secret telegram_chat_id_group_family
The new method is almost starting to make sense - even though I don’t particularly agree with it - but there should really be a better explanation offered for migration in the repair pop-up, as it’s too confusing in its current state.
Thanks.
For Telegram “groups” created in configuration.yaml, there are no chat IDs for those. They didn’t move to the Telegram BOT configuration I guess.
What I had to do, to make the nag go away:
I created a new test automation I could edit until I felt like I understood what needed to change.
then
- Make sure there are human-friendly names for each of the Telegram chat IDs in the Telegram BOT integration.
- Edit every automation to change to a “send_notification”, and select at least one target chat ID. In cases where there are groups, add multiple targets.
- Remove the old Telegram notify stuff from configuration.yaml.
There was also a recent change notification for how these automation notifications should be constructed, with yaml examples. For me, this mean’t editing every automation a 2nd time, in yaml, to make that change. I’m not sure why the first edit via the GUI didn’t follow the new format.
So my OCD has been satisfied. What I’ve lost is an easy way to remove someone from a group notifcation. Now I’ll need to edit the automations they’re a part of.
I think I've replaced all Automations with the notify.send_message syntax now, but the notification of this repair is still shown. Do I need to manually clear it, or should it get removed automatically once I have repaired all Automations?
Also, is there a way to search over all Automations to make sure I didn't miss any? As they are not defined in yaml, this seems hard to do...