Telegram notify service migration (2025.11) not very clear

After upgrading HA I get a warning about “Migration of Telegram notify service”, with the text:

The Telegram notify service has been migrated. A new notify entity per chat ID is available now.

Update all affected automations to use the new notify.send_message action exposed by these new entities and then restart Home Assistant.

This also links to Telegram bot - Home Assistant , which I have read.

Some searching turns up https://www.reddit.com/r/homeassistant/comments/1oq07b5/migration_of_telegram_notify_service/ and 2025.11: Pick, automate, and a slice of pie 🥧 - #21 by Thyraz , both of which seem to struggle with the same issue, but with no solution being forthcoming.

Despite reading this, I do not understand what the integration wants me to do. Hopefully someone here can help me out.

My current configuration sets up some notification combinations, which depending on the message will send information to different telegram users/groups and/or SMS messages, like this subset from the config file:

notify:
 - name: telegram_a
   platform: telegram
   chat_id: !secret TELEGRAM_CHAT_ID_A
 - name: telegram_b
   platform: telegram
   chat_id: !secret TELEGRAM_CHAT_ID_B
 - name: telegram_ha_group
   platform: telegram
   chat_id: !secret TELEGRAM_CHAT_ID_HA_GROUP
 - name: sms_a
   platform: clickatell
   api_key: !secret CLICKATELL_API_A
   recipient: !secret PHONE_NR_A
 - name: alarm_reminder
   platform: group
   services:
     - service: telegram_ha_group
     - service: sms_a
 - name: housekeeping
   platform: group
   services:
     - service: telegram_a

In automations notifications are called as follows (two of numerous different examples):

- alias: "Notify if sensor is offline"
 initial_state: true
 trigger:
   - platform: state
     entity_id:
       - binary_sensor.front_door
       - binary_sensor.fitness_window
       - binary_sensor.upstairs_hallway_motion
     to: 'unavailable'
     for:
       seconds: 300
 action:
   service: notify.housekeeping
   data_template:
     title: "Sensor has gone offline"
     message: "*{{ trigger.to_state.attributes.friendly_name }}* is *offline*"

- id: notify_away_but_alarm_disarmed
 alias: Notify if everyone is away from home, but the alarm is not armed
 initial_state: true
 trigger:
   - platform: state
     entity_id: group.inhabitants
     to: not_home
  condition:
   - condition: template
     value_template: '{{ states("alarm_control_panel.home_alarm") != "armed_away" }}'
 action:
   - service: notify.alarm_reminder
     data:
       message: "Everyone appears to be away from home, but alarm is not armed!"
   - delay:
       seconds: 5
   # Allow arming the alarm directly from Telegram with commands.
   - service: telegram_bot.send_message
     data_template:
       parse_mode: markdown
       target: !secret TELEGRAM_CHAT_ID_HA_GROUP
       message: You can enable the alarm *right now* with the button below 🧙‍♂️.
       disable_notification: false
       inline_keyboard:
         - "Arm the alarm 👍:/arm_alarm"
         - "Don't arm ☹️:/dont_arm_alarm"

What does the integration want me to change exactly?

1 Like

I’m also at a loss - the examples on the documentation don’t look different vs what was there before and I’m not seeing

And it also seems unclear how a new per-chat thing would work in the case where you want to dynamically decide who to reply to - such as with commands (I’ll use the classic ping pong one) which I use for a variety of things that allows someone to request information or subscribe to some alert via bot-commands and then tracks who all should be messaged when a condition is true dynamically

  # This was an example, but is useful as a debug test
  - alias: 'Telegram bot that reply pong to ping'
    trigger:
      - platform: event
        event_type: telegram_command
        event_data:
          command: '/ping'
    action:
      - service: telegram_bot.send_message
        data_template:
          target: '{{ trigger.event.data.user_id }}'
          message: 'pong'

This is what I wrote in the release notes topic: 2025.11: Pick, automate, and a slice of pie 🥧 - #25 by tom_l

The ping-pong example is out-of-date.
The new way is to use event entities.
You can refer to the text repeater example in:
sample-automations-with-inline-keyboards-and-callback-queries

When did that change? It still works and I don’t recall anything saying it is supposed to be changed?

This is the first I’ve heard of that and yes, I have been reading the breaking changes information on release notes.

I don’t use an “inline keyboard”, I much prefer the way of being able to type a keyword and hit enter or tap on a command in a message reply (which can be dynamic)

Telegram bot event entities were introduced in 2025.11.
It is in the release notes:

@hanwg added event entities to the Telegram bot integration. You can use these entities to more easily automate when you get a message, for example! Cool!

The old way of using manual events still work, but event entities are easier to use since you can setup them via the UI.

Not a fan of using the GUI, its much more difficult to keep everything well organized compared to the modular grouping of YAML package files. This way I can keep (for example) the alerts related to network monitoring grouped with the other template sensors that make decisions about network monitoring status and easily maintain them together, or remove them all as “a unit” if I want to pull out that functionality.

I’m not at all a fan of this push to eliminate YAML and force 500 mouse clicks along with illogical grouping by integration instead of functionality for everything.

I also can’t put comments in the GUI like I can in YAML.

1 Like

