Получение сообщений, отфильтрованных по идентификатору разговора, через API Office365.

У меня возникли проблемы с выяснением того, как использовать API office365 для получения сообщений с conversationId.

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

Я сделаю запрос, как

https://outlook.office.com/api/v1.0/me/Messages?$filter=ConversationId%20eq%20AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow=

Это приводит к такому 400 ответу:

{
  "error": {
    "code": "RequestBroker-ParseUri",
    "message": "Syntax error at position 98 in 'ConversationId eq AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow='."
  }
}

Я пробовал другие вещи, такие как URL-адрес, кодирующий идентификатор разговора в AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow%3D, что приводит к той же ошибке.

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

https://outlook.office.com/api/v1.0/me/Messages?$filter=ConversationId%20eq%20AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow

но это приводит к следующей ошибке

{
  "error": {
    "code": "RequestBroker-ParseUri",
    "message": "Could not find a property named 'AAQkADlkOGJmMTFmLTc2NjMtMKL3My04ZDhkLTVmZWNjMzA1ODY0NAAQAB11Xh2opSpBiXifMEJjhow' on type 'Microsoft.OutlookServices.Message'."
  }
}

Я также пытался возиться с заглавными буквами URL и использовать знаки + вместо %20 для строки фильтра, но я постоянно получаю 400 ошибок.

Однако я могу фильтровать по другим полям. Например

https://outlook.office.com/api/v1.0/me/Messages?$filter=IsRead%20eq%20true

возвращает сообщения, отфильтрованные, как я и ожидал.

Есть идеи, что может происходить с фильтром ConversationId?


person johncorser    schedule 13.12.2016    source источник


Ответы (1)


Вам нужно заключить ConversationId в одинарные кавычки. Вот как я подделываю свой запрос на С#

string finalUrl = "https://outlook.office.com/api/beta/me/Messages?$filter=" + HttpUtility.UrlEncode(string.Format("ConversationId eq '{0}'", conversationId));
person Benoit Patra    schedule 13.12.2016
comment
Это правильный ответ на мой вопрос, но у меня есть продолжение. В настоящее время, используя этот фильтр, я получаю 0 результатов, хотя это реальный идентификатор разговора. Таким образом, я могу получить сообщение с моим идентификатором разговора, но когда я фильтрую по идентификатору разговора, сообщение не возвращается. У вас случайно нет решения или объяснения этому? - person johncorser; 14.12.2016
comment
1) вы уверены, что носитель аутентификации предназначен для почтового ящика с этим ConversationId ? 2) Можете ли вы попробовать обновленную версию API, например. v2 или бета? - person Benoit Patra; 14.12.2016