Создание надстройки Outlook для поставщика собраний по сети

Настройка собрания по сети — это основной интерфейс для пользователя Outlook, и вы можете легко создать собрание Teams с помощью Outlook. Однако создание собрания по сети в Outlook с помощью службы сторонних поставщиков может быть громоздким. Реализуя эту функцию, поставщики услуг могут упростить процесс создания собраний по сети и присоединения к ней для пользователей надстройки Outlook.

Из этой статьи вы узнаете, как настроить надстройку Outlook, чтобы пользователи могли организовать собрание и присоединиться к нему с помощью службы собраний по сети. В этой статье мы будем использовать вымышленного поставщика услуг онлайн-собраний Contoso.

Важно!

Эта функция поддерживается в Outlook в Интернете, Windows (новая и классическая версия), Mac, Android и iOS с подпиской На Microsoft 365.

Настройка среды

Выполните краткое руководство по Outlook , в котором создадите проект надстройки с помощью генератора Yeoman для надстроек Office.

Настройка манифеста

Действия по настройке манифеста зависят от типа манифеста, выбранного в кратком руководстве.

Примечание.

Надстройки, использующие унифицированный манифест для Microsoft 365, не поддерживаются в Outlook на Mac и на мобильных устройствах. Мы прилагаем все усилия, чтобы обеспечить поддержку на Mac и мобильных устройствах. В то же время для поддержки этих платформ необходимо создать версию надстройки, которая использует только манифест надстройки, а затем развернуть и обслуживать обе версии. Дополнительные сведения см. в разделе "Поддержка клиентов и платформ" статьи Надстройки Office с манифестом унифицированного приложения для Microsoft 365.

  1. Откройте файл manifest.json .

  2. Найдите первый объект в массиве "authorization.permissions.resourceSpecific" и задайте для его "name" свойства значение "MailboxItem.ReadWrite.User". Это должно выглядеть так, когда вы закончите.

    {
        "name": "MailboxItem.ReadWrite.User",
        "type": "Delegated"
    }
    
  3. Добавьте следующий объект в массив "extensions.runtimes". Обратите внимание на указанные ниже аспекты этого кода.

    • Для "minVersion" набора обязательных почтовых ящиков задано значение , "1.3" поэтому среда выполнения не будет запускаться на платформах и в версиях Office, где эта функция не поддерживается.
    • Для "id" среды выполнения задается описательное имя "online_meeting_runtime".
    • Для "code.page" свойства задается URL-адрес HTML-файла без пользовательского интерфейса, который будет загружать команду функции.
    • Свойству "lifetime" присвоено значение "short" , что означает, что среда выполнения запускается при выборе кнопки команды функции и завершает работу после завершения функции. (В некоторых редких случаях среда выполнения завершает работу до завершения обработчика. См . раздел Среды выполнения в надстройках Office.)
    • Существует действие для запуска функции с именем "insertContosoMeeting". Вы создадите эту функцию на следующем шаге.
    {
        "requirements": {
            "capabilities": [
                {
                    "name": "Mailbox",
                    "minVersion": "1.3"
                }
            ],
            "formFactors": [
                "desktop"
            ]
        },
        "id": "online_meeting_runtime",
        "type": "general",
        "code": {
            "page": "https://localhost:3000/commands.html"
        },
        "lifetime": "short",
        "actions": [
            {
                "id": "insertContosoMeeting",
                "type": "executeFunction"
            }
        ]
    }
    
  4. Замените "extensions.ribbons" массив следующим кодом. Обратите внимание на следующие особенности этой разметки.

    • Для "minVersion" набора обязательных почтовых ящиков задано значение "1.3" , поэтому настройки ленты не будут отображаться на платформах и в версиях Office, где эта функция не поддерживается.
    • Массив "contexts" указывает, что лента доступна только в окне организатора сведений о собрании.
    • На вкладке ленты по умолчанию (в окне организатора сведений о собрании) будет находиться пользовательская группа управления, помеченная как собрание Contoso.
    • Группа будет иметь кнопку с меткой Добавить собрание.
    • Для кнопки "actionId" задано значение "insertContosoMeeting", которое соответствует "id" действию, созданному на предыдущем шаге.
    "ribbons": [
      {
        "requirements": {
            "capabilities": [
                {
                    "name": "Mailbox",
                    "minVersion": "1.3"
                }
            ],
            "scopes": [
                "mail"
            ],
            "formFactors": [
                "desktop"
            ]
        },
        "contexts": [
            "meetingDetailsOrganizer"
        ],
        "tabs": [
            {
                "builtInTabId": "TabDefault",
                "groups": [
                    {
                        "id": "apptComposeGroup",
                        "label": "Contoso meeting",
                        "controls": [
                            {
                                "id": "insertMeetingButton",
                                "type": "button",
                                "label": "Add meeting",
                                "icons": [
                                    {
                                        "size": 16,
                                        "url": "icon-16.png"
                                    },
                                    {
                                        "size": 32,
                                        "url": "icon-32.png"
                                    },
                                    {
                                        "size": 64,
                                        "url": "icon-64_02.png"
                                    },
                                    {
                                        "size": 80,
                                        "url": "icon-80.png"
                                    }
                                ],
                                "supertip": {
                                    "title": "Add a Contoso meeting",
                                    "description": "Add a Contoso meeting to this appointment."
                                },
                                "actionId": "insertContosoMeeting",
                            }
                        ]
                    }
                ]
            }
        ]
      }
    ]
    

