Punya waktu 5 menit? Bantu kami meningkatkan kualitas dokumentasi developer Google Chat dengan mengisi survei singkat.

Buat pesan kartu

Halaman ini menjelaskan cara membuat dan mengirim pesan berbasis kartu sebagai aplikasi Google Chat. Kartu mendukung tata letak yang ditentukan, elemen UI interaktif seperti tombol, dan multimedia seperti gambar. Untuk mempelajari lebih lanjut cara menggunakan kartu, lihat Mendesain UI yang dinamis, interaktif, dan konsisten dengan kartu. Untuk mengetahui informasi selengkapnya tentang pesan, lihat Ringkasan pesan Google Chat.

Prasyarat

Node.js

Catatan: Contoh kode Node.js dalam panduan ini ditulis untuk dijalankan sebagai Google Cloud Function.

Python

Catatan: Contoh kode Python dalam panduan ini ditulis untuk dijalankan sebagai Google Cloud Function, menggunakan Python 3.9.

Apps Script

Buat pesan kartu

Bagian ini menjelaskan cara membuat pesan kartu dalam dua cara: dengan merespons interaksi pengguna dan memanggil Google Chat API secara asinkron.

Merespons pengguna

Aplikasi Chat dapat membuat pesan kartu untuk merespons interaksi pengguna, seperti saat pengguna mengirim pesan ke aplikasi Chat atau menambahkan aplikasi Chat ke suatu ruang. Untuk mempelajari lebih lanjut cara merespons interaksi pengguna, baca Menerima dan merespons peristiwa interaksi aplikasi Chat.

Dalam contoh ini, pengguna mengirim pesan ke aplikasi Chat dan aplikasi Chat merespons dengan mengirim pesan kartu yang menampilkan nama dan gambar avatar pengguna:

Aplikasi Chat merespons dengan kartu yang menampilkan nama tampilan dan gambar avatar pengirim.

Node.js

node/avatar-app/index.js
/**
 * Google Cloud Function that responds to messages sent from a
 * Google Chat room.
 *
 * @param {Object} req Request sent from Google Chat room
 * @param {Object} res Response to send back
 */
exports.helloChat = function helloChat(req, res) {
  if (req.method === 'GET' || !req.body.message) {
    res.send('Hello! This function is meant to be used in a Google Chat ' +
      'Room.');
  }

  const sender = req.body.message.sender.displayName;
  const image = req.body.message.sender.avatarUrl;

  const data = createMessage(sender, image);

  res.send(data);
};

/**
 * Creates a card with two widgets.
 * @param {string} displayName the sender's display name
 * @param {string} imageUrl the URL for the sender's avatar
 * @return {Object} a card with the user's avatar.
 */
function createMessage(displayName, imageUrl) {
  const cardHeader = {
    title: `Hello ${displayName}!`,
  };

  const avatarWidget = {
    textParagraph: {text: 'Your avatar picture: '},
  };

  const avatarImageWidget = {
    image: {imageUrl},
  };

  const avatarSection = {
    widgets: [
      avatarWidget,
      avatarImageWidget,
    ],
  };

  return {
    cardsV2: [{
      cardId: 'avatarCard',
      card: {
        name: 'Avatar Card',
        header: cardHeader,
        sections: [avatarSection],
      }
    }],
  };
}

Python

{i>python/avatar-app/main.py<i}
from typing import Any, Mapping

import flask
import functions_framework


# Google Cloud Function that responds to messages sent in
# Google Chat.
#
# @param {Object} req Request sent from Google Chat.
# @param {Object} res Response to send back.
@functions_framework.http
def hello_chat(req: flask.Request) -> Mapping[str, Any]:
  if req.method == "GET":
    return "Hello! This function must be called from Google Chat."

  request_json = req.get_json(silent=True)

  display_name = request_json["message"]["sender"]["displayName"]
  avatar = request_json["message"]["sender"]["avatarUrl"]

  response = create_message(name=display_name, image_url=avatar)

  return response


# Creates a card with two widgets.
# @param {string} name the sender's display name.
# @param {string} image_url the URL for the sender's avatar.
# @return {Object} a card with the user's avatar.
def create_message(name: str, image_url: str) -> Mapping[str, Any]:
  avatar_image_widget = {"image": {"imageUrl": image_url}}
  avatar_text_widget = {"textParagraph": {"text": "Your avatar picture:"}}
  avatar_section = {"widgets": [avatar_text_widget, avatar_image_widget]}

  header = {"title": f"Hello {name}!"}

  cards = {
      "cardsV2": [
          {
              "cardId": "avatarCard",
              "card": {
                  "name": "Avatar Card",
                  "header": header,
                  "sections": [avatar_section],
              },
          }
      ]
  }

  return cards

