У меня есть требование автоматически публиковать сообщение на канале Teams и упоминать канал. К сожалению, через MS Flow возможность упомянуть весь канал недоступна, однако кажется, что через бета-версию Graph API я могу упомянуть весь канал.
Сначала я попробовал через Graph Explorer, изменив ГЛАГОЛ на POST и установив URL-адрес на <https://graph.microsoft.com/beta/teams/{group ID}/channels/{channel id}/messages>
Кроме того, добавлено тело запроса ниже
{
"subject": "@Mention in Teams channel post!",
"body": {
"content": "Hello <at id ='0'>{channel name}</at>, Test message on the channel with at mention.",
"contentType": "html"
},
"mentions": [
{
"id": 0,
"mentionText": "{channel name}",
"mentioned": {
"conversation": {
"id": "{channel id}",
"displayName": "{channel name}",
"[email protected]": "#Microsoft.Teams.GraphSvc.conversationIdentityType",
"conversationIdentityType": "channel"
}
}
}
]
}
Когда нажимается Run Query, сообщение успешно публикуется и упоминается канал. Затем я извлек фрагмент кода из обозревателя графиков для кода C#, что привело к приведенному ниже коду.
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
var chatMessage = new ChatMessage
{
Subject = "@Mention in Teams channel post!",
Body = new ItemBody
{
Content = "Hello <at id ='0'>{channel name}</at>, Test message on the channel with at mention.",
ContentType = BodyType.Html
},
Mentions = new List<ChatMessageMention>()
{
new ChatMessageMention
{
Id = 0,
MentionText = "{channel name}",
Mentioned = new IdentitySet
{
AdditionalData = new Dictionary<string, object>()
{
{"conversation", "{\"id\":\"{channel id}\",\"displayName\":\"{channel name}\",\"[email protected]\":\"#Microsoft.Teams.GraphSvc.conversationIdentityType\",\"conversationIdentityType\":\"channel\"}"}
}
}
}
}
};
await graphClient.Teams["{group id}"].Channels["{channel id}"].Messages
.Request()
.AddAsync(chatMessage);
Однако при выполнении кода отображается следующая ошибка:
ServiceException: Код: BadRequest Сообщение: отправлено неверное тело запроса.
Удаление упоминаний или изменение упоминаний для использования Пользователя работает успешно. Также обратите внимание, что я пытался использовать как Microsoft.Graph, так и Microsoft.Graph.Beta.
Какую dll версии Microsoft graph вы используете в своем приложении?
@Trinetra-MSFT Я использую Microsoft.Graph.Beta версии 0.35.0-preview. Однако Шива - ответ MSFT Identity ниже работал нормально
Я провел долгое исследование по этому вопросу и обнаружил, что проблема с десериализацией происходит на сервере Graph из-за кода, написанного таким образом. Основная проблема с беседой в свойстве Mentioned. Серверу Graph не удалось понять сериализованное содержимое, поэтому попробуйте его десериализовать перед отправкой запроса, как показано ниже.
Identity A = JsonConvert.DeserializeObject<Identity>("{\"id\":\"{channel id}\",\"displayName\":\"{channel name}\",\"[email protected]\":\"#Microsoft.Teams.GraphSvc.conversationIdentityType\",\"conversationIdentityType\":\"channel\"}");
var chatMessage = new ChatMessage
{
Subject = "@Mention in Teams channel post!",
Body = new ItemBody
{
Content = "Hello <at id ='0'>General</at>, Test message on the channel with at mention.",
ContentType = BodyType.Html
},
Mentions = new List<ChatMessageMention>()
{
new ChatMessageMention
{
Id = 0,
MentionText = "General",
Mentioned = new IdentitySet
{
AdditionalData = new Dictionary<string, object>()
{
{"conversation", A}
}
}
}
}
};
try
{
await graphClient.Teams["d3b31e36-d63d-4bbe-9478-b4cc7cb17a3d"].Channels["19:[email protected]"].Messages
.Request()
.AddAsync(chatMessage);
}
catch(Exception e)
{
Console.WriteLine(e);
}
}
Это будет работать.
Привет, Марк, если опубликованный ответ решает ваш вопрос, проголосуйте за него или отметьте его как ответ, нажав на галочку. Это помогает другим найти ответы на свои вопросы. См. meta.stackexchange.com/questions/5234/…