def create_card_message()

in chat-client/main.py [0:0]


def create_card_message(pubsub_message):
    if "release_note" in pubsub_message:
        release_note = pubsub_message.get("release_note")
        title = f"New Release from {release_note.get('product')}"
        subtitle = release_note.get("date")
        # Replace html header <h3> with <b> formatting that Chat API supports
        # https://developers.google.com/apps-script/add-ons/concepts/widgets#text_formatting
        card_msg = re.sub(
            r"<h3>(?P<header>.*?)</h3>", r"<b>\g<header></b>", release_note.get("html")
        )
        link = release_note.get("link")
    elif "blog" in pubsub_message:
        blog = pubsub_message.get("blog")
        title = f"New Blog from {blog.get('category_name')}"
        subtitle = blog.get("date")
        card_msg = f"<b>{blog.get('title')}</b><br><br>{blog.get('summary')}"
        link = blog.get("link")
    else:
        title = "An Error Occurred"
        subtitle = ""
        card_msg = f"An unexpected error occurred."
        link = ""

    return {
        "thread": {"threadKey": f"{link}"},
        "cardsV2": [
            {
                "card": {
                    "header": {
                        "title": f"{title}",
                        "subtitle": subtitle,
                    },
                    "sections": [
                        {
                            "widgets": [
                                {
                                    "textParagraph": {
                                        "text": card_msg,
                                    }
                                },
                                {"divider": {}},
                                {
                                    "decoratedText": {
                                        "text": f"<a href='{link}'>Read more</a>",
                                        "startIcon": {
                                            "materialIcon": {
                                                "name": "link",
                                            }
                                        },
                                    }
                                },
                            ],
                        }
                    ],
                }
            }
        ],
    }