Справка по устаревшим карточкам интерактивных сообщений

Примечание.

В этом документе описывается исходный формат JSON для формата карточек интерактивных сообщений. Для интерактивных сообщений, отправляемых по электронной почте, данная информация была заменена на Формат адаптивной карточки. Корпорация Майкрософт рекомендует, чтобы новые интеграции интерактивных сообщений использовали формат адаптивной карточки, а для существующих интеграций рассматривалась возможность обновления до формата адаптивной карточки. Формат адаптивной карточки требуется для поддержки Outlook для iOS и Android. Тем не менее если вы отправляете сообщения с действиями через соединитель Office или соединитель Microsoft Teams, вы должны по-прежнему использовать формат карточки сообщения.

Карточки предназначены для предоставления легко читаемой, с первого взгляда информации, которую пользователи могут очень быстро расшифровывать и действовать, когда это необходимо. Таким образом, руководящим принципом для разработки больших карта является "содержимое по хрому", что означает, что карточки прямо к точке и свести к минимуму использование всего, что будет отвлекать, например значки или пользовательские цвета.

Designer сообщений с действиями

Готовы поэкспериментировать с дизайном карточки? Перейдите к Designer actionable Message, который позволяет увидеть, как будет выглядеть карта при редактировании связанных полезных данных JSON.

Примечание.

Designer actionable Message загружает примеры адаптивных карточек по умолчанию. Вы можете добавить сообщение карта JSON, чтобы получить предварительную версию.

Рекомендации по дизайну

Форматирование текста

Все текстовые поля в карточке и его разделах можно форматировать с помощью Markdown. Мы поддерживаем базовый Markdown.

Важно!

