Перейти к основному содержанию
Veriqa 0.7.0 опубликована 31 октября 2026 года и следует за 0.6.1: это первый пакет после неё, поэтому обновление идёт с 0.6.1 сразу на 0.7.0. Изменения описаны по этапам разработки, с 0.6.2 по 0.6.11; пакетов с такими номерами нет. Последнее обновление — 0.7.1.

Что вошло в 0.7.0

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

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

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

  • Вопрос входа советует отклонить чужой запрос. Поставляемый текст заканчивается фразой If it was not you, decline the request. Её можно заменить вместе с остальным текстом, см. Veriqa:MessageTemplates. Текст серверного подтверждения задаёте вы, поэтому добавьте фразу в него сами.
  • В образе сервера с поставляемыми настройками токен бота и токен hop-ссылки больше не попадают в экспортируемые спаны и логи. Для своего хоста см. Наблюдаемость и Безопасность и обработка данных.
  • В событии TransactionCompletedEvent на шине RabbitMQ нет Subject, а prompt=none получает login_required. Оба изменения описаны ниже, в разделе о проверке при обновлении.

Каналы

  • Повторно доставленное входящее событие отбрасывается, если пришло на тот же экземпляр в течение 500 мс. Длину окна задаёт Veriqa:Channels:InboundDeduplication:Window.
  • Имя любого канала, кроме Email, переводится и переопределяется строкой <имя> | channel.
  • Подсказка канала на окне входа стала видом сообщения hop-channel-hint.
  • Вид квитанции зависит только от ChannelCapabilities.RendersEmoji: списка каналов в ядре больше нет.

Окно входа

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

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

Новая страница Мессенджеры, почта и сервисы аккаунтов. На странице 1С-Битрикс первым описан модуль Veriqa из Маркетплейса.

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

Хранилища

  • Новые миграции EF Core хранилища транзакций и журнала аудита: примените их при обновлении, см. Хранилища.
  • Собственное хранилище перестанет компилироваться: у ITransactionStore семь новых членов без реализации по умолчанию, см. Обновление собственного хранилища.
  • Собственное хранилище сообщений с вопросом тоже перестанет компилироваться: у 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.
  • Email при LoginConfirmation.Mode = OnWebPage: письмо входа больше не завершает вход, а только привязывает ящик; вход решает окно входа, «Нет» на нём даёт declined_by_user.

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

  • Свой адаптер на C# перестанет компилироваться: GetDeepLinkAsync теперь принимает DeepLinkRequest вместо идентификатора транзакции. Ядро вызывает его при каждом показе канала и при каждом открытии hop-ссылки, поэтому вызов должен быть идемпотентным и без побочных эффектов, см. GetDeepLinkAsync.
  • 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 по-прежнему есть. См. Хранилища.
  • Адрес MAX Bot API по умолчанию теперь https://platform-api2.max.ru. Если исходящий трафик ограничен списком адресов, добавьте его, см. 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», а одиночный < или > проверку не проходит: значение выводится как есть, а в лог уходит предупреждение. Просмотрите свои значения на &, < и >.
  • Часть встроенных текстов переформулирована. Если вы их переопределяли, сверьте их с Настройкой и кастомизацией.

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

Своя формулировка встроенного текста из таблицы ниже, заданная в locale-файле, больше не применяется: прежних ключей нет. Перенесите её на новый ключ: У подтверждения те же ключи, где to sign in with {0} заменено на to confirm in {0}, а to sign in на to confirm. Замена текста одного канала обязана нести слот {0}: туда страница подставляет значок и имя канала. Полная таблица редакций приведена в разделе Инструкция следует обеим настройкам. * Компания 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. См. Вход на сайте через мессенджер.

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.
  • Свои locale-файлы. Ключ вступления письма в один тап теперь This mail confirms sign-in. Do not change the subject or the body of the mail., а у подтверждения появились свои ключи — см. Текст предзаполненного сообщения. Без перевода они показываются по-английски.