Apps Script

apps-script/avatar-app/hello-chat.gs
/**
 * Responds to a MESSAGE event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 */
function onMessage(event) {
  const displayName = event.message.sender.displayName;
  const avatarUrl = event.message.sender.avatarUrl;

  return createMessage(displayName, avatarUrl);
}

/**
 * Creates a card with two widgets.
 * @param {string} displayName the sender's display name
 * @param {string} avatarUrl the URL for the sender's avatar
 * @return {Object} a card with the sender's avatar.
 */
function createMessage(displayName, avatarUrl) {
  const cardHeader = {
    title: `Hello ${displayName}!`
  };

  const avatarWidget = {
    textParagraph: {text: 'Your avatar picture: '}
  };

  const avatarImageWidget = {
    image: {imageUrl: avatarUrl}
  };

  const avatarSection = {
    widgets: [
      avatarWidget,
      avatarImageWidget
    ],
  };

  return {
    cardsV2: [{
      cardId: 'avatarCard',
      card: {
        name: 'Avatar Card',
        header: cardHeader,
        sections: [avatarSection],
      }
    }],
  };
}

Memanggil Google Chat API

Berikut ini cara membuat pesan kartu dengan memanggil Google Chat API secara asinkron.

Pemanggilan Chat API secara asinkron memerlukan autentikasi. Karena hanya aplikasi Chat yang dapat membuat pesan kartu, aplikasi Chat harus menggunakan autentikasi aplikasi untuk membuat dan mengirim pesan kartu (aplikasi Chat tidak dapat menggunakan autentikasi pengguna untuk mengirim pesan kartu atas nama pengguna). Untuk mempelajari lebih lanjut, lihat Ringkasan autentikasi Google Chat.

Dalam contoh ini, Anda membuat pesan kartu berikut menggunakan autentikasi aplikasi:

Pesan kartu yang dibuat dengan Google Chat API.
Gambar 1: Pesan kartu yang dibuat dengan Chat API.

Untuk menyiapkan autentikasi dan mempelajari cara membuat pesan secara asinkron, lihat panduan Chat API.

Python

  1. Di direktori kerja, buat file bernama chat_create_card_message.py.
  2. Sertakan kode berikut di chat_create_card_message.py:

    from httplib2 import Http
    from oauth2client.service_account import ServiceAccountCredentials
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = ServiceAccountCredentials.from_json_keyfile_name(
        'credentials.json', SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', http=CREDENTIALS.authorize(Http()))
    
    # Create a Chat message.
    result = chat.spaces().messages().create(
    
        # The space to create the message in.
        #
        # Replace SPACE with a space name.
        # Obtain the space name from the spaces resource of Chat API,
        # or from a space's URL.
        parent='spaces/SPACE',
    
        # The message to create.
        body=
        {
          'cardsV2': [{
            'cardId': 'createCardMessage',
            'card': {
              'header': {
                'title': 'A Card Message!',
                'subtitle': 'Created with Chat REST API',
                'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png',
                'imageType': 'CIRCLE'
              },
              'sections': [
                {
                  'widgets': [
                    {
                      'buttonList': {
                        'buttons': [
                          {
                            'text': 'Read the docs!',
                            'onClick': {
                              'openLink': {
                                'url': 'https://developers.google.com/chat'
                              }
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              ]
            }
          }]
        }
    
    ).execute()
    
    print(result)
    
  3. Dalam kode, ganti SPACE dengan nama ruang, yang dapat Anda peroleh dari metode spaces.list() di Chat API, atau dari URL ruang.

  4. Di direktori kerja Anda, build dan jalankan contoh:

    python3 chat_create_card_message.py
    

Untuk mempelajari lebih lanjut cara menangani pesan di Chat API, lihat hal berikut:

Memecahkan masalah

Saat aplikasi atau kartu Google Chat menampilkan error, antarmuka Chat akan menampilkan pesan yang menyatakan "Terjadi masalah". atau "Tidak dapat memproses permintaan Anda". Terkadang UI Chat tidak menampilkan pesan error apa pun, tetapi aplikasi atau kartu Chat memberikan hasil yang tidak diharapkan; misalnya, pesan kartu mungkin tidak muncul.

Meskipun pesan error mungkin tidak ditampilkan di UI Chat, pesan error deskriptif dan data log tersedia untuk membantu Anda memperbaiki error saat logging error untuk aplikasi Chat diaktifkan. Untuk mendapatkan bantuan terkait melihat, men-debug, dan memperbaiki error, lihat Memecahkan masalah dan memperbaiki error Google Chat.