maziggy
3e326adce8
feat(notifications): optional Telegram forum topic via message_thread_id ( #1518 )
...
Telegram groups with Topics enabled always received notifications in the
General topic, since only Bot Token and Chat ID were configurable. Splitting
notifications per printer meant running a separate chat for each one.
The Telegram provider now takes an optional Forum Topic ID - the last number
in a topic's link, t.me/c/1234567890/25 - and routes its messages there. Left
empty, nothing changes.
The value is coerced to an int once in _send_telegram and attached to both the
sendMessage JSON body and the sendPhoto form data. That ordering matters:
Telegram rejects a string message_thread_id in the JSON body while accepting
one in the multipart call, so passing the raw form value through would have
worked for thumbnail notifications and 400'd for plain-text ones. A
non-numeric value is rejected in the form and again server-side before any
request goes out.
No migration - provider config is a JSON blob.
Adds Forum Topic ID plus help text to the Telegram section of the provider
dialog, translated in all 13 locales. Backend tests cover omitted / blank /
int-typed / non-numeric values and both send paths; frontend tests cover the
field being optional, absent for other providers, round-tripping on save, and
blocking save on a bad value.
2026-08-02 09:37:46 +02:00
..
2026-06-06 10:41:28 +02:00
2026-07-29 12:36:45 +02:00
2026-07-01 09:50:30 +02:00
2026-07-29 08:40:42 +02:00
2026-07-22 09:57:27 +02:00
2026-06-04 11:30:26 +02:00
2026-07-18 08:11:44 +02:00
2026-07-18 13:06:01 +02:00
2026-07-29 11:51:30 +02:00
2026-07-19 09:29:54 +02:00
2026-06-03 10:14:57 +02:00
2026-07-21 08:46:02 +02:00
2026-05-30 13:49:09 +02:00
2026-06-20 12:07:20 +02:00
2026-07-16 15:21:47 +02:00
2026-07-17 07:03:10 +02:00
2026-05-22 10:02:41 +02:00
2026-07-27 11:35:27 +02:00
2026-06-06 13:40:56 +02:00
2026-06-25 09:00:57 +02:00
2026-07-21 07:26:19 +02:00
2026-07-28 15:05:28 +02:00
2026-05-24 12:51:24 +02:00
2026-05-15 15:43:37 +02:00
2026-07-18 16:15:09 +02:00
2026-05-08 11:52:42 +02:00
2026-07-18 13:48:14 +02:00
2026-07-28 14:49:50 +02:00
2026-05-24 10:16:30 +02:00
2026-06-05 13:53:26 +02:00
2026-05-29 10:55:41 +02:00
2026-05-24 08:49:21 +02:00
2026-06-09 07:38:59 +02:00
2026-07-18 16:15:09 +02:00
2026-05-28 08:40:43 +02:00
2026-07-29 11:51:30 +02:00
2026-07-09 08:17:59 +02:00
2026-06-06 13:30:13 +02:00
2026-07-13 09:18:17 +02:00
2026-06-19 11:29:07 +02:00
2026-07-27 12:53:43 +02:00
2026-05-08 14:06:40 +02:00
2026-06-20 12:07:20 +02:00
2026-07-18 13:48:14 +02:00
2026-07-24 11:17:19 +02:00
2026-05-16 14:35:47 +02:00
2026-06-02 14:51:08 +02:00
2026-06-02 14:51:08 +02:00
2026-05-22 10:22:14 +02:00
2026-07-12 08:44:53 +02:00
2026-06-22 14:23:30 +02:00
2026-06-17 11:33:23 +02:00
2026-06-17 11:33:23 +02:00
2026-07-29 12:36:17 +02:00
2026-07-14 11:29:56 +02:00
2026-07-14 11:29:56 +02:00
2026-07-14 10:35:58 +02:00
2026-06-02 10:02:17 +02:00
2026-06-02 10:02:17 +02:00
2026-06-02 12:42:16 +02:00
2026-06-20 08:28:44 +02:00
2026-05-21 08:45:59 +02:00
2026-05-15 08:50:37 +02:00
2026-05-15 08:50:37 +02:00
2026-05-15 08:50:37 +02:00
2026-05-15 08:50:37 +02:00
2026-05-08 11:52:42 +02:00
2026-06-25 14:54:27 +02:00
2026-07-28 13:36:55 +02:00
2026-07-11 14:22:31 +02:00
2026-05-17 09:30:02 +02:00
2026-07-18 09:58:21 +02:00
2026-05-20 08:12:17 +02:00
2026-06-09 09:16:36 +02:00
2026-07-28 11:16:22 -05:00
2026-07-09 08:43:59 +02:00
2026-07-16 09:20:12 +02:00
2026-05-21 08:30:17 +02:00
2026-06-20 12:55:24 +02:00
2026-07-17 10:02:19 +02:00
2026-06-08 08:18:13 +02:00
2026-06-11 09:23:03 +02:00
2026-06-25 11:07:29 +02:00
2026-07-18 13:06:01 +02:00
2026-06-22 14:13:44 +02:00
2026-07-20 11:52:18 +02:00
2026-07-20 11:52:18 +02:00
2026-05-25 09:04:47 +02:00
2026-06-02 12:12:54 +02:00
2026-07-07 12:17:46 +02:00
2026-07-05 09:32:02 +02:00
2026-07-07 12:17:46 +02:00
2026-07-18 16:41:15 +02:00
2026-07-20 17:55:56 +02:00
2026-07-28 12:46:31 +02:00
2026-07-07 10:07:47 +02:00
2026-07-19 08:34:38 +02:00
2026-06-09 10:43:07 +02:00
2026-07-24 13:13:04 +02:00
2026-05-24 09:18:38 +02:00
2026-07-17 06:51:51 +02:00
2026-07-20 17:55:56 +02:00
2026-07-22 09:57:27 +02:00
2026-07-18 16:15:09 +02:00
2026-07-20 12:30:39 +02:00
2026-07-18 16:15:09 +02:00
2026-07-14 10:35:58 +02:00
2026-06-17 12:04:57 +02:00
2026-07-02 11:32:22 +02:00
2026-05-14 15:28:41 +02:00
2026-06-12 10:14:06 +02:00
2026-07-22 10:44:05 +02:00
2026-07-22 09:57:27 +02:00
2026-06-28 13:52:05 +02:00
2026-05-12 16:02:24 +02:00
2026-05-08 11:52:42 +02:00
2026-05-08 14:28:41 +02:00
2026-05-08 11:52:42 +02:00
2026-05-18 08:51:27 +02:00
2026-06-17 11:33:23 +02:00
2026-06-25 10:46:57 +02:00
2026-05-12 08:48:30 +02:00
2026-05-20 11:00:54 +02:00
2026-07-15 07:29:16 +02:00
2026-05-08 11:52:42 +02:00
2026-05-22 09:05:25 +02:00
2026-07-14 10:35:58 +02:00
2026-07-27 11:53:59 +02:00
2026-07-24 11:17:19 +02:00
2026-07-29 14:10:38 +02:00
2026-06-18 11:46:07 +02:00
2026-07-17 08:26:23 +02:00
2026-05-24 12:30:12 +02:00
2026-05-12 09:20:53 +02:00
2026-07-29 11:51:30 +02:00
2026-06-27 11:28:00 +02:00
2026-05-15 08:50:37 +02:00
2026-07-15 07:29:16 +02:00
2026-07-18 13:18:59 +02:00
2026-06-22 11:15:39 +02:00
2026-06-05 17:19:16 +02:00
2026-05-30 13:34:10 +02:00
2026-05-30 13:34:10 +02:00
2026-07-05 10:32:13 +02:00
2026-06-02 14:33:20 +02:00
2026-07-29 08:40:42 +02:00
2026-07-02 10:13:01 +02:00
2026-06-03 10:04:37 +02:00
2026-06-11 13:35:20 +02:00
2026-06-27 11:28:00 +02:00