В бете Telegram для macOS к диктовке — набору сообщения голосом прямо в поле ввода — добавили исправление надиктованного текста ИИ-редактором. В сборке 13.1.0.283431 от 1 ноября есть кнопка «Enhance» с пунктами «Fix Grammar», «Enhance Style» и «AI Editor…», переключатель автоматической пунктуации и настройка того, что делает в поле ввода ⌘R: диктует текст или записывает голосовое. Сама диктовка лежит в открытом коде клиента, но включена там только в отладочных сборках, а исправления ИИ в открытом коде нет совсем. Касается это тех, кто пишет с Mac. В открытом коде речь распознаёт встроенный распознаватель Apple, а в бете появился запасной путь через серверы Telegram — с бесплатным лимитом, сверх которого нужен Premium.
Что появилось в бете
Диктовка в клиенте для macOS устроена как продолжение записи голосового: нажав кнопку записи, не отпускайте мышь и потяните влево — подсказка внизу так и пишет, «← Swipe to dictate». Сдвиг влево должен быть больше, чем вверх, иначе запись просто закрепится. Вместо голосового сообщения речь превращается в текст, а сама запись удаляется. Во время распознавания внизу написано «Transcribing. Click anywhere to stop.»; готовый текст в открытом коде показывается отдельной панелью, откуда его можно отправить сразу или дописать в конец поля ввода и поправить. Язык можно выбрать вручную или оставить «Automatic». О диктовке в бете 283318 писали ещё 15 октября; в Android такую же расшифровку до отправки показывали и убрали.
Новое в бетах с 24 октября (сборка 283377) — исправление того, что надиктовано. Строки 283431:
| Строка | Что это |
|---|---|
| «Enhance» | кнопка у надиктованного текста; подсказка к ней — «Fix punctuation and grammar in the dictated text» |
| «Fix Grammar» | исправить пунктуацию и грамматику |
| «Enhance Style» | переписать текст в одном из стилей |
| «AI Editor…» | открыть полный ИИ-редактор |
| «Enhancing…» | текст в работе |
| «Automatic Punctuation» | переключатель автоматической пунктуации |
| «What ⌘R does in the message field. Automatic dictates when the field has text and records a message when it is empty.» | настройка ⌘R: при режиме «Automatic» сочетание диктует, если в поле уже есть текст, и записывает голосовое, если поле пустое |
| «The language you speak while dictating. Automatic uses this chat's language and your system languages.» | язык диктовки: «Automatic» берёт язык чата и языки системы |
Выбранный стиль клиент запоминает (kChatDictationEnhanceStyle). Судя по пункту «AI Editor…», это те же стили, что у ИИ-редактора в поле ввода, который Telegram выпустил в апреле: исправить грамматику, перевести, переписать в стиле «Formal», «Short», «Zen», «Corp» и других. Подпись к нему в официальном посте — ИИ-функции работают на сети Cocoon.
Видна ли кнопка уже сейчас, по сборке не понять. В открытом коде диктовка выключена в бета- и релизных сборках условием компиляции и работает только в отладочной; включена ли она в 283431, из бинарника не следует, хотя строки и классы на месте.
Что делать
- Где искать. Бета приходит автообновлением бета-версии Telegram для macOS; список сборок — в фиде обновлений. В стабильной 13.1.0 (283357) от 20 октября движок диктовки уже есть, но строк «Enhance», «Automatic Punctuation» и настройки ⌘R нет, а подсказка при записи — «← Swipe to transcribe».
- Дать доступ. Диктовке нужны два разрешения macOS: «Системные настройки» → «Конфиденциальность и безопасность» → «Микрофон» и там же «Распознавание речи». Без второго клиент выводит «Telegram needs Speech Recognition access to turn your voice into text».
- Проверить язык. Если ни один из языков системы не поддерживается распознавателем Apple, диктовка отвечает «Dictation is not available for your current input language.» Язык можно выбрать вручную вместо «Automatic».
- Помнить про ⌘R. Сейчас ⌘R в Telegram для macOS начинает запись голосового или видеосообщения; в бете у сочетания появится выбор, и в режиме «Automatic» при непустом поле оно начнёт диктовку, а не запись.
Как распознаётся речь
Распознавание в открытом коде целиком на стороне Apple. На macOS 26 клиент берёт новый движок SpeechAnalyzer, если модель языка уже установлена; если нет — начинает её загрузку в фоне, а эту диктовку отдаёт прежнему SFSpeechRecognizer. На более старых системах работает только SFSpeechRecognizer. Запрос помечен как диктовка, и если для языка есть модель на устройстве, клиент требует распознавания только на Mac; на macOS 13 и новее знаки препинания расставляет сам распознаватель.
В режиме «Automatic» язык не угадывается заранее: из языков системы клиент выбирает до двух, которые знает распознаватель Apple, и запускает оба сразу на одном звуке; второй — только если его модель работает без сети. Каждому кандидату считается оценка — половина стабильности текста между обновлениями, половина уверенности распознавателя, плюс небольшая фора первому языку. Через 1,5 секунды после первых распознанных слов побеждает кандидат, опередивший второго на 0,12, а через 3 секунды — лидер в любом случае; проигравший останавливается, дальше звук идёт одному. В бете в этот список добавлен язык самого чата.
В секретных чатах открытый код запускает только распознаватели, которые работают на устройстве. Если для языка такой модели нет, диктовка в секретном чате не начнётся. В обычном чате первый язык может распознаваться и без локальной модели — тогда запись уходит на серверы Apple, как у системной диктовки macOS.
Запасной путь через серверы Telegram
В бете к этому добавлена серверная расшифровка самого Telegram. В журнале клиента есть строки «server fallback selected» и «nativeAvailable», а в бинарнике — метод messages.transcribeAudioFile: он принимает загруженный звуковой файл, а не сообщение, и возвращает текст обычным ответом расшифровки или позже, обновлением updateTranscribedAudioFile. Прежний метод messages.transcribeAudio расшифровывает только голосовое, которое уже лежит в чате, — у неотправленной записи номера сообщения нет. Новый метод и обновление есть в схеме API, выгруженной из бет macOS, но не в опубликованной документации.
Ограничения видны по текстам ошибок беты: запись длиннее 30 минут или больше 1 МБ не расшифровывается, а после бесплатных расшифровок появляется «Your free transcriptions have been used. Telegram Premium is required to transcribe more audio.» В стабильной 13.1.0 ни метода, ни этих строк нет. Как бета выбирает между Apple и сервером Telegram и что делает в секретных чатах, по сборке не видно.
Как проверено
- Открытый код клиента: движок диктовки (выбор языков, оценка, пороги 1,5 и 3 секунды,
requiresOnDeviceRecognition) и контроллер, где проверкаisSupportedвозвращает «да» только в отладочной сборке и требует распознавания на устройстве в секретных чатах. Оба файла пришли в открытый код слиянием ветки релиза 13.1 23 октября. - Бинарники из фидов обновлений: бета 283431 и стабильная 283357. Классы
ChatDictationEnhancer,ChatDictationEnhanceView, ключиkChatDictationAutomaticPunctuationиkChatDictationShortcutи строки из таблицы есть только в бете; в стабильной есть движок (ChatDictationSession,ChatDictationAnalyzerRecognizer) и восемь строк диктовки, а исправления нет. В файле строк открытого кода пунктов «Enhance» тоже нет. - Серверная часть — строки бинарника 283431:
AudioFileTranscription, «upload complete, calling transcribeAudioFile»,updateTranscribedAudioFileи тексты ошибок; в 283357 их нет. - Первое появление
ChatDictationEnhancer— дифф бинарника беты 283377, 24 октября.




