Хобрук: Ваш путь к мастерству в программировании

Попытка получить неизменяемые идентификаторы через REST API v2.0

Я работаю над надстройкой Outlook (в настоящее время тестируется в Интернете). Мне нужно получить несколько неизменяемых идентификаторов, чтобы я мог хранить ссылки на эти электронные письма на нашей платформе. Я прочитал отличный ответ от команды Outlook и получил весь день безуспешно пытался вызвать translateExchangeIds. Во-первых, я действительно не смог найти документ, в котором говорилось бы, что эта конечная точка действительно существует в API REST v2.0. Я могу сказать, что он действительно существует, потому что я получаю сообщения об ошибках, в которых говорится, что полезная нагрузка не соответствует тому, что конечная точка говорит, что ей нужно, если я просто немного изменю регистр json-объекта. В настоящее время я получаю сообщение об ошибке

code: "ErrorAccessDenied" message: "Access is denied. Check credentials and try again."

Кажется довольно очевидным, что я должен проверять свои права доступа. В документах, которые я могу найти, упоминается, что мне нужен User.ReadBasic. На самом деле это не то, как я бы определял разрешения для надстройки Outlook. В файле manifest.xml для моего добавления я определил разрешения

 <Permissions>ReadWriteMailbox</Permissions>

Этого должно быть более чем достаточно для вызова этой конечной точки.

const getImmutableId = async () => new Promise<string>((resolve) => {
  Office.context.mailbox.getCallbackTokenAsync(
    { isRest: true },
    (result: Office.AsyncResult<string>) => {
      const headers = new Headers();
      headers.append('Authorization', `Bearer ${result.value}`);
      headers.append('content-type', 'application/json');
      headers.append('data-type', 'json');
      headers.append('process-data', 'false');
      fetch(`${Office.context.mailbox.restUrl}/v2.0/me/translateExchangeIds`, {
        headers,
        method: 'POST',
        body: JSON.stringify({
          InputIds: [
            Office.context.mailbox.item.itemId,
          ],
          SourceIdType: 'ewsId',
          TargetIdType: 'restImmutableEntryId',
        }),
      }).then((response: Response) => {
        if (response.ok) {
          response.json().then((restResponse: {targetId: string, sourceId: string}[]) => {
            resolve(restResponse[0].targetId);
          });
        } else {
          // eslint-disable-next-line no-console
          console.warn('there was a failire to get an immutable id falling back to mutable rest id');
          resolve(Office.context.mailbox.convertToRestId(
            Office.context.mailbox.item.itemId, Office.MailboxEnums.RestVersion.v2_0,
          ));
        }
      });
    },
  );
});

Любая помощь будет принята с благодарностью.


Ответы:


1

В сообщении StackOverflow, которое вы читаете (ссылка), говорится, что пример кода неполный, поскольку токен, предоставленный _ 1_ В вызове API отсутствует _ 2_ разрешение, которое требуется для _ 3_ REST API. Существует существующий сообщение UserVoice о неизменяемых идентификаторах. Пожалуйста, добавьте сюда свой голос. Запросы функций для пользовательского голоса учитываются в процессе планирования.

21.05.2020
  • так что getAccessTokenAsync доступен только в предварительной версии библиотеки Office js правильно? getCallbackTokenAsync ‹- не поможет ли мне получить токен, необходимый для этого вызова? Я не понимаю, откуда взялся User.ReadBasic.All. Я не вижу такой вариант доступным для элемента Permission в manifest.xml docs.microsoft.com/en-us/office/dev/add-ins/outlook/ А как насчет такого свойства, как InternetMessageId? Я не смогу найти сообщение, используя это, но оно уникальное и неизменное? 22.05.2020
  • Да, getAccessTokenAsync находится в предварительной версии, согласно нашей документации здесь: docs.microsoft.com/en-us/javascript/api/office/. Токен, полученный из getCallbackTokenAsync, не содержит разрешения User.ReadBasic.All. User.ReadBasic.All (docs.microsoft.com/en- us / graph /) - это разрешение для API-интерфейсов Graph, которое необходимо будет встроить в токен, чтобы вы могли успешно вызывать translateExchangeIds. Это разрешение отличается от разрешения в XML-файле манифеста надстройки. 23.05.2020
  • Идентификаторы Интернет-сообщений должны быть уникальными, однако они не являются обязательными и зависят от сервера, который их создал. Поскольку ваша учетная запись электронной почты может получать сообщения электронной почты из нескольких источников, идентификаторы Интернет-сообщений не могут быть однозначно уникальными для каждого почтового ящика. Дополнительная информация здесь: faqs.org/rfcs/rfc2822.html 23.05.2020
  • Новые материалы

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..