> ## Documentation Index
> Fetch the complete documentation index at: https://veriqa.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 0.7 — hop-режим, каналы на любом языке и четыре новых встроенных канала

> Что приносит Veriqa 0.7: hop-режим для QR-кода, канал на любом языке по HTTP, Instagram, Messenger, WeChat и Viber, добор claims, политики ограничения каналов и вход через код.

Veriqa 0.7.0 опубликована 31 октября 2026 года и следует за [0.6.1](https://veriqa.app/docs/ru/releases/0.6.md#061): это первый
пакет после неё, поэтому обновление идёт с 0.6.1 сразу на 0.7.0. Изменения описаны по этапам разработки,
с 0.6.2 по 0.6.11; пакетов с такими номерами нет. Последнее обновление — [0.7.1](#071).

## Что вошло в 0.7.0

| Этап | Даты (2026) | Что появилось |
| - | - | - |
| [0.6.2](https://veriqa.app/docs/ru/releases/0.6.2.md) | 26–28 сентября | Hop-режим |
| [0.6.3](https://veriqa.app/docs/ru/releases/0.6.3.md) | 28–29 сентября | Канал на любом языке по HTTP, WhatsApp через Twilio |
| [0.6.4](https://veriqa.app/docs/ru/releases/0.6.4.md) | 29–30 сентября | Добор claims и номер телефона |
| [0.6.5](https://veriqa.app/docs/ru/releases/0.6.5.md) | 30 сентября — 1 октября | Привязка подтверждения, свои тексты окна входа |
| [0.6.6](https://veriqa.app/docs/ru/releases/0.6.6.md) | 4–7 октября | Кнопка отмены, политики каналов, письмо в один тап через IMAP |
| [0.6.7](https://veriqa.app/docs/ru/releases/0.6.7.md) | 8–9 октября | Instagram\*, разметка в текстах, префикс пути |
| [0.6.8](https://veriqa.app/docs/ru/releases/0.6.8.md) | 10–11 октября | Messenger\*, WeChat и Viber |
| [0.6.9](https://veriqa.app/docs/ru/releases/0.6.9.md) | 12–16 октября | Вход через код, Redis и RabbitMQ в образе сервера |
| [0.6.10](https://veriqa.app/docs/ru/releases/0.6.10.md) | 18–22 октября | Вход и подтверждение как один процесс, цвет кнопки канала |
| [0.6.11](https://veriqa.app/docs/ru/releases/0.6.11.md) | 23–26 октября | Вход через аккаунт провайдера, код из письма, кнопки в чатах |

## Что появилось в самой 0.7.0

Изменения 27–30 октября 2026 года.

### Безопасность

* **Вопрос входа советует отклонить чужой запрос.** Поставляемый текст заканчивается фразой
  `If it was not you, decline the request.` Её можно заменить вместе с остальным текстом, см.
  [Veriqa:MessageTemplates](https://veriqa.app/docs/ru/reference/configuration.md#veriqamessagetemplates). Текст серверного
  подтверждения задаёте вы, поэтому добавьте фразу в него сами.
* В образе сервера с поставляемыми настройками токен бота и токен hop-ссылки больше не попадают в
  экспортируемые спаны и логи. Для своего хоста см. [Наблюдаемость](https://veriqa.app/docs/ru/guides/observability.md) и
  [Безопасность и обработка данных](https://veriqa.app/docs/ru/guides/data-handling.md).
* В событии `TransactionCompletedEvent` на шине RabbitMQ нет `Subject`, а `prompt=none` получает
  `login_required`. Оба изменения описаны ниже, в разделе о проверке при обновлении.

### Каналы

* **Повторно доставленное входящее событие** отбрасывается, если пришло на тот же экземпляр в течение
  500 мс. Длину окна задаёт
  [`Veriqa:Channels:InboundDeduplication:Window`](https://veriqa.app/docs/ru/reference/configuration#inbounddeduplication--повторная-доставка-входящего-события).
* Имя любого канала, кроме Email, переводится и переопределяется строкой `<имя> | channel`.
* Подсказка канала на окне входа стала видом сообщения `hop-channel-hint`.
* Вид квитанции зависит только от `ChannelCapabilities.RendersEmoji`: списка каналов в ядре больше нет.

### Окно входа

Кнопка с длинным именем канала больше не выходит за экран телефона, а кнопки формы добора на узком
экране встают в столбец.

### Документация

Новая страница [Мессенджеры, почта и сервисы аккаунтов](https://veriqa.app/docs/ru/messengers-and-accounts.md). На странице
[1С-Битрикс](https://veriqa.app/docs/ru/integrations/bitrix.md) первым описан модуль Veriqa из Маркетплейса.

## Что проверить при обновлении с 0.6.1

### Хранилища

* **Новые миграции EF Core** хранилища транзакций и журнала аудита: примените их при обновлении, см.
  [Хранилища](https://veriqa.app/docs/ru/guides/storage.md).
* **Собственное хранилище перестанет компилироваться:** у `ITransactionStore` семь новых членов без
  реализации по умолчанию, см.
  [Обновление собственного хранилища](https://veriqa.app/docs/ru/guides/storage.md#обновление-собственного-хранилища).
* **Собственное хранилище сообщений с вопросом тоже перестанет компилироваться:** у
  `IChannelPromptMessageStore` три новых члена без реализации по умолчанию: `FindAsync`,
  `TakeForChannelAsync` и `SetPhoneRequestMessageAsync`.

### Пользователи и входы

* **`sub` пользователей WhatsApp меняется.** Было `whatsapp:+номер`, стало `whatsapp:{BSUID}` —
  идентификатор, который Meta\* выдаёт бизнес-портфелю. Номер больше не служит идентификатором: он
  остаётся в `phone_number`, пока его присылает WhatsApp, а в `preferred_username` лежит имя пользователя
  WhatsApp. Миграции нет: у существующих пользователей WhatsApp в вашем приложении появится новый `sub`.
* **Параллельные входы одного пользователя:** когда пользователь начинает новый вход и приходит в канал
  с тем же аккаунтом, незавершённые входы этого аккаунта в то же приложение закрываются. Если ваш сценарий
  держит два входа открытыми одновременно, проверьте его.
* **`prompt=none` получает `login_required`.** Сессию входа Veriqa не хранит, поэтому такой запрос
  больше не открывает окно входа: ошибка возвращается на ваш `redirect_uri`. Если клиент продлевает
  токены тихо, в скрытом iframe, переведите его на refresh token (scope `offline_access`), см.
  страницу [Поддержка OIDC и OAuth 2.0](https://veriqa.app/docs/ru/reference/oidc-capabilities.md).
* **Email при `LoginConfirmation.Mode = OnWebPage`:** письмо входа больше не завершает вход, а только
  привязывает ящик; вход решает окно входа, «Нет» на нём даёт `declined_by_user`.

### Каналы и события

* **Свой адаптер на C# перестанет компилироваться:** `GetDeepLinkAsync` теперь принимает
  `DeepLinkRequest` вместо идентификатора транзакции. Ядро вызывает его при каждом показе канала и при
  каждом открытии hop-ссылки, поэтому вызов должен быть идемпотентным и без побочных эффектов, см.
  [`GetDeepLinkAsync`](https://veriqa.app/docs/ru/guides/custom-channel-adapter#getdeeplinkasync--куда-в-итоге-ведут-кнопка-и-qr-код).
* **`ReportOutcomeAsync` получает ещё и `awaiting_claims`,** а это не итоговое состояние. Перед показом
  итога проверяйте `TransactionOutcomeNotice.IsTerminal`.
* **Адаптер, зарегистрированный как `telegram`, `whatsapp` или `max`,** без заданного `RendersEmoji`
  теперь получает квитанцию без эмодзи. Чтобы сохранить эмодзи, задайте `RendersEmoji = true`.
* **Публичные типы `Veriqa.Core.ChannelAdapter.Pipeline` изменились.** Если ваш код вызывает их напрямую,
  обновите вызовы: например, `ChannelWebhookPipeline.ProcessInboundResultAsync` теперь
  `ChannelInboundProcessor.ProcessAsync`.
* **Номер телефона — только в формате E.164.** Свой или HTTP-адаптер, который отдаёт номер в другом
  виде, больше его не передаст. Правило описано в публичном `E164PhoneNumber` пакета
  `Veriqa.Core.Contracts`.
* **`TransactionCompletedEvent` на шине RabbitMQ — без `Subject`.** В этом поле лежал `sub`
  пользователя в открытом виде, по умолчанию `{channel_type}:{channel_user_id}`. По сообщению шины
  пользователя больше не определить: в `Context.MaskedChannelUserId` открыты только два последних
  символа, ключом это значение не служит. Если нужен `sub`, читайте его в `ITransactionEventHandler`
  в вашем хосте: там `Subject` по-прежнему есть. См.
  [Хранилища](https://veriqa.app/docs/ru/guides/storage.md#публикация-событий-транзакций).
* **Адрес MAX Bot API по умолчанию** теперь `https://platform-api2.max.ru`. Если исходящий трафик
  ограничен списком адресов, добавьте его, см. [MAX](https://veriqa.app/docs/ru/guides/channels.md#max).
* **В вопросе входа новая фраза.** Своя формулировка `confirmation-prompt` не получает
  `If it was not you, decline the request.` сама: добавьте её, если она нужна. Перевод в locale-файле
  перенесите на новые ключи, в которых есть эта фраза и слот `{requested_at}`.

### Окно входа

* **`ShowQrCode` по умолчанию — `DesktopOnly`** вместо `Always`: на телефоне вместо QR-кода показаны
  кнопки каналов. Чтобы сохранить прежний вид, задайте `"ShowQrCode": "Always"`.
* **Кнопка «Отмена» появится на всех окнах входа.** Если вы делали свою через `CustomJsPath`, уберите
  её или выключите встроенную.
* **`Title`, `Instruction` и подсказка канала, уже заданные обычным текстом, могут изменить вид:** эти
  тексты теперь читаются как HTML. `Terms &amp; Conditions` теперь показывает «Terms & Conditions», а
  одиночный `<` или `>` проверку не проходит: значение выводится как есть, а в лог уходит предупреждение.
  Просмотрите свои значения на `&`, `<` и `>`.
* Часть встроенных текстов переформулирована. Если вы их переопределяли, сверьте их с
  [Настройкой и кастомизацией](https://veriqa.app/docs/ru/guides/customization.md).

### Формулировки окна входа

Своя формулировка встроенного текста из таблицы ниже, заданная в locale-файле, больше не применяется:
прежних ключей нет. Перенесите её на новый ключ:

| Где | Прежний ключ | Новый ключ |
| - | - | - |
| Истёкший вход | `Session expired` | `This sign-in request has expired` |
| Кнопка канала | `Open in Telegram`, `Open in WhatsApp`, `Open in MAX` | `Sign in with {0}` и `Confirm in {0}` или фраза целиком, например `Confirm in WhatsApp` |
| Кнопка Email со ссылкой | `Sign in via Email` | `Sign in with Email` и `Confirm with Email` |
| Кнопка Email с почтовым приложением | `Open Email Client` | `Send confirmation email` |
| Один канал или вкладка канала | `Scan the QR code or tap the channel button` · `Tap the channel button to sign in` | `Scan the QR code or tap the button to sign in with {0}` · `Scan the QR code to sign in with {0}` · `Tap the button to sign in with {0}` |
| Несколько каналов на экране | `Choose a channel and scan the QR code or tap the button` · `Choose a channel and tap the button` | `Choose a channel, then scan its QR code or tap its button to sign in` · `Choose a channel, then scan its QR code to sign in` · `Choose a channel and tap its button to sign in` |
| Один QR-код на несколько каналов | `Scan the QR code or tap the channel button` | `Scan the QR code or tap a channel button to sign in` · `Scan the QR code to sign in` · `Tap a channel button to sign in` |
| Вкладка «Any channel» | `Scan the QR code or tap the channel button` | `Scan the QR code or tap your messaging app's button to sign in` |

У подтверждения те же ключи, где `to sign in with {0}` заменено на `to confirm in {0}`, а `to sign in`
на `to confirm`. Замена текста одного канала обязана нести слот `{0}`: туда страница подставляет значок
и имя канала. Полная таблица редакций приведена в разделе
[Инструкция следует обеим настройкам](https://veriqa.app/docs/ru/guides/customization.md#инструкция-следует-обеим-настройкам).

\* Компания Meta признана в России экстремистской организацией; её деятельность в стране запрещена. Instagram и Messenger — её продукты.

## 0.7.1

Veriqa 0.7.1 опубликована 2 ноября 2026 года. Она меняет текст предзаполненного сообщения при
подтверждении и добавляет клиентские приложения в репозитории quickstart.

### Предзаполненное сообщение подтверждения

Сообщение или письмо, которое пользователь отправляет сам, больше не говорит о входе, когда транзакция —
подтверждение. Сообщение теперь звучит, например, как `Send this message to continue.`, а у письма тема
`Confirm in {app}: {token}` или, без названия приложения, `Confirm: {token}`. Письмо в один тап больше
не называет Veriqa ни в теме, ни в тексте; приложение названо только в теме.

`IChannelMessageTemplates.ResolveAsync`, сообщения `post-login-*` и письма Email теперь читают ещё и
`ByType` и `ByAction`, так что формулировка, заданная для типа или действия, доходит и до них.

### Примеры

В репозиториях quickstart рядом с ASP.NET Core появились клиентские приложения на Python, Node.js, Go и
PHP; каждое использует готовую библиотеку OpenID Connect. См. [Вход на сайте через мессенджер](https://veriqa.app/docs/ru/samples/sign-in.md).

### Docker-образ

Docker-образ этой версии работает на `linux/amd64` и `linux/arm64`. Образы предыдущих версий — только
`linux/amd64`.

### Публичный репозиторий

Папка `docs/` публичного репозитория теперь называется `gallery-and-docs/`. README пакета, вышедшего до
0.7.0 включительно, по-прежнему ведёт на старый путь, поэтому на странице этой версии на nuget.org не
открываются картинки и ссылка на галерею.

### Что проверить при обновлении с 0.7.0

* **Своя формулировка `deeplink-prefill`.** В `Veriqa:MessageTemplates` формулировка на уровне вида или
  для одного канала теперь действует только на вход. Для подтверждения объявите её ещё и в
  `ByType:confirmation:BySurface:in-channel:ByChannel:{канал}`. Своему каналу, в шаблоне которого есть
  `{code}`, этот адрес обязателен: без него подтверждение получит поставляемый текст, а кода в нём нет.
  См. [`Veriqa:MessageTemplates`](https://veriqa.app/docs/ru/reference/configuration#veriqamessagetemplates).
* **Свои locale-файлы.** Ключ вступления письма в один тап теперь `This mail confirms sign-in. Do not
  change the subject or the body of the mail.`, а у подтверждения появились свои ключи — см.
  [Текст предзаполненного сообщения](https://veriqa.app/docs/ru/guides/channels.md#текст-предзаполненного-сообщения). Без перевода они показываются по-английски.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.