Cập nhật tin nhắn

Hướng dẫn này giải thích cách sử dụng phương thức patch trên tài nguyên Message của API Google Chat để cập nhật tin nhắn văn bản hoặc tin nhắn bằng thẻ trong một không gian. Cập nhật một thông báo để thay đổi các thuộc tính của thông báo, chẳng hạn như nội dung hoặc nội dung của thẻ. Bạn cũng có thể thêm một tin nhắn văn bản vào tin nhắn văn bản hoặc thêm một thẻ vào tin nhắn văn bản.

API Chat cũng hỗ trợ phương thức update, nhưng bạn nên gọi phương thức patch vì phương thức này sử dụng yêu cầu HTTP PATCH trong khi update sử dụng yêu cầu HTTP PUT. Để tìm hiểu thêm, hãy xem mục PATCHPUT của AIP-134.

Tài nguyên Message đại diện cho một thông báo văn bản hoặc thẻ trong Google Chat. Bạn có thể create, get, update hoặc delete cho tin nhắn trong API Google Chat bằng cách gọi các phương thức tương ứng. Để tìm hiểu thêm về tin nhắn văn bản và tin nhắn bằng thẻ, hãy xem bài viết Tổng quan về tin nhắn trong Google Chat.

Điều kiện tiên quyết

Python

  • Python 3.6 trở lên
  • Công cụ quản lý gói pip
  • Các thư viện ứng dụng mới nhất của Google dành cho Python. Để cài đặt hoặc cập nhật các công cụ này, hãy chạy lệnh sau trong giao diện dòng lệnh của bạn:

    pip3 install --upgrade google-api-python-client google-auth-oauthlib google-auth
    
  • Một dự án trên Google Cloud đã bật và thiết lập API Google Chat. Để biết các bước, hãy xem bài viết Tạo ứng dụng Google Chat.
  • Đã định cấu hình hoạt động uỷ quyền cho ứng dụng Chat:

Cập nhật tin nhắn văn bản hoặc thêm tin nhắn văn bản vào trước tin nhắn thẻ, có xác thực người dùng

Để cập nhật tin nhắn văn bản bằng xác thực người dùng, hãy chuyển thông tin sau vào yêu cầu của bạn:

  • Phạm vi uỷ quyền chat.messages.
  • name của tin nhắn cần cập nhật.
  • updateMask='text'
  • body chỉ định thông báo đã cập nhật.

Nếu tin nhắn được cập nhật là tin nhắn thẻ, thì tin nhắn văn bản sẽ được thêm vào trước tin nhắn thẻ (tin nhắn này vẫn tiếp tục hiển thị).

Dưới đây là cách cập nhật tin nhắn văn bản hoặc thêm tin nhắn văn bản vào đầu tin nhắn văn bản vào tin nhắn thẻ bằng phương thức xác thực người dùng:

Python

  1. Trong thư mục đang làm việc, hãy tạo một tệp có tên là chat_update_text_message_user.py.
  2. Đưa mã sau vào chat_update_text_message_user.py:

    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    # Define your app's authorization scopes.
    # When modifying these scopes, delete the file token.json, if it exists.
    SCOPES = ["https://www.googleapis.com/auth/chat.messages"]
    
    def main():
        '''
        Authenticates with Chat API via user credentials,
        then updates a message.
        '''
    
        # Authenticate with Google Workspace
        # and get user authorization.
        flow = InstalledAppFlow.from_client_secrets_file(
                          'client_secrets.json', SCOPES)
        creds = flow.run_local_server()
    
        # Build a service endpoint for Chat API.
        chat = build('chat', 'v1', credentials=creds)
    
        # Update a Chat message.
        result = chat.spaces().messages().patch(
    
          # The message to update, and the updated message.
          #
          # Replace SPACE with a space name.
          # Obtain the space name from the spaces resource of Chat API,
          # or from a space's URL.
          #
          # Replace MESSAGE with a message name.
          # Obtain the message name from the response body returned
          # after creating a message asynchronously with Chat REST API.
          name='spaces/SPACE/messages/MESSAGE',
          updateMask='text',
          body={'text': 'Updated message!'}
    
        ).execute()
    
        # Prints details about the created membership.
        print(result)
    
    if __name__ == '__main__':
        main()
    
  3. Trong mã, hãy thay thế các đoạn mã sau:

    • SPACE: tên không gian mà bạn có thể lấy từ phương thức spaces.list trong API Chat hoặc từ URL của một không gian.
    • MESSAGE: tên thông báo mà bạn có thể lấy từ phần nội dung phản hồi được trả về sau khi tạo thông báo không đồng bộ bằng API Chat hoặc bằng tên tuỳ chỉnh được chỉ định cho thông báo khi tạo.
  4. Trong thư mục đang làm việc, hãy tạo và chạy mẫu:

    python3 chat_update_text_message_user.py
    

