in functions/slack/SlackKnowledgeGraphSearch/Function.cs [102:146]
private string FormatSlackMessage(SearchResponse kgResponse, string query)
{
JObject attachment = new JObject();
JObject response = new JObject();
response["response_type"] = "in_channel";
response["text"] = $"Query: {query}";
var element = kgResponse.ItemListElement?.FirstOrDefault() as JObject;
if (element is object && element.TryGetValue("result", out var entityToken) &&
entityToken is JObject entity)
{
string title = (string) entity["name"];
if (entity.TryGetValue("description", out var description))
{
title = $"{title}: {description}";
}
attachment["title"] = title;
if (entity.TryGetValue("detailedDescription", out var detailedDescriptionToken) &&
detailedDescriptionToken is JObject detailedDescription)
{
AddPropertyIfPresent(detailedDescription, "url", "title_link");
AddPropertyIfPresent(detailedDescription, "articleBody", "text");
}
if (entity.TryGetValue("image", out var imageToken) &&
imageToken is JObject image)
{
AddPropertyIfPresent(image, "contentUrl", "image_url");
}
}
else
{
attachment["text"] = "No results match your query...";
}
response["attachments"] = new JArray { attachment };
return response.ToString();
void AddPropertyIfPresent(JObject parent, string sourceProperty, string targetProperty)
{
if (parent.TryGetValue(sourceProperty, out var propertyValue))
{
attachment[targetProperty] = propertyValue;
}
}
}