private string FormatSlackMessage()

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;
            }
        }
    }