Cập nhật tin nhắn văn bản hoặc thêm tin nhắn văn bản vào trước tin nhắn thẻ, có xác thực ứng dụng

Để cập nhật tin nhắn văn bản bằng xác thực ứng dụng, hãy chuyển nội dung sau trong yêu cầu của bạn:

  • Phạm vi uỷ quyền chat.bot.
  • name của tin nhắn cần cập nhật.
  • updateMask='text'
  • body chỉ định thông báo đã cập nhật.

Nếu tin nhắn được cập nhật là một tin nhắn thẻ, thì tin nhắn văn bản sẽ được thêm vào trước tin nhắn thẻ (tin nhắn này vẫn tiếp tục hiển thị).

Dưới đây là cách cập nhật tin nhắn văn bản thành tin nhắn văn bản hoặc thêm tin nhắn văn bản vào tin nhắn thẻ bằng tính năng xác thực ứng dụng:

Python

  1. Trong thư mục đang làm việc, hãy tạo một tệp có tên là chat_update_text_message_app.py.
  2. Đưa mã sau vào chat_update_text_message_app.py:

    from google.oauth2 import service_account
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = (
        service_account.Credentials.from_service_account_file('credentials.json')
        .with_scopes(SCOPES)
    )
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', credentials=CREDENTIALS)
    
    # Update a Chat message.
    result = chat.spaces().messages().patch(
    
      # The message to update, and the updated message.
      #
      # Replace SPACE with a space name.
      # Obtain the space name from the spaces resource of Chat API,
      # or from a space's URL.
      #
      # Replace MESSAGE with a message name.
      # Obtain the message name from the response body returned
      # after creating a message asynchronously with Chat REST API.
      name='spaces/SPACE/messages/MESSAGE',
      updateMask='text',
      body={'text': 'Updated message!'}
    
    ).execute()
    
    # Print Chat API's response in your command line interface.
    print(result)
    
  3. Trong mã, hãy thay thế các đoạn mã sau:

    • SPACE: tên không gian mà bạn có thể lấy từ phương thức spaces.list trong API Chat hoặc từ URL của một không gian.
    • MESSAGE: tên thông báo mà bạn có thể lấy từ phần nội dung phản hồi được trả về sau khi tạo thông báo không đồng bộ bằng API Chat hoặc bằng tên tuỳ chỉnh được chỉ định cho thông báo khi tạo.
  4. Trong thư mục đang làm việc, hãy tạo và chạy mẫu:

    python3 chat_update_text_message_app.py
    

Cập nhật tin nhắn thẻ hoặc thêm tin nhắn thẻ vào tin nhắn văn bản

Để cập nhật tin nhắn thẻ, hãy chuyển thông tin sau vào yêu cầu của bạn:

  • Phạm vi uỷ quyền chat.bot. Để cập nhật thông báo về thẻ, bạn phải xác thực ứng dụng.
  • name của tin nhắn cần cập nhật.
  • updateMask='cardsV2'
  • body chỉ định thông báo đã cập nhật.

Nếu thông báo được cập nhật là một tin nhắn văn bản, thì một thẻ sẽ được thêm vào tin nhắn văn bản (tiếp tục hiển thị). Nếu thông báo cập nhật chính là một thẻ, thì thẻ hiện ra sẽ được cập nhật.

Dưới đây là cách cập nhật tin nhắn thành tin nhắn bằng thẻ:

