class_docstr: A Hangouts communication channel.
class_docstr_tok: ["A","Hangouts","communication","channel","."]
code: def _text_button_card(text: Text, buttons: List) -> Union[Dict, None]:
      hangouts_buttons = []
      for b in buttons:
          try:
              b_txt, b_pl = b["title"], b["payload"]
          except KeyError:
              logger.error(
                  "Buttons must be a list of dicts with 'title' and 'payload' as keys"
              )
              return None
  
          hangouts_buttons.append(
              {
                  "textButton": {
                      "text": b_txt,
                      "onClick": {"action": {"actionMethodName": b_pl}},
                  }
              }
          )
  
      card = {
          "cards": [
              {
                  "sections": [
                      {
                          "widgets": [
                              {"textParagraph": {"text": text}},
                              {"buttons": hangouts_buttons},
                          ]
                      }
                  ]
              }
          ]
      }
      return card
  
imports: import copy
  import logging
  import structlog
  import google.auth.transport.requests
  import cachecontrol
  import requests
  from asyncio import CancelledError
  from sanic import Blueprint, response
  from sanic.request import Request
  from typing import Text, List, Dict, Any, Optional, Callable, Iterable, Awaitable, Union
  from google.oauth2 import id_token
  from sanic.response import HTTPResponse
  from sanic.exceptions import SanicException
  from rasa.core.channels.channel import InputChannel, OutputChannel, UserMessage
label_desc: Use image node_id 5 for calling the HangoutsOutput obj's underlying member method code with example usage: obj._text_button_card(text, buttons) and returns: card, None