Falco
(Falco)
12.Ноябрь.2022 17:44:34
1
Начиная с сегодняшнего дня, уведомление чата Discourse позволяет пользователям отвечать прямо в самом уведомлении
Интерфейс для этого различается на каждой операционной системе, так как интегрируется в родную систему уведомлений.
Умные часы Android Wear OS
Android
Windows
При успешном развитии возможные следующие шаги в рамках этой функции:
Добавление поддержки встроенных реакций
Отправка встроенных ответов как «в ответ на» сообщение, на которое дается ответ
Добавление поддержки встроенных ответов для тем/сообщений
Обработка ошибок при отправке встроенных ответов, будь то сетевые ошибки или ошибки бизнес-логики.
Локализация (i18n) кнопки ответа и плейсхолдера
27 лайков
Это отличное дополнение. Я был так сбит с толку, когда подумал: «вау, динамическое примерное изображение, показывающее моё имя пользователя», а затем понял, что это просто скриншот моего имени пользователя.
Мне нравится, как быстро развивается эта функция чата — я с нетерпением жду подходящего момента, чтобы добавить её в наше сообщество. Несмотря на то, что я люблю Discord, с точки зрения нашего бизнес-кейса мне совсем не хочется управлять ещё одной платформой и дробить наших пользователей.
Было бы здорово иметь возможность выбрать одно или несколько сообщений чата и вынести их в отдельную тему.
9 лайков
Когда появится поддержка iOS? Мне по-прежнему нужно стороннее приложение, чтобы получать мгновенные push-уведомления с контентом.
2 лайка
Falco
(Falco)
12.Ноябрь.2022 23:02:07
7
Не знаю, это зависит от Apple. Мы реализуем поддержку открытых веб-стандартов, и это работает на каждой ОС, которая реализует эту спецификацию, например, Windows, Android, Chrome OS и т. д. Можно лишь надеяться, что когда/если Apple внедрит WebPush в 2023 году, они сделают это правильно, но всё, что мы можем сделать, — это надеяться.
15 лайков
Falco
(Falco)
11.Май.2026 20:12:05
8
Это не работало уже какое-то время, но я добавил поддержку этого более надежным способом
main ← chat-push-quick-reply
merged 03:36PM - 29 Apr 26 UTC
**Previously**, the "Reply" action on chat web push notifications was silently b… roken — the service worker's chat URL regex stopped matching when chat routes moved to `/chat/c/:slug/:id`, and the chat-specific code lived in core with no thread support, URL encoding, or error handling.
**In this update**, generalize the core service worker into a plugin-extensible action registry, move chat reply handling into the chat plugin with proper thread/encoding/fallback support, and convert single-emoji replies into reactions on the source message (falling back to a regular message post on any failure).
## Architecture
Core (`app/views/static/service-worker.js.erb`) now exposes:
```js
self.registerNotificationActionHandler(action, handler);
```
Push payloads can carry `actions` (Web Notifications API format) and `action_data` (an arbitrary object surfaced to the handler at `event.notification.data.actionData`). The click handler dispatches by `event.action` name and falls back to the existing focus-or-open behavior when no handler matches or a handler throws.
`PushNotificationPusher` forwards `actions` / `action_data` when present.
The chat plugin owns its own service worker (`plugins/chat/assets/javascripts/service-worker.js`), registered via `register_service_worker`. It registers a `chat-reply` handler that:
1. Fetches a CSRF token.
2. If the reply is a single emoji grapheme (detected via `Intl.Segmenter`, with a `\p{Extended_Pictographic}` regex fallback), `PUT`s to `/chat/:channel_id/react/:message_id`.
3. Otherwise — or if the reaction request fails — `POST`s to `/chat/:channel_id` with proper `URLSearchParams` encoding and the source `thread_id` if present.
4. If everything fails, opens the channel so the user can retype.
`Chat::Notifier.push_notification_reply_action(chat_message, user)` builds the payload in the user's locale with `channel_id`, `message_id`, and optional `thread_id`.
`Chat::MessageReactor#react!` resolves raw Unicode via `Emoji.unicode_replacements[emoji] || emoji` before validation, so smartwatch quick-reply chips (which send raw Unicode like `👍🏽` or ZWJ sequences) just work. Existing shortcode callers are unaffected.
## Why this matters
Smartwatch notification UIs expose a single "reply" affordance with canned chips that include short text and emoji. The user can't choose between "send as message" and "react"; they tap a chip and a string comes through. Treating a single-grapheme pictographic reply as a reaction matches user intent on the watch UX without any new product surface.
## Test plan
- [ ] On a chat-enabled site, subscribe to web push notifications.
- [ ] Have another user post a message that mentions you, or a watched channel message.
- [ ] On the resulting OS notification, confirm a "Reply" action button appears.
- [ ] Type a text reply and submit — verify it posts as a message in the right channel/thread.
- [ ] Submit a single emoji (e.g. 👍 or 👍🏽 with skin tone) — verify it lands as a reaction on the source message instead of posting a message.
- [ ] Submit a ZWJ sequence (e.g. 👨👩👧) — verify it lands as a reaction (or falls back to message post if not in the emoji DB).
- [ ] Sign out / let session expire and submit a reply — verify the channel opens as a fallback rather than silently failing.
- [ ] Watch via Wear OS / watchOS quick-reply chips and confirm the same behavior end-to-end.
Теперь мы также фиксируем ответы, состоящие из одного эмодзи, как реакцию, и поддерживаем чаты-ветки! .
5 лайков
Вау! Это действительно круто! Планируете ли вы сделать то же самое для тем?
1 лайк
gilles
16.Май.2026 09:32:32
10
Небольшой вопрос: это работает на Apple?
Falco
(Falco)
Разделил(а) эту тему
16.Май.2026 16:02:35
11