Telegram notify service migration (2025.11) not very clear

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
Screenshot 2026-03-13 at 06-23-54 Telegram bot - Home Assistant

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

  1. Make sure there are human-friendly names for each of the Telegram chat IDs in the Telegram BOT integration.
  2. 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.
  3. 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...