Поделиться через


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

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

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

Важно!

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

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

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

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

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

Примечание.

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

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

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

    {
        "name": "MailboxItem.ReadWrite.User",
        "type": "Delegated"
    }
    
  3. В массиве измените "validDomains" URL-адрес на "https://contoso.com", который является URL-адресом вымышленного поставщика онлайн-собраний. По завершении массив должен выглядеть следующим образом.

    "validDomains": [
        "https://contoso.com"
    ],
    
  4. Добавьте следующий объект в массив "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://contoso.com/commands.html"
        },
        "lifetime": "short",
        "actions": [
            {
                "id": "insertContosoMeeting",
                "type": "executeFunction"
            }
        ]
    }
    
  5. Замените "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://contoso.com/assets/icon-25.png"
                            },
                            {
                                "scale": 1,
                                "size": 32,
                                "url": "https://contoso.com/assets/icon-32.png"
                            },
                            {
                                "scale": 1,
                                "size": 48,
                                "url": "https://contoso.com/assets/icon-48.png"
                            },                                
                            {
                                "scale": 2,
                                "size": 25,
                                "url": "https://contoso.com/assets/icon-25.png"
                            },
                            {
                                "scale": 2,
                                "size": 32,
                                "url": "https://contoso.com/assets/icon-32.png"
                            },
                            {
                                "scale": 2,
                                "size": 48,
                                "url": "https://contoso.com/assets/icon-48.png"
                            },                                
                            {
                                "scale": 3,
                                "size": 25,
                                "url": "https://contoso.com/assets/icon-25.png"
                            },
                            {
                                "scale": 3,
                                "size": 32,
                                "url": "https://contoso.com/assets/icon-32.png"
                            },
                            {
                                "scale": 3,
                                "size": 48,
                                "url": "https://contoso.com/assets/icon-48.png"
                            }
                        ]
                    }
                ]
            }
        ]
    }
]  

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

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

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

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

    // 1. How to 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 is ready.
    Office.onReady(function () {
            mailboxItem = Office.context.mailbox.item;
        }
    );
    
    // 2. How to 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. How to 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 заменен вашим собственным.

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

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

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

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

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

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

Важно!

Кнопка Присоединиться поддерживается только в Outlook в Интернете, на Mac, в Android, в iOS и в новом Outlook в Windows. Если вы видите только ссылку на собрание, но не видите кнопку Присоединиться в поддерживаемом клиенте, возможно, шаблон собрания по сети для вашей службы не зарегистрирован на наших серверах. Дополнительные сведения см. в разделе Регистрация шаблона онлайн-собрания .

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

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

Важно!

  • Кнопка Присоединиться поддерживается только в Outlook в Интернете, на Mac, в Android, в iOS и в новом Outlook в Windows.
  • Можно зарегистрировать только надстройки для собраний по сети, опубликованные в Microsoft Marketplace. Бизнес-надстройки не поддерживаются.
  1. Создайте новую проблему GitHub.
  2. Задайте для новой проблемы заголовок "Outlook: регистрация шаблона собрания по сети для my-service", заменив my-service именем своей службы.
  3. В тексте проблемы замените существующий текст следующим текстом:
  4. Нажмите кнопку Отправить новую проблему.

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

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

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

В этом разделе описывается, как использовать 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 или его эквивалента в других цветовых форматах.
  • В режиме организатора встреч (создание) поддерживается только одна команда функции.
  • Надстройка должна обновить сведения о собрании в форме встречи в течение одной минуты времени ожидания. Однако любое время, затраченное в диалоговом окне надстройки, открытой для проверки подлинности, например, исключается из периода ожидания.

См. также