Python

  1. Trong thư mục đang làm việc, hãy tạo một tệp có tên là chat_update_card_message.py.
  2. Đưa mã sau vào chat_update_card_message.py:

    from google.oauth2 import service_account
    from apiclient.discovery import build
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    CREDENTIALS = (
        service_account.Credentials.from_service_account_file('credentials.json')
        .with_scopes(SCOPES)
    )
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', credentials=CREDENTIALS)
    
    # Update a Chat message.
    result = chat.spaces().messages().patch(
    
      # The message to update, and the updated message.
      #
      # Replace SPACE with a space name.
      # Obtain the space name from the spaces resource of Chat API,
      # or from a space's URL.
      #
      # Replace MESSAGE with a message name.
      # Obtain the message name from the response body returned
      # after creating a message asynchronously with Chat REST API.
      name='spaces/SPACE/messages/MESSAGE',
      updateMask='cardsV2',
      body=
      {
        'cardsV2': [{
          'cardId': 'updateCardMessage',
          'card': {
            'header': {
              'title': 'An Updated Card Message!',
              'subtitle': 'Updated 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 Chat API's response in your command line interface.
    print(result)
    
  3. Trong mã, hãy thay thế các đoạn mã sau:

    • SPACE: tên không gian mà bạn có thể lấy từ phương thức spaces.list trong API Chat hoặc từ URL của một không gian.

    • MESSAGE: tên thông báo mà bạn có thể lấy từ phần nội dung phản hồi được trả về sau khi tạo thông báo không đồng bộ bằng API Chat hoặc bằng tên tuỳ chỉnh được chỉ định cho thông báo khi tạo.

  4. Trong thư mục đang làm việc, hãy tạo và chạy mẫu:

    python3 chat_update_card_message.py
    

API Chat trả về một thực thể của Message cho biết thông tin chi tiết về thông báo đã cập nhật.

Cập nhật một thông báo bằng nhiều đường dẫn trường cùng lúc

Khi một thông báo được cập nhật, bạn có thể cập nhật nhiều đường dẫn trường thông báo tại một thời điểm. Ví dụ: trong yêu cầu cập nhật thông báo, bạn có thể chỉ định một thay đổi đối với đường dẫn trường textcardsv2 cùng lúc để cập nhật cả văn bản và thẻ của thông báo. Nếu thông báo chỉ bao gồm văn bản và không có thẻ nào, thì một thẻ sẽ được thêm vào thông báo. Để biết thêm thông tin về các đường dẫn trường được hỗ trợ, hãy xem tham số updateMask.

Để cập nhật cả textcard của thông báo có chế độ xác thực người dùng, hãy chuyển nội dung sau trong yêu cầu của bạn:

  • Phạm vi uỷ quyền chat.messages.
  • name của tin nhắn cần cập nhật.
  • updateMask chỉ định các đường dẫn đến trường thông báo cần cập nhật, phân tách bằng dấu phẩy: updateMask='text', 'cardsV2'.

  • body chỉ định thông báo đã cập nhật, bao gồm tất cả các đường dẫn trường đã cập nhật.

Dưới đây là cách cập nhật đường dẫn trường textcardsV2 trong một thông báo bằng phương thức xác thực người dùng:

Python

  1. Trong thư mục đang làm việc, hãy tạo một tệp có tên là chat_update_text_message_user.py.
  2. Đưa mã sau vào chat_update_text_message_user.py:

    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    # Define your app's authorization scopes.
    # When modifying these scopes, delete the file token.json, if it exists.
    SCOPES = ["https://www.googleapis.com/auth/chat.messages"]
    
    def main():
        '''
        Authenticates with Chat API via user credentials,
        then updates a message.
        '''
    
        # Authenticate with Google Workspace
        # and get user authorization.
        flow = InstalledAppFlow.from_client_secrets_file(
                          'client_secrets.json', SCOPES)
        creds = flow.run_local_server()
    
        # Build a service endpoint for Chat API.
        chat = build('chat', 'v1', credentials=creds)
    
        # Update a Chat message.
        result = chat.spaces().messages().patch(
    
          # The message to update, and the updated message.
          #
          # Replace SPACE with a space name.
          # Obtain the space name from the spaces resource of Chat API,
          # or from a space's URL.
          #
          # Replace MESSAGE with a message name.
          # Obtain the message name from the response body returned
          # after creating a message asynchronously with Chat REST API.
          name='spaces/SPACE/messages/MESSAGE',
          updateMask='text,cardsV2',
          body=
          {'text': 'Updated message!',
                'cardsV2': [{
                  'cardId': 'updateCardMessage',
                  'card': {
                    'header': {
                      'title': 'An Updated Card Message!',
                      'subtitle': 'Updated 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()
    
        # Prints details about the created membership.
        print(result)
    
    if __name__ == '__main__':
        main()
    
  3. Trong mã, hãy thay thế các đoạn mã sau:

    • SPACE: tên không gian mà bạn có thể lấy từ phương thức spaces.list trong API Chat hoặc từ URL của một không gian.
    • MESSAGE: tên thông báo mà bạn có thể lấy từ phần nội dung phản hồi được trả về sau khi tạo thông báo không đồng bộ bằng API Chat hoặc bằng tên tuỳ chỉnh được chỉ định cho thông báo khi tạo.
  4. Trong thư mục đang làm việc, hãy tạo và chạy mẫu:

    python3 chat_update_text_message_user.py