BUTTON_MAX = 3 BUTTON_TITLE_MAX = 20 GENERIC_CARD_MAX = 10 CARD_TITLE_MAX = 80 CARD_SUBTITLE_MAX = 80 def build_button_template(text: str, buttons: list[dict]) -> dict: return { "text": text[:640], "buttons": buttons[:BUTTON_MAX], } def build_generic_template(cards: list[dict], image_aspect_ratio: str = "horizontal") -> dict: return { "elements": cards[:GENERIC_CARD_MAX], "image_aspect_ratio": image_aspect_ratio, } def build_media_template(media_type: str, url: str, button: dict | None = None) -> dict: result: dict = { "elements": [ { "media_type": media_type, "url": url, } ], } if button: result["elements"][0]["buttons"] = [button] return result def build_receipt_template( recipient_name: str, order_number: str, currency: str, payment_method: str, summary: dict, elements: list[dict] | None = None, address: dict | None = None, adjustments: list[dict] | None = None, ) -> dict: result: dict = { "recipient_name": recipient_name, "order_number": order_number, "currency": currency, "payment_method": payment_method, "summary": summary, } if elements: result["elements"] = elements[:100] if address: result["address"] = address if adjustments: result["adjustments"] = adjustments return result def build_url_button(title: str, url: str, webview_height_ratio: str = "full") -> dict: return { "type": "web_url", "url": url, "title": title[:BUTTON_TITLE_MAX], "webview_height_ratio": webview_height_ratio, } def build_postback_button(title: str, payload: str) -> dict: return { "type": "postback", "title": title[:BUTTON_TITLE_MAX], "payload": payload, } def build_phone_number_button(title: str, phone_number: str) -> dict: return { "type": "phone_number", "title": title[:BUTTON_TITLE_MAX], "payload": phone_number, } def build_generic_card( title: str, subtitle: str = "", image_url: str = "", buttons: list[dict] | None = None, default_action: dict | None = None, ) -> dict: card: dict = { "title": title[:CARD_TITLE_MAX], } if subtitle: card["subtitle"] = subtitle[:CARD_SUBTITLE_MAX] if image_url: card["image_url"] = image_url if buttons: card["buttons"] = buttons[:BUTTON_MAX] if default_action: card["default_action"] = default_action return card