Добавление поддержки мобильных устройств

  1. Откройте файл manifest.json .

  2. В массиве "extensions.ribbons.requirements.formFactors" добавьте "mobile" как элемент. По завершении массив должен выглядеть следующим образом.

"formFactors": [
    "desktop",
    "mobile"
]
  1. В массиве "extensions.ribbons.contexts" добавьте onlineMeetingDetailsOrganizer как элемент. По завершении массив должен выглядеть следующим образом.
"contexts": [
    "meetingDetailsOrganizer",
    "onlineMeetingDetailsOrganizer"
],
  1. В массиве найдите "extensions.ribbons.tabs" вкладку с параметром "TabDefault""builtInTabId" . Добавьте в него дочерний "customMobileRibbonGroups" массив (в качестве однорангового узла существующего "groups" свойства). По завершении "tabs" массив должен выглядеть следующим образом:
"tabs": [
    {
        "builtInTabId": "TabDefault",
        "groups": [
            <-- non-mobile group objects omitted -->
        ],
        "customMobileRibbonGroups": [
            {
                "id": "mobileApptComposeGroup",
                "label": "Contoso Meeting",
                "controls": [
                    { 
                        "id": "mobileInsertMeetingButton",
                        "label": "Add meeting",
                        "type": "mobileButton",
                        "actionId": "insertContosoMeeting",
                        "icons": [
                            {
                                "scale": 1,
                                "size": 25,
                               "url": "https://localhost:3000/assets/icon-25.png"
                            },
                            {
                                "scale": 1,
                                "size": 32,
                                "url": "https://localhost:3000/assets/icon-32.png"
                            },
                            {
                                "scale": 1,
                                "size": 48,
                                "url": "https://localhost:3000/assets/icon-48.png"
                            },                                
                            {
                                "scale": 2,
                                "size": 25,
                                "url": "https://localhost:3000/assets/icon-25.png"
                            },
                            {
                                "scale": 2,
                                "size": 32,
                                "url": "https://localhost:3000/assets/icon-32.png"
                            },
                            {
                                "scale": 2,
                                "size": 48,
                                "url": "https://localhost:3000/assets/icon-48.png"
                            },                                
                            {
                                "scale": 3,
                                "size": 25,
                                "url": "https://localhost:3000/assets/icon-25.png"
                            },
                            {
                                "scale": 3,
                                "size": 32,
                                "url": "https://localhost:3000/assets/icon-32.png"
                            },
                            {
                                "scale": 3,
                                "size": 48,
                                "url": "https://localhost:3000/assets/icon-48.png"
                            }
                        ]
                    }
                ]
            }
        ]
    }
]  

Реализация добавления сведений о собрании по сети