Так как все поля обрабатываются как Markdown, при необходимости экранируйте специальные символы Markdown (такие как * или #).

Эффект Markdown
Курсив *Italic*
Полужирный **Bold**
Полужирный курсив ***Bold Italic***
Зачеркивание ~~Strike-through~~
Ссылки [Microsoft](https://www.microsoft.com)
Заголовки (<h1><h6>) # Heading###### Heading
Маркированные списки * List item или - List item

Совет

Соблюдайте эти правила при форматировании текстовых полей.

  • Используйте Markdown для форматирования текста.
  • Не используйте разметку HTML в карточках. HTML игнорируется и обрабатывается как обычный текст.

Использование разделов

Если карточка содержит один "объект", можно обойтись без разделов. С другой стороны, разделы поддерживают понятие "действие", часто это хороший способ представления данных на карточке.

Если карточка содержит несколько "объектов" или, например, дайджест для определенного источника новостей, необходимо использовать несколько разделов, по одному на каждый "объект".

Совет

Соблюдайте эти правила при планировании макета карточки.

  • Используйте разделы, чтобы объединять данные в логические группы.
  • Иногда для представления одной логической группы данных могут использоваться несколько разделов; это обеспечивает большую гибкость при упорядочении сведений, представленных в карта. Например, это позволяет отобразить список фактов перед действием.
  • Не включайте более 10 разделов. Карточки предназначены для удобства чтения; Если в карта слишком много информации, она будет потеряна для пользователя.
  • В конце карточки-дайджеста рекомендуем добавить действие "Просмотреть весь дайджест".

Поля карточки

Поле Тип Описание
@type String Обязательный. Необходимо указать значение MessageCard.
@context String Обязательный. Необходимо указать значение https://schema.org/extensions.
correlationId UUID Свойство correlationId упрощает поиск журналов для устранения неполадок. Рекомендуется, чтобы при отправке интерактивной карточки ваша служба задавала уникальный код UUID и регистрировала его в этом свойстве.

Когда пользователь активирует действие на карточке, Office 365 отправляет в вашу службу заголовки Card-Correlation-Id и Action-Request-Id в запросе POST. Card-Correlation-Id содержит то же значение, что и свойство correlationId в карточке. Action-Request-Id — уникальный код UUID, создаваемый Office 365 для идентификации выполняемого пользователем действия. Ваша служба должна регистрировать оба этих значения при получении запросов POST.
expectedActors Массив строк Необязательное. Содержит список ожидаемых адресов электронной почты получателя для конечной точки действия.

У пользователя может быть несколько адресов электронной почты, и конечная точка действия может не ожидать адрес электронной почты, представленный в утверждении sub токена носителя. Например, у пользователя может быть два адреса электронной почты — john.doe@contoso.com и john@contoso.com, но конечная точка действия ожидает john@contoso.com в утверждении sub токена носителя. Если вы укажете в этом поле значение ["john@contoso.com"], утверждение sub будет содержать ожидаемый адрес электронной почты.
originator String Требуется при отправке по электронной почте, не применяется при отправке с использованием соединителя. В случае интерактивных сообщений для этого поля ТРЕБУЕТСЯ задать ИД поставщика, созданный панелью мониторинга разработчика для интерактивных сообщений.
summary Строка Требуется, если карточка не содержит свойства text; в противном случае — необязательно. Свойство summary обычно отображается в представлении списка в Outlook, чтобы можно было быстро определить, в чем суть карточки.

Всегда включайте сводку.
Не включайте в сводку подробные сведения. Например, для записи в Twitter в сводке может быть просто указано "Новый твит от @someuser" без упоминания содержимого самого твита.
themeColor String Определяет настраиваемый фирменный цвет карточки. Цвет будет отображаться ненавязчиво.

Используйте themeColor для фирменного оформления карточек с использованием нужного цвета.
Не используйте themeColor для указания статуса.
hideOriginalBody Логический Применимо только к карточкам в сообщениях электронной почты

Если вы укажете значение true, текст HTML сообщения будет скрыт. Это очень полезно в сценариях, когда карта является лучшим или более полезным представлением содержимого, чем текст HTML, что особенно верно, когда карта содержит действия (см. ниже).

Скрывайте исходный текст HTML:
  • если сама карточка содержит все сведения, необходимые пользователю;
  • если содержимое карточки дублирует текст HTML.
**** Всегда включайте подробный текст HTML, даже если он будет скрыт. Текст HTML — единственный элемент, который будет отображен в клиенте электронной почты, не поддерживающем карточки. Кроме того, карточки не включаются при ответе на сообщения электронной почты или их пересылке — включается только текст HTML.
Не скрывайте текст, когда он дополняет информацию, представленную на карточке. Например, текст может содержать подробные сведения об авансовом отчете, а в карточке будет представлена только краткая сводка наряду с действиями "утвердить" и "отклонить".
title Строка Свойство title должно отображаться на заметном месте, в самом верху карточки. Используйте его, чтобы пользователи сразу понимали, чего ожидать.

Примеры:
  • Ежедневные новости
  • Создан отчет об ошибке
  • Назначена задача <name of task>
Название должно быть кратким, не используйте длинные предложения.
Укажите имя объекта, упоминаемого в названии.
Не используйте в названии гиперссылки (через Markdown).
text Строка Требуется, если карточка не содержит свойства summary; в противном случае — необязательно. Свойство text должно отображаться под названием карточки обычным шрифтом. Используйте его для отображения содержимого, например описания упоминаемого объекта, или аннотации новостной статьи.

Используйте простой Markdown, например полужирный шрифт или курсив для выделения слов и ссылок на внешние ресурсы.
Не включайте призыв к действию в свойстве text. Пользователи должны понимать, о чем карточка, не читая текст.
sections Массив Section Коллекция разделов, которые необходимо включить в карточку. См. Поля раздела.
potentialAction Массив Actions Коллекция действий, которые можно вызвать в этом карта. См. раздел Действия.

Поля раздела

Поле Тип Описание
title Строка Свойство title раздела отображается шрифтом, который выделяется, но не так сильно, как название карточки. Оно называет раздел и дает представление о его содержимом, как свойство title карточки дает представление о содержимом карточки.

Название должно быть кратким, не используйте длинные предложения.
Укажите имя объекта, упоминаемого в названии.
Не используйте в названии гиперссылки (через Markdown).
startGroup Логический Если указано значение true, свойство startGroup обозначает начало логической группы информации. Как правило, разделы со свойством startGroup, для которого задано значение true, визуально отделены от предыдущих элементов карточки. Например, в Outlook используется тонкая горизонтальная разделительная линия.

Пример разделения разделов с помощью startGroup=true

ИспользуйтеstartGroup для установления границ между разделами, представляющими разные объекты. Например, несколькими твитами в дайджесте.
activityImage
activityTitle
activitySubtitle
activityText
Строка Эти четыре свойства образуют логическую группу. activityTitle, activitySubtitle и activityText будут расположены рядом с activityImage в соответствии с форм-фактором устройства, на котором просматривается карточка. Например, в Outlook в Интернете activityTitle, activitySubtitle и activityText отображаются справа от activityImage в два столбца:

Пример макета действия

Используйте поля действий для таких сценариев:
  • Кто-то что-то сделал
    • Используйте activityImage, чтобы показать фотографию этого человека.
    • Используйте activityTitle, чтобы рассказать, что он сделал. Будьте лаконичны.
    • Используйте activitySubtitle, чтобы показать, например, дату и время выполненного действия или имя пользователя.
      • activitySubtitle отображается более приглушенным шрифтом.
      • Не включайте важные сведения.
      • Не включайте призывы к действию.
      • Не используйте форматирование Markdown.
    • Используйте activityText, чтобы сообщить подробности о действии.
      • Используйте простой Markdown, чтобы выделить слова или создать ссылки на внешние ресурсы.
      • Не включайте призывы к действию.
  • Аннотация к новостной статье
    • Используйте activityImage, чтобы показать фотографию, связанную со статьей.
    • Используйте activitySubtitle, чтобы показать дату и время публикации статьи.
    • Используйте activityText, чтобы показать аннотацию.
heroImage Изображение Используйте heroImage, чтобы сделать изображение центральным элементом карточки. Например, если твит содержит изображение, лучше поместить его на переднем плане:

Пример изображения-героя в сообщении карта

heroImage также можно использовать, чтобы добавить в карточку баннер, например такой, как показано ниже:

Пример использования heroImage для создания баннера
text String Свойство text раздела очень похоже на свойство text карточки. Его можно использовать с той же целью.
facts Массив пар "имя-значение" Факты — очень важный компонент раздела. Они часто содержат информацию, которая действительно важна для пользователя.

Факты отображаются таким образом, чтобы их можно было быстро прочитать и понять. Например, в Outlook в Интернете факты представлены в два столбца, а названия фактов отображаются чуть более заметным шрифтом:

Пример отображаемых фактов

Факты можно использовать по-разному. Некоторые варианты:
  • Создан отчет об ошибке.
    • ИД ошибки: 1234.
    • Кем создано: Александра Воронова
    • Кому назначено: Алексей Виноградов
  • Отчет об использовании приложения
    • Имя приложения: Contoso CRM App
    • Период: 1 августа 2016 г. – 30 сентября 2016 г.
    • Количество пользователей: 542
    • Количество сеансов: 2056
    • Среднее время, проведенное в приложении: 76 секунд
  • Утверждение расходов
    • Кем отправлено: Дмитрий Дегтярев
    • Дата отправления: 21 октября 2016 г.
    • Общая сумма: 79 949 рублей
Не внедряйте важные сведения в свойство text карточки или раздела. Используйте факты.
Названия фактов должны быть краткими.
Значения фактов не должны быть слишком длинными.
Избегайте использования форматирования Markdown как для имен фактов, так и для значений. Пусть факты будут отображаться по назначению, так как именно они будут иметь наибольшее влияние.
**** Используйте Markdown только для ссылок в значениях фактов. Например, если в факте упоминается внешний документ, сделайте значение этого факта ссылкой на документ.
Не добавляйте ненужные факты. Например, факт, у которого всегда будет одинаковое значение на всех карточках, неинтересен и зря занимает место.
images Массив объектов Image Свойство images позволяет включить фотоальбом в раздел. Этот фотоальбом всегда будет удобным для просмотра независимо от форм-фактора устройства. Например, в Outlook в Интернете может отображаться горизонтальная лента эскизов и элементы управления для прокручивания коллекции, если она полностью не помещается на экране. На мобильном устройстве может отображаться один эскиз, проводя пальцем по которому можно просмотреть всю коллекцию.
potentialAction Массив Actions Коллекция действий, которые можно вызвать в этом разделе. См. раздел Действия.

Объект Image

Определяет изображение, используемое heroImage и свойством images раздела.

Поле Тип Описание
image Строка URL-адрес изображения.
title String Краткое описание изображения. Как правило, title отображается в виде всплывающей подсказки при наведении указателя мыши на изображение.

Действия

Карточки — это очень мощный инструмент, так как позволяют пользователям быстро выполнять действия, не закрывая клиент электронной почты. Делайте карточки интерактивными, так как это повысит вовлеченность и продуктивность пользователей.

Действия задаются с помощью свойства potentialAction, которое доступно как на самой карточке, так и в каждом разделе. Существует четыре типа действий:

В коллекции potentialAction может быть не более 4 действий (любого типа).

  • Включайте наиболее значительные действия для пользователя, например наиболее часто повторяющиеся.
  • Не добавляйте 4 действия, лишь потому что есть такая возможность. Во многих случаях пользователю будет удобнее работать с клиентом, если действий будет меньше.
  • Не создавайте карточки для замены внешнего приложения. Карточки должны дополнять такие приложения, а не заменять.

Действие OpenUri

Открывает URI в отдельном браузере или приложении.

Ссылки можно создавать с помощью Markdown, но с помощью действия OpenUri можно указывать разные URI для разных операционных систем, что позволяет открывать ссылку в приложении на мобильных устройствах.

  • Рекомендуем использовать действие OpenUri, а не ссылку в Markdown, если это позволит пользователям открывать ссылку в приложении на мобильном устройстве.
  • Включите по крайней мере действие OpenUri для просмотра объекта во внешнем приложении-источнике.
  • Сделайте действие OpenUri последним в коллекции potentialAction.

Примечание.

Microsoft Teams и Outlook в Интернете поддерживают только URL-адреса HTTP или HTTPS в массиве targets для действия OpenUri.

Поле Тип Описание
name Строка Свойство name определяет название действия, которое будет отображаться на экране.

Используйте глаголы. Например, используйте "Задать дату выполнения" вместо "Дата выполнения" или "Добавить примечание" вместо "Примечание". В некоторых случаях само существительное просто работает, потому что это также глагол: "Комментарий".
Не называйте действие OpenUri так, что можно предположить, что его можно выполнить непосредственно в клиенте. Называйте действие следующим образом: "Просмотреть в <название сайта или приложения>" или "Открыть в <название сайта или приложения>"
targets Массив Свойство targets — это коллекция пар "имя-значение", определяющих один универсальный код ресурса (URI) на целевую операционную систему.

Поддерживаемые значения операционной системы: default, windows, iOS и android. Значение default в большинстве случаев просто откроет URI в браузере независимо от операционной системы.

Пример свойства targets:
"targets": [
{ "os": "default", "uri": "https://yammer.com/.../123" },
{ "os": "iOS", "uri": "yammer://u/123" },
{ "os": "android", "uri": "yammer://u/123" },
{ "os": "windows", "uri": "yammer://u/123" }
]

Действие HttpPOST

Выполняет вызов внешней веб-службы.

HttpPOST При выполнении действия выполняется запрос POST на URL-адрес в target поле, и целевой службе необходимо проверить подлинность вызывающего объекта. Это можно сделать различными способами, в том числе с помощью маркера ограниченного назначения, встроенного в целевой URL-адрес. Дополнительные сведения и помощь по выбору механизма безопасности, который лучше всего подходит для конкретного сценария, см. в статье Требования к безопасности для сообщений с действиями.

Поле Тип Описание
name Строка Свойство name определяет название действия, которое будет отображаться на экране.

Используйте глаголы. Например, используйте "Задать дату выполнения" вместо "Дата выполнения" или "Добавить примечание" вместо "Примечание". В некоторых случаях само существительное просто работает, потому что это также глагол: "Комментарий".
target String Определяет конечную точку URL-адреса службы, реализующей действие. Примечание: данный URL-адрес должен быть доступен из сети Интернет, вы не сможете использовать localhost.
headers Массив Header Коллекция объектов, Header представляющих набор http-заголовков, которые будут выдаваться при отправке запроса POST на целевой URL-адрес. См. раздел Заголовок.
body String Текст запроса POST.
bodyContentType Строка Свойство bodyContentType не является обязательным и определяет тип MIME текста в запросе POST. Некоторым службам необходимо, чтобы был указан тип контента. Допустимые значения — application/json и application/x-www-form-urlencoded. Если ничего не указано, используется аргумент application/json.

Объект Header — это пара "имя-значение", представляющая HTTP-заголовок.

Поле Тип Описание
name Строка Имя заголовка
value Строка Значение заголовка

Сообщение о результате выполнения действия

Действия HttpPOST могут включать в ответе заголовок HTTP CARD-ACTION-STATUS. Этот заголовок содержит текст, указывающий на результат выполнения действия.

Значение заголовка будет отображаться в выделенной области карточки. Оно также сохраняется вместе с карточкой, поэтому его можно показать позже и напомнить пользователям о действиях, которые уже выполнены с данной карточкой.

Совет

Соблюдайте эти правила, когда возвращаете ответ на действия HttpPOST.

  • Возвращайте заголовок CARD-ACTION-STATUS в ответах.
  • **** Сообщение в этом заголовке должно быть максимально информативным и понятным. Например, для действия "утвердить" с авансовым отчетом:
    • Если действие успешно, возвращайте не "Действие выполнено", а "Расходы утверждены".
    • Если действие не выполнено, возвращайте не "Действие не выполнено", а "Не удалось утвердить расходы. Повторите попытку позже."
  • Не упоминайте в заголовке CARD-ACTION-STATUS имя человека, выполняющего действие, а также время его выполнения. Эта информация будет добавлена автоматически и отображена единообразно.

Карточки с обновлением

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

  • Сценарий утверждения (например, авансового отчета)
    • После утверждения или отклонения запроса карточка обновляется — удаляются действия "утвердить" и "отклонить" и появляется запись об утверждении или отклонении.
  • Состояние задачи
    • После того как предпринято действие, например указана дата выполнения задачи, карточка обновляется — в ее фактах появляется обновленная дата выполнения.
  • Опрос
    • После ответа на вопрос карточка обновляется следующим образом:
      • Пользователь больше не может отвечать.
      • Рядом с ответом пользователя отображается обновленное состояние, например "Спасибо, что прошли опрос".
      • Может быть включено новое действие OpenUri для просмотра опроса в Интернете.

Чтобы обновить карточку в результате действия HttpPOST, служба должна выполнить следующие действия:

  • Включить полезные данные JSON новой карточки в ответ на полученный HTTP-запрос POST.
  • Добавить HTTP-заголовок CARD-UPDATE-IN-BODY: true в ответ, чтобы сообщить клиенту о необходимости проанализировать основной текст ответа и извлечь новую карточку (во избежание ненужной обработки, когда карточка с обновлением не включена).

Совет

Соблюдайте эти правила, когда возвращаете карточки с обновлением.

  • Используйте карточки с обновлением с действиями, которые можно выполнить только один раз. В таких случаях карточка с обновлением не будет включать действие, которое больше нельзя выполнить.
  • **** Используйте карточки с обновлением с действиями, которые меняют состояние объектов. В таких случаях карточка с обновлением должна включать обновленные сведения об объекте и МОЖЕТ изменять набор действий, которые можно выполнить.
  • Не используйте карточки с обновлением, чтобы вести беседу с пользователем. Например, не используйте карточки с обновлением для многошагового "мастера".
  • Добавьте по крайней мере действие OpenUri для просмотра объекта во внешнем приложении-источнике.

Действие ActionCard

Представляет дополнительный пользовательский интерфейс, содержащий входные данные наряду со связанными действиями OpenUri или HttpPOST.

Используйте действие, ActionCard если действие требует дополнительных входных данных от пользователя. Некоторые варианты:

  • участие в опросе;
  • добавление комментария к ошибке;
  • обоснование отклонения авансового отчета.

По умолчанию действие ActionCard будет представлено в карточке в виде кнопки или ссылки. При нажатии этой кнопки будут показаны входные данные и действия, определенные в карточке действия.

Если в коллекции potentialAction одно действие ActionCard, Outlook представит его уже в развернутом виде — входные данные и действия будут видны сразу.

Поле Тип Описание
name Строка Свойство name определяет название действия, которое будет отображаться на экране.

Используйте глаголы. Например, используйте "Задать дату выполнения" вместо "Дата выполнения" или "Добавить примечание" вместо "Примечание". В некоторых случаях само существительное просто работает, потому что это также глагол: "Комментарий".
inputs Массив Inputs Свойство inputs определяет различные входные данные, которые будут отображаться в пользовательском интерфейсе действия карта. См. раздел Входные данные
actions Массив Actions Свойство actions— это массив объектов Action, которые могут быть либо типа OpenUri, либо типа HttpPOST. Свойство actions действия ActionCard не может содержать другое действие ActionCard.

Пример ActionCard

{
  "@type": "ActionCard",
  "name": "Comment",
  "inputs": [
    {
      "@type": "TextInput",
      "id": "comment",
      "isMultiline": true,
      "title": "Input's title property"
    }
  ],
  "actions": [
    {
      "@type": "HttpPOST",
      "name": "Action's name prop.",
      "target": "https://yammer.com/comment?postId=123",
      "body": "comment={{comment.value}}"
    }
  ]
}

Входные данные

Поддерживаются три типа входных данных: TextInput, DateInput и MultichoiceInput.

Общие поля

Следующие поля являются общими для всех типов входных данных.

Поле Тип Описание
id String Уникально определяет входные данные, чтобы можно было ссылаться на него в тексте HttpPOST действия. См. раздел Подстановка входных значений.
isRequired Boolean Указывает, обязательно ли вводить значение, чтобы выполнить действие. Значение поля принимается как параметр.

Сделайте поле обязательным, если пользователи ДОЛЖНЫ указать значение.
Рекомендуем сделать поле обязательным, если его значение дополняет значение других обязательных полей. Например, можно ввести вопрос "Насколько вас устраивает ваш автомобиль?" с несколькими вариантами ответа и добавить поле "Объясните свой ответ" для ввода произвольного текста. Помните, что некоторым пользователям может не понравиться, что их заставляют объяснять свой выбор, и они не станут проходить опрос вообще.
Убедитесь , что пользователи знают, какие входные данные необходимы. Включите метку в свойство заголовка входных данных. Например, или Comment (optional)Please rate your experience (required).
title String Определяет название поля.
value String Определяет исходное значение поля. Для вопросов с несколькими вариантами ответа значение должно соответствовать свойству value одного из вариантов.
TextInput

Используйте этот тип входных данных, когда нужно, чтобы пользователи предоставили развернутый ответ, например ответ на вопрос опроса.

Поле Тип Описание
isMultiline Логический Указывает, должно ли поле принимать несколько строк текста.
maxLength Число Указывает максимальное количество символов, которое можно ввести.
Пример TextInput
{
  "@type": "TextInput",
  "id": "comment",
  "isMultiline": true,
  "title": "Input's title property"
}
DateInput

Используйте этот тип входных данных, если нужно, чтобы пользователи указали дату и/или время, например дату выполнения задачи.

Поле Тип Описание
includeTime Логический Указывает, разрешено ли при вводе данных выбирать время в дополнение к дате.
Пример DateInput
{
  "@type": "DateInput",
  "id": "dueDate",
  "title": "Input's title property"
}
MultichoiceInput

Используйте этот тип входных данных, если нужно, чтобы пользователи выбирали из списка стандартных вариантов, например состояние ошибки, да/нет/может быть и т. д.

Поле Тип Описание
choices Массив пар "имя-значение" Определяет значения, которые можно выбирать из списка.
isMultiSelect Логический Если вы укажете значение true, пользователь сможет выбрать больше одного варианта. Указанные варианты отобразятся в виде списка флажков. Значение по умолчанию — false.

Пример ввода с множественным выбором
style Строка (normal (по умолчанию) или expanded) Когда свойство isMultiSelect имеет значение false, если присвоить свойству style значение expanded, ведущее приложение попробует отобразить все варианты на экране — как правило, с помощью набора переключателей.

Пример расширенных входных данных
Пример компактного типа MultichoiceInput
{
  "@type": "MultichoiceInput",
  "id": "list",
  "title": "Pick an option",
  "choices": [
    { "display": "Choice 1", "value": "1" },
    { "display": "Choice 2", "value": "2" },
    { "display": "Choice 3", "value": "3" }
  ]
}
Пример MultichoiceInput с множественным выбором
{
  "@type": "MultichoiceInput",
  "id": "list",
  "title": "Pick an option",
  "isMultiSelect": true,
  "choices": [
    { "display": "Choice 1", "value": "1" },
    { "display": "Choice 2", "value": "2" },
    { "display": "Choice 3", "value": "3" }
  ]
}
Пример развернутого типа MultichoiceInput
{
  "@type": "MultichoiceInput",
  "id": "list",
  "title": "Pick an option",
  "style": "expanded",
  "choices": [
    { "display": "Choice 1", "value": "1" },
    { "display": "Choice 2", "value": "2" },
    { "display": "Choice 3", "value": "3" }
  ]
}

Подстановка введенного значения

На значение входных данных можно ссылаться в тексте HttpPOST действия. В этом случае непосредственно перед выполнением действия ссылка заменяется на фактическое значение поля.

Чтобы сослаться на входное значение, используйте следующий формат:

{{<id of input>.value}}

Пример подстановки введенного значения
{
  "@type": "ActionCard",
  "name": "Comment",
  "inputs": [
    {
      "@type": "TextInput",
      "id": "comment",
      "isMultiline": true,
      "title": "Input's title property"
    }
  ],
  "actions": [
    {
      "@type": "HttpPOST",
      "name": "Action's name prop.",
      "target": "https://yammer.com/comment?postId=123",
      "body": "comment={{comment.value}}"
    }
  ]
}

Действие InvokeAddInCommand

Открывает область задач надстройки Outlook. Если надстройка не установлена, пользователю предлагается установить ее одним щелчком мыши.

При выполнении действия InvokeAddInCommand Outlook сначала проверяет, установлена ли запрошенная надстройка и включена ли она для пользователя. Если она не установлена или не включена, пользователь может установить и включить ее одним щелчком мыши. Outlook открывает запрошенный объект , что делает любой контекст инициализации, заданный действием, доступным для надстройки.

Дополнительные сведения см. в статье Вызов надстройки Outlook из интерактивного сообщения.

Поле Тип Описание
name Строка Свойство name определяет название действия, которое будет отображаться на экране.

Используйте глаголы. Например, используйте "Задать дату выполнения" вместо "Дата выполнения" или "Добавить примечание" вместо "Примечание". В некоторых случаях само существительное просто работает, потому что это также глагол: "Комментарий".
addInId UUID Определяет идентификатор требуемой надстройки. Идентификатор надстройки находится в элементе Id в манифесте надстройки.
desktopCommandId Строка Определяет идентификатор кнопки надстройки, которая открывает требуемую область задач. Идентификатор кнопки находится в атрибуте id определяющего кнопку элемента Control в манифесте надстройки. Указанный элемент Control ДОЛЖЕН быть определен в точке расширения MessageReadCommandSurface. Требуемый тип этого элемента: Button. Требуемый тип объекта Action: ShowTaskPane.
initializationContext Объект Необязательное. Разработчики могут указать в этом поле любой действительный объект JSON. Значение сериализуется в строку и предоставляется надстройке при выполнении действия. Это позволяет действию передавать надстройке данные об инициализации.

Пример InvokeAddInCommand

{
  "@type": "InvokeAddInCommand",
  "name": "Invoke My Add-in",
  "addInId": "527104a1-f1a5-475a-9199-7a968161c870",
  "desktopCommandId": "show ",
  "initializationContext": {
    "property1": "Hello world",
    "property2": 5,
    "property3": true
  }
}

Примеры карточек

Trello

Карточка создана в списке:

Пример карточки Trello.

Ниже показано, как создается эта карточка.

Схема, на которой показаны элементы демонстрационной карточки Trello.

Ниже показана та же карточка с развернутым действием Добавить комментарий.

Демонстрационная карточка Trello с развернутой карточкой действия.

Ниже показано, как создается действие Добавить комментарий.

Схема, на которой показаны элементы демонстрационной карточки Trello с развернутой карточкой действия.

Trello JSON

{
  "summary": "Card \"Test card\"",
  "themeColor": "0078D7",
  "title": "Card created: \"Name of card\"",
  "sections": [
    {
      "activityTitle": "David Claux",
      "activitySubtitle": "9/13/2016, 3:34pm",
      "activityImage": "https://connectorsdemo.azurewebsites.net/images/MSC12_Oscar_002.jpg",
      "facts": [
        {
          "name": "Board:",
          "value": "Name of board"
        },
        {
          "name": "List:",
          "value": "Name of list"
        },
        {
          "name": "Assigned to:",
          "value": "(none)"
        },
        {
          "name": "Due date:",
          "value": "(none)"
        }
      ],
      "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
    }
  ],
  "potentialAction": [
    {
      "@type": "ActionCard",
      "name": "Set due date",
      "inputs": [
        {
          "@type": "DateInput",
          "id": "dueDate",
          "title": "Select a date"
        }
      ],
      "actions": [
        {
          "@type": "HttpPOST",
          "name": "OK",
          "target": "https://..."
        }
      ]
    },
    {
      "@type": "ActionCard",
      "name": "Move",
      "inputs": [
        {
          "@type": "MultichoiceInput",
          "id": "move",
          "title": "Pick a list",
          "choices": [
            { "display": "List 1", "value": "l1" },
            { "display": "List 2", "value": "l2" }
          ]
        }
      ],
      "actions": [
        {
          "@type": "HttpPOST",
          "name": "OK",
          "target": "https://..."
        }
      ]
    },
    {
      "@type": "ActionCard",
      "name": "Add a comment",
      "inputs": [
        {
          "@type": "TextInput",
          "id": "comment",
          "isMultiline": true,
          "title": "Enter your comment"
        }
      ],
      "actions": [
        {
          "@type": "HttpPOST",
          "name": "OK",
          "target": "https://..."
        }
      ]
    },
    {
      "@type": "OpenUri",
      "name": "View in Trello",
      "targets": [
        { "os": "default", "uri": "https://..." }
      ]
    }
  ]
}

Twitter

Ниже показан пример карточки дайджеста Twitter.

Пример карточки дайджеста Twitter.

Ниже показано, как создается эта карточка.

Схема, на которой показаны элементы демонстрационной карточки дайджеста Twitter.

Twitter JSON

{
  "themeColor": "0078D7",
  "sections": [
    {
      "activityTitle": "**Elon Musk**",
      "activitySubtitle": "@elonmusk - 9/12/2016 at 5:33pm",
      "activityImage": "https://pbs.twimg.com/profile_images/782474226020200448/zDo-gAo0.jpg",
      "activityText": "Climate change explained in comic book form by xkcd xkcd.com/1732"
    },
    {
      "activityTitle": "**Mark Knopfler**",
      "activitySubtitle": "@MarkKnopfler - 9/12/2016 at 1:12pm",
      "activityImage": "https://pbs.twimg.com/profile_images/378800000221985528/b2ebfafca6fd7b565fdf3bf4ccdb4dc9.jpeg",
      "activityText": "Mark Knopfler features on B.B King's all-star album of Blues greats, released on this day in 2005..."
    }
  ]
}

Интерактивная электронная почта

Ниже приведен пример текста сообщения электронной почты в формате HTML с внедренной карточкой сообщения.

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <script type="application/ld+json">{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "originator": "",
    "hideOriginalBody": "true",
    "themeColor": "0072C6",
    "title": "Visit the Outlook Dev Portal",
    "text": "Click **Learn More** to learn more about Actionable Messages!",
    "potentialAction": [
      {
        "@type": "ActionCard",
        "name": "Send Feedback",
        "inputs": [
          {
            "@type": "TextInput",
            "id": "feedback",
            "isMultiline": true,
            "title": "Let us know what you think about Actionable Messages"
          }
        ],
        "actions": [
          {
            "@type": "HttpPOST",
            "name": "Send Feedback",
            "isPrimary": true,
            "target": "http://..."
          }
        ]
      },
      {
        "@type": "OpenUri",
        "name": "Learn More",
        "targets": [
          { "os": "default", "uri": "https://learn.microsoft.com/outlook/actionable-messages" }
        ]
      }
    ]
  }
  </script>
</head>
<body>
Visit the <a href="https://learn.microsoft.com/outlook/actionable-messages">Outlook Dev Portal</a> to learn more about Actionable Messages.
</body>
</html>