Does it mean when event entities can be created via UI, they can’t be created via YAML any longer?
I thought YAML and GUI are 2 worlds living together.

And yes, I also prefer YAML because I totally lose any overview if I would create a lot of things via GUI.

You thought wrong. Here is the clarification: The future of YAML - Home Assistant

You will still be able to use the telegram bot actions in YAML but the setup of the integration will be in the UI.

Except you cant actually use them with the telegram actions - yet. You can only use the entities with the generic notify action. The telegram actions are the only ones that support advanced features like in-line keyboard responses and at the moment they require you to use the numeric chat id, not the event entity.

So unless you are just sending plain messages with no advanced features then don’t update your actions until this is resolved. Just ignore the repair. You have six months before this becomes an issue.

Or if you only have a few actions you could just edit them now to use the chat id and later to use the event entity. Personally I’m not making this edit twice as I have nearly 300 actions to edit.

To pile on a little here, I’m also confused by this:

Clicking on the notification produces this:

Clicking on “Learn more” sends me to this link:

https://www.home-assistant.io/integrations/telegram_bot#notifiers

Which so far has not been useful for me to update my configuration. I’m having some difficulty comparing what’s at that link to what I see in my automation via the GUI. Not clear what needs to change.

Like the OP, I have some Telegram names and chat IDs defined in the “notify:” section of configuration.yaml. I also have some groups of Telegram chat IDs defined there.

Is there any other reference that more clearly shows what needs to be changed? I would prefer to keep my Telegram groups and reference those in some of my automations, so both individual chat IDs and groups need to be covered.

1 Like

Show an example of your current action.

In my configuration.yaml:

notify:
  - name: mark
    platform: telegram
    chat_id: nnnnnnnnnnn
  - name: meredith
    platform: telegram
    chat_id: nnnnnnnnnnn
  - name: dylan
    platform: telegram
    chat_id: nnnnnnnnnnn
  - name: ncfamily
    platform: group
    services:
      - service: mark
      - service: meredith
      - service: dylan

In an automation:

To a single person:

action: notify.mark
data:
  message: Test from Home Assistant

To a group:

action: notify.ncfamily
data:
  message: "{{ trigger.calendar_event.summary }}"

I’m also totally lost, after reading the notification and all the links you provided. I havbe no clue what I am supposed to change.
I have a similar config to @abreuma677

This is all as clear as mud. I too have the same message and have spent half the afternoon trying to work out what needs to be updated. ChatGPT isn’t much help either as it’s examples work on the ‘old’ setup, with all the configuration to be added to configuration.yaml.

This is my configuration.yaml:

notify:
  - platform: telegram
    name: Telegram_John
    chat_id: xxxxxxxxxx
  - platform: telegram
    name: Telegram_Lydia
    chat_id: xxxxxxxxxx
  - platform: group
    name: Telegram_ALL
    services:
      - service: telegram_john
      - service: telegram_lydia

And my automations.yaml:

- id: gen24_to_startup
  alias: "GEN24 Inverter changed to Startup"
  trigger:
    - platform: state
      entity_id: sensor.alboran_gen24_inverter_state
      to: "Startup"
  action:
    service: notify.Telegram_ALL
    data:
      message: "GEN24 Inverter state changed to Startup."

The ‘Telegram bot’ integration is setup and includes the people with their chat ids.

Can anyone re-post the above indicating exactly what needs updating?

Thanks to anyone that can give some clarity on this.

I think I have finally worked it out, but would be happy if someone could confirm that what I have done is correct:

  1. Remove the ‘notify:’ section from automations.yaml.

  2. In automations.yaml I changed the ‘action:’ part to:

- id: gen24_to_startup
  alias: "GEN24 Inverter changed to Startup"
  trigger:
    - platform: state
      entity_id: sensor.alboran_gen24_inverter_state
      to: "Startup"
  action:
    - service: notify.send_message
      target:
        entity_id: notify.telegram_bot_1234567890_123456789
      data:
        message: "GEN24 Inverter state changed to Startup."

Where ‘entity_id: notify.telegram_bot_1234567890_123456789’ is the entity from ‘Settings → Devices & services → Entities’. Then search for Telegram and choose the person, and then click the cog wheel to show the full entity ID. I presume the first set of numbers are the chat ID and know that the second is the user ID.

And to send to multiple people, though I haven’t tested it:

  action:
    - service: notify.send_message
      target:
        entity_id: 
          - notify.telegram_bot_1234567890_123456789
          - notify.telegram_bot_1234567890_987654321
      data:
        message: "GEN24 Inverter state changed to Startup."

Does anyone who how to define groups so we don’t have to enter every ‘entity_id’ each time?

What about this action? How to migrate that it would also show photo from URL in the message?

  - service: notify.telegram_skupna
    data:
      title: Zaznano gibanje v Žanovi sobi
      message: Zaznano gibanje v Žanovi sobi
      data:
        photo:
        - url: http://192.168.28.55:5000/api/zan/latest.jpg
          caption: Žan - gibanje

I can not figure out how to do this in the new way.

Groups are not supported yet but there’s a ongoing change for that.

1 Like

Do you know the pull request on Github? Is there already an estimated date/version of implementation?

Thank you.

Not sure when it will be available but I guess earliest is Jan 2026 release.