В этом разделе вы узнаете, как скрипт надстройки может обновить собрание пользователя, чтобы включить сведения о собрании по сети. Следующее относится ко всем поддерживаемым платформам.

  1. В том же проекте быстрого запуска откройте файл ./src/commands/commands.js в редакторе кода.

  2. Замените все содержимое файлаcommands.js следующим кодом JavaScript.

    // 1. Construct online meeting details.
    // Not shown: How to get the meeting organizer's ID and other details from your service.
    const newBody = '<br>' +
        '<a href="https://contoso.com/meeting?id=123456789" target="_blank">Join Contoso meeting</a>' +
        '<br><br>' +
        'Phone Dial-in: +1(123)456-7890' +
        '<br><br>' +
        'Meeting ID: 123 456 789' +
        '<br><br>' +
        'Want to test your video connection?' +
        '<br><br>' +
        '<a href="https://contoso.com/testmeeting" target="_blank">Join test meeting</a>' +
        '<br><br>';
    
    let mailboxItem;
    
    Office.onReady(function () {
            mailboxItem = Office.context.mailbox.item;
        }
    );
    
    // 2. Define and register a function command named `insertContosoMeeting` (referenced in the manifest)
    //    to update the meeting body with the online meeting details.
    function insertContosoMeeting(event) {
        // Get HTML body from the client.
        mailboxItem.body.getAsync("html",
            { asyncContext: event },
            function (getBodyResult) {
                if (getBodyResult.status === Office.AsyncResultStatus.Succeeded) {
                    updateBody(getBodyResult.asyncContext, getBodyResult.value);
                } else {
                    console.error("Failed to get HTML body.");
                    getBodyResult.asyncContext.completed({ allowEvent: false });
                }
            }
        );
    }
    // Register the function.
    Office.actions.associate("insertContosoMeeting", insertContosoMeeting);
    
    // 3. Implement a supporting function `updateBody`
    //    that appends the online meeting details to the current body of the meeting.
    function updateBody(event, existingBody) {
        // Append new body to the existing body.
        mailboxItem.body.setAsync(existingBody + newBody,
            { asyncContext: event, coercionType: "html" },
            function (setBodyResult) {
                if (setBodyResult.status === Office.AsyncResultStatus.Succeeded) {
                    setBodyResult.asyncContext.completed({ allowEvent: true });
                } else {
                    console.error("Failed to set HTML body.");
                    setBodyResult.asyncContext.completed({ allowEvent: false });
                }
            }
        );
    }
    

Тестирование и проверка надстройки

Чтобы протестировать и проверить надстройку, загрузите неопубликованный манифест в Outlook в Интернете или в Windows (новая или классическая версия). Если вы используете только манифест надстройки, вы также можете загрузить неопубликованное приложение на Mac. Для надстройки, поддерживающей мобильные устройства, перезапустите Outlook на устройстве Android или iOS после загрузки неопубликованных приложений. После загрузки надстройки неопубликованного приложения создайте собрание и убедитесь, что переключатель Microsoft Teams или Skype заменен вашим собственным.

Примечание.

Надстройки, использующие унифицированный манифест, не могут быть загружены неопубликованным приложением в Outlook на Mac или на мобильных устройствах. Чтобы запустить надстройку этого типа, ее необходимо сначала опубликовать в Microsoft Marketplace, а затем развернуть в центре Microsoft 365 Admin. Дополнительные сведения см. в разделе "Поддержка клиентов и платформ" статьи Надстройки Office с манифестом унифицированного приложения для Microsoft 365.

Создание пользовательского интерфейса собрания

Пользовательский интерфейс организатора собрания зависит от клиента Outlook.

Outlook в Интернете и новый Outlook в Windows

Экран создания собрания в Outlook в Интернете и новый Outlook в Windows.

Классический Outlook в Windows

Экран создания собрания в классической версии Outlook в Windows.

Outlook для Mac

Экран создания собрания в Outlook на Mac.

Outlook на мобильных устройствах

Экран создания собрания в Outlook для Android с выключенным переключателем Contoso. Экран создания собрания в Outlook для Android с переключателем загрузки Contoso. Экран создания собрания в Outlook для Android с переключателем Contoso.

Присоединение к пользовательскому интерфейсу собрания

Пользовательский интерфейс участника собрания зависит от клиента Outlook.

Outlook в Интернете и новый Outlook в Windows

Экран присоединения к собранию в Outlook в Интернете и новый Outlook в Windows.

Классический Outlook в Windows

Экран присоединения к собранию в классической версии Outlook в Windows.

Outlook для Mac

Экран присоединения к собранию в Outlook на Mac.

Outlook на мобильных устройствах

Экран присоединения к собранию в Outlook в Android.

Примечание.

Надстройка для собраний по сети должна соответствовать определенным требованиям, чтобы включить кнопки "Присоединиться" и "Чат" в Outlook в Интернете, на Mac, в Android, iOS и в новом Outlook для Windows. Кнопки "Присоединиться" и "Чат" не поддерживаются в классической версии Outlook в Windows. Дополнительные сведения см. в разделе Реализация кнопок присоединения и чата.

Реализация кнопок "Присоединиться" и "Чат"

Кнопки Присоединиться и Чат отображаются в пользовательском интерфейсе собрания, только если:

  • Надстройка для собраний по сети публикуется в Microsoft Marketplace. Бизнес-надстройки не поддерживаются.
  • Надстройка зарегистрирована.
  • Участник собрания использует Outlook в Интернете, на Mac, Android, в iOS или новый Outlook в Windows.
  • Только кнопка чата. URL-адрес чата в тексте собрания должен быть добавлен с параметром owa-chat=1 запроса.

Регистрация шаблона собрания по сети

Чтобы зарегистрировать надстройку для собраний по сети, после публикации надстройки в Microsoft Marketplace создайте проблему с GitHub, используя следующие рекомендации. Мы свяжемся с вами для координации регистрации временная шкала.

  1. Создайте новую проблему GitHub.
  2. Задайте для новой проблемы заголовок "Outlook: регистрация шаблона собрания по сети для my-service", заменив my-service именем своей службы.
  3. В тексте проблемы замените существующий текст следующим текстом:
  4. Нажмите кнопку Отправить новую проблему.

Новый экран проблемы GitHub с примером содержимого Contoso.

Добавление поддержки кнопки "Чат"

Чтобы добавить поддержку кнопки Чат , в код JavaScript необходимо включить в текст собрания URL-адрес, включающий owa-chat=1 параметр запроса. Ниже приведен пример.

'<a href="https://contoso.com/chat?id=123456789&owa-chat=1" target="_blank">Chat with meeting participants</a>'

Автоматическое предоставление ресурсов и обновлений после собрания участникам

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

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

Для реализации требуется следующее:

  • Маркер доступа для выполнения вызовов Microsoft API Graph. Инструкции см. в статье Использование REST API Microsoft Graph из надстройки Outlook.
  • Индикатор вашей надстройки, когда собрание, запланированное с вашей надстройкой для собраний по сети, завершилось.
  • Доступ к идентификатору Exchange собрания и идентификатору, назначенному надстройкой.
  • Доступ к необходимым ресурсам, которые будут добавлены в собрание.
  • Доступ к экземпляру собрания, созданному организатором. Для распространения на экземпляр собрания участников необходимо ввести изменения в экземпляр собрания организатора.
  1. По завершении собрания настройте надстройку для получения ресурсов, которые будут добавлены в объект собрания.
  2. Используйте microsoft API Graph, чтобы получить экземпляр собрания организатора. Убедитесь body , что свойство включено в запрос. Сведения об API см. в разделе Получение события.
  3. Обновите текст собрания соответствующими ресурсами собрания. Сведения об API см. в разделе Событие обновления.

Важно!

При внесении изменений в body свойство собрания обязательно сохраните большой двоичный объект собрания по сети. При удалении большого двоичного объекта собрания из текста отключается функция собрания по сети.

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

Ниже приведен пример обновления текста собрания с помощью ссылки на запись видео.

const options = {
    authProvider,
};

const client = Client.init(options);

// Get the body of the meeting.
const currentEvent = await client.api('/users/{organizerId}/events/{meetingId}')
    .select('body')
    .get();

const existingBody = currentEvent.body.content;

// Update the body with a link to a video recording.
const meetingResources = `
<br><br>
<h2>Meeting summary</h2>
<p>The team discussed monthly sales targets for Fabrikam. Current market conditions were discussed. A follow-up meeting will be scheduled to finalize revenue goals for the quarter.</p>
<a href="https://contoso.com/recording/123456789" target="_blank">View recording</a>
`;

const updatedBody = existingBody + meetingResources;

const updatedEvent = {
  body: {
    contentType: 'html',
    content: updatedBody
  }
};

// Update the event with the new body content.
await client.api('/users/{organizerId}/events/{meetingId}')
    .update(updatedEvent);

Доступные API

Для этой функции доступны следующие API.

Ограничения

Применяется несколько ограничений.

  • Применимо только к поставщикам услуг собраний по сети.
  • На экране создания собрания будут отображаться только установленные администратором надстройки, заменяющие параметры Teams или Skype по умолчанию. Установленные пользователем надстройки не активируются.
  • Значок надстройки должен быть в оттенках серого с использованием шестнадцатеричного кода #919191 или его эквивалента в других цветовых форматах.
  • В режиме организатора встреч (создание) поддерживается только одна команда функции.
  • Надстройка должна обновить сведения о собрании в форме встречи в течение одной минуты времени ожидания. Однако любое время, затраченное в диалоговом окне надстройки, открытой для проверки подлинности, например, исключается из периода ожидания.

См. также