این راهنما توضیح میدهد که چگونه از Google Chat API برای ایجاد پیامهای حاوی کارتهای تعاملی ازطرف کاربران استفاده کنید و چگونه این کارتها را بهصورت ناهمگام بهروز کنید.
ایجاد و بهروزرسانی کارتها زمانی مفید است که بخواهید کارهای زیر را انجام دهید:
- کارت نشاندهنده تکلیف یا منبع خارجی را ازطرف کاربر پست کنید.
- وضعیت کارت را (برای مثال، «درحال انجام» به «تکمیلشده») براساس رویدادهای خارجی بهروز کنید، بدون اینکه منتظر تعامل کاربر بمانید.
- بازآوری کردن محتوای کارت در پیام کاربر، مثل پیشنمایش پیوند.
پیشنیازها
Node.js
- حساب «کسبوکار» یا «سازمان» Google Workspace با دسترسی به Google Chat.
- محیط خود را راهاندازی کنید:
- پروژه Google Cloud ایجاد کنید.
- صفحه کسب رضایت OAuth را پیکربندی کنید.
- Google Chat API را با نام، نماد، و شرحی برای برنامه Chat خود فعال و پیکربندی کنید.
- نصب Node.js کتابخانه کارخواه Google API.
- اعتبارنامه دسترسی را براساس نحوه اصالتسنجی در درخواست Google Chat API خود ایجاد کنید:
- برای اصالتسنجی بهعنوان کاربر Chat،
اعتبارنامه شناسه کارخواه OAuth ایجاد کنید
و اعتبارنامه را بهعنوان فایل JSON با نام
credentials.jsonدر دایرکتوری محلیتان ذخیره کنید. - برای اصالتسنجی بهعنوان برنامه Chat،
اعتبارنامههای حساب سرویس ایجاد کنید و اعتبارنامهها را بهعنوان فایل JSON با نام
credentials.jsonذخیره کنید.
- برای اصالتسنجی بهعنوان کاربر Chat،
اعتبارنامه شناسه کارخواه OAuth ایجاد کنید
و اعتبارنامه را بهعنوان فایل JSON با نام
- براساس اینکه میخواهید بهعنوان کاربر یا برنامه Chat اصالتسنجی کنید، یک دامنه مجوز انتخاب کنید.
Python
- حساب «کسبوکار» یا «سازمان» Google Workspace با دسترسی به Google Chat.
- محیط خود را راهاندازی کنید:
- پروژه Google Cloud ایجاد کنید.
- صفحه کسب رضایت OAuth را پیکربندی کنید.
- Google Chat API را با نام، نماد، و شرحی برای برنامه Chat خود فعال و پیکربندی کنید.
- نصب Python کتابخانه کارخواه Google API.
- اعتبارنامه دسترسی را براساس نحوه اصالتسنجی در درخواست Google Chat API خود ایجاد کنید:
- برای اصالتسنجی بهعنوان کاربر Chat،
اعتبارنامه شناسه کارخواه OAuth ایجاد کنید
و اعتبارنامه را بهعنوان فایل JSON با نام
credentials.jsonدر دایرکتوری محلیتان ذخیره کنید. - برای اصالتسنجی بهعنوان برنامه Chat،
اعتبارنامههای حساب سرویس ایجاد کنید و اعتبارنامهها را بهعنوان فایل JSON با نام
credentials.jsonذخیره کنید.
- برای اصالتسنجی بهعنوان کاربر Chat،
اعتبارنامه شناسه کارخواه OAuth ایجاد کنید
و اعتبارنامه را بهعنوان فایل JSON با نام
- براساس اینکه میخواهید بهعنوان کاربر یا برنامه Chat اصالتسنجی کنید، یک دامنه مجوز انتخاب کنید.
جاوا
- حساب «کسبوکار» یا «سازمان» Google Workspace با دسترسی به Google Chat.
- محیط خود را راهاندازی کنید:
- پروژه Google Cloud ایجاد کنید.
- صفحه کسب رضایت OAuth را پیکربندی کنید.
- Google Chat API را با نام، نماد، و شرحی برای برنامه Chat خود فعال و پیکربندی کنید.
- نصب Java کتابخانه کارخواه Google API.
- اعتبارنامه دسترسی را براساس نحوه اصالتسنجی در درخواست Google Chat API خود ایجاد کنید:
- برای اصالتسنجی بهعنوان کاربر Chat،
اعتبارنامه شناسه کارخواه OAuth ایجاد کنید
و اعتبارنامه را بهعنوان فایل JSON با نام
credentials.jsonدر دایرکتوری محلیتان ذخیره کنید. - برای اصالتسنجی بهعنوان برنامه Chat،
اعتبارنامههای حساب سرویس ایجاد کنید و اعتبارنامهها را بهعنوان فایل JSON با نام
credentials.jsonذخیره کنید.
- برای اصالتسنجی بهعنوان کاربر Chat،
اعتبارنامه شناسه کارخواه OAuth ایجاد کنید
و اعتبارنامه را بهعنوان فایل JSON با نام
- براساس اینکه میخواهید بهعنوان کاربر یا برنامه Chat اصالتسنجی کنید، یک دامنه مجوز انتخاب کنید.
Apps Script
- حساب «کسبوکار» یا «سازمان» Google Workspace با دسترسی به Google Chat.
- محیط خود را راهاندازی کنید:
- پروژه Google Cloud ایجاد کنید.
- صفحه کسب رضایت OAuth را پیکربندی کنید.
- Google Chat API را با نام، نماد، و شرحی برای برنامه Chat خود فعال و پیکربندی کنید.
- پروژه Apps Script خوداتکایی ایجاد کنید، و سرویس Chat پیشرفته را روشن کنید.
- در این راهنما، باید از اصالتسنجی کاربر یا برنامه استفاده کنید. برای اصالتسنجی بهعنوان برنامه Chat، اعتبارنامه حساب خدمات ایجاد کنید. برای اطلاع از مراحل، به اصالتسنجی و صدور مجوز بهعنوان برنامه Google Chat مراجعه کنید.
- براساس اینکه میخواهید بهعنوان کاربر یا برنامه Chat اصالتسنجی کنید، یک دامنه مجوز انتخاب کنید.
ایجاد پیام کارتی ازطرف کاربر
برای ایجاد پیام با کارت ازطرف کاربر، از اصالتسنجی کاربر استفاده کنید.
برای ایجاد پیام، موارد زیر را در درخواستتان مشخص کنید:
- دامنه مجوز
chat.messages.createیاchat.messages. - فیلد
cardsV2در منبعMessageکه حاوی دادههای کارت است. cardIdبرای هر کارت، که برای بهروزرسانیهای ناهمگام لازم است.
مثال زیر نشان میدهد که چگونه میتوان پیامی با کارت ازطرف کاربر ایجاد کرد:
Node.js
/**
* This sample shows how to create a message with a card on behalf of a user.
*/
const {google} = require('googleapis');
const {auth} = require('google-auth-library');
async function main() {
// Create a client
const authClient = await auth.getClient({
scopes: ['https://www.googleapis.com/auth/chat.messages.create']
});
google.options({auth: authClient});
// Initialize the Chat API
const chat = google.chat({version: 'v1'});
// The space to create the message in.
const parent = 'spaces/SPACE_NAME';
// Create the request
const request = {
parent: parent,
requestBody: {
text: 'Here is a card created on my behalf:',
cardsV2: [{
cardId: 'unique-card-id',
card: {
header: {
title: 'Card Title',
subtitle: 'Card Subtitle'
},
sections: [{
widgets: [{
textParagraph: {
text: 'This card is attached to a user message.'
}
}]
}]
}
}]
}
};
// Call the API
const response = await chat.spaces.messages.create(request);
// Handle the response
console.log(response.data);
}
main().catch(console.error);
Python
"""
This sample shows how to create a message with a card on behalf of a user.
"""
from google.oauth2 import service_account
from googleapiclient.discovery import build
import google.auth
def create_message_with_card():
# Create a client
scopes = ["https://www.googleapis.com/auth/chat.messages.create"]
credentials, _ = google.auth.default(scopes=scopes)
# Build the service endpoint for Chat API.
service = build('chat', 'v1', credentials=credentials)
# The space to create the message in.
parent = "spaces/SPACE_NAME"
# Create the request
result = service.spaces().messages().create(
parent=parent,
body={
'text': 'Here is a card created on my behalf:',
'cardsV2': [{
'cardId': 'unique-card-id',
'card': {
'header': {
'title': 'Card Title',
'subtitle': 'Card Subtitle'
},
'sections': [{
'widgets': [{
'textParagraph': {
'text': 'This card is attached to a user message.'
}
}]
}]
}
}]
}
).execute()
print(result)
if __name__ == "__main__":
create_message_with_card()
جاوا
/**
* This sample shows how to create a message with a card on behalf of a user.
*/
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.json.JsonHttpContent;
import com.google.api.client.json.gson.GsonFactory;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class CreateMessageWithCard {
public static void main(String[] args) throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
GsonFactory jsonFactory = GsonFactory.getDefaultInstance();
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
.createScoped(Arrays.asList("https://www.googleapis.com/auth/chat.messages.create"));
HttpRequestFactory requestFactory = transport.createRequestFactory(new HttpCredentialsAdapter(credentials));
String parent = "spaces/SPACE_NAME";
GenericUrl url = new GenericUrl("https://chat.googleapis.com/v1/" + parent + "/messages");
// Construct the message body
Map<String, Object> message = new HashMap<>();
message.put("text", "Here is a card created on my behalf:");
Map<String, Object> header = new HashMap<>();
header.put("title", "Card Title");
header.put("subtitle", "Card Subtitle");
Map<String, Object> textParagraph = new HashMap<>();
textParagraph.put("text", "This card is attached to a user message.");
Map<String, Object> widget = new HashMap<>();
widget.put("textParagraph", textParagraph);
Map<String, Object> section = new HashMap<>();
section.put("widgets", Collections.singletonList(widget));
Map<String, Object> card = new HashMap<>();
card.put("header", header);
card.put("sections", Collections.singletonList(section));
Map<String, Object> cardWithId = new HashMap<>();
cardWithId.put("cardId", "unique-card-id");
cardWithId.put("card", card);
message.put("cardsV2", Collections.singletonList(cardWithId));
HttpRequest request = requestFactory.buildPostRequest(url, new JsonHttpContent(jsonFactory, message));
System.out.println(request.execute().parseAsString());
}
}
Apps Script
/**
* This sample shows how to create a message with a card on behalf of a user.
*/
function createMessageWithCard() {
const parent = 'spaces/SPACE_NAME';
const url = `https://chat.googleapis.com/v1/${parent}/messages`;
const message = {
text: 'Here is a card created on my behalf:',
cardsV2: [{
cardId: 'unique-card-id',
card: {
header: {
title: 'Card Title',
subtitle: 'Card Subtitle'
},
sections: [{
widgets: [{
textParagraph: {
text: 'This card is attached to a user message.'
}
}]
}]
}
}]
};
const options = {
method: 'post',
headers: {
Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
},
contentType: 'application/json',
payload: JSON.stringify(message),
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch(url, options);
console.log(response.getContentText());
} catch (err) {
console.log('Failed to create message: ' + err.message);
}
}
بهروزرسانی کارتها بهصورت ناهمگام
پساز ایجاد پیام با کارت، میتوانید کارتها را بهطور ناهمگام بااستفاده از اصالتسنجی برنامه بهروز کنید. این کار به برنامه شما اجازه میدهد محتوای کارت را بدون نیاز به تعامل کاربر بازآوری کند. فقط برنامه Chat که کارت را به پیام کاربر اضافه کرده است میتواند آن را جایگزین کند. اگر کاربری نوشتار پیام را ویرایش کند، کارتهای متعلق به برنامه برداشته میشود و برنامهتان دیگر نمیتواند آنها را بهروز کند.
برای بهروزرسانی کارتها، روش replaceCards را با موارد زیر فراخوانی کنید:
- محدوده مجوز
chat.bot. -
nameپیام برای بهروزرسانی. - فهرست جدید
cardsV2. این کار جایگزین همه کارتهای موجود در پیام میشود. اگر فهرست خالی ارائه دهید، کارتها برداشته میشوند.
مثال زیر نحوه بهروزرسانی کارتهای پیام را نشان میدهد:
Node.js
/**
* This sample shows how to update cards on a message.
*/
const {google} = require('googleapis');
const {auth} = require('google-auth-library');
async function main() {
// Create a client with app credentials
const authClient = await auth.getClient({
scopes: ['https://www.googleapis.com/auth/chat.bot']
});
google.options({auth: authClient});
// Initialize the Chat API
const chat = google.chat({version: 'v1'});
// The message to update.
const messageName = 'spaces/SPACE_NAME/messages/MESSAGE_ID';
// Create the request
const request = {
name: messageName,
requestBody: {
cardsV2: [{
cardId: 'unique-card-id',
card: {
header: {
title: 'Updated Card Title',
subtitle: 'Updated Card Subtitle'
},
sections: [{
widgets: [{
textParagraph: {
text: 'The card content has been updated asynchronously.'
}
}]
}]
}
}]
}
};
// Call the API
await chat.spaces.messages.replaceCards(request);
console.log('Cards updated.');
}
main().catch(console.error);
Python
"""
This sample shows how to update cards on a message.
"""
from google.oauth2 import service_account
from googleapiclient.discovery import build
import google.auth
def replace_message_cards():
# Create a client with app credentials
scopes = ["https://www.googleapis.com/auth/chat.bot"]
credentials, _ = google.auth.default(scopes=scopes)
# Build the service endpoint for Chat API.
service = build('chat', 'v1', credentials=credentials)
# The message to update.
message_name = "spaces/SPACE_NAME/messages/MESSAGE_ID"
# Create the request
result = service.spaces().messages().replaceCards(
name=message_name,
body={
'cardsV2': [{
'cardId': 'unique-card-id',
'card': {
'header': {
'title': 'Updated Card Title',
'subtitle': 'Updated Card Subtitle'
},
'sections': [{
'widgets': [{
'textParagraph': {
'text': 'The card content has been updated asynchronously.'
}
}]
}]
}
}]
}
).execute()
print("Cards updated.")
if __name__ == "__main__":
replace_message_cards()
جاوا
/**
* This sample shows how to update cards on a message.
*/
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.json.JsonHttpContent;
import com.google.api.client.json.gson.GsonFactory;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class ReplaceMessageCards {
public static void main(String[] args) throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
GsonFactory jsonFactory = GsonFactory.getDefaultInstance();
GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
.createScoped(Arrays.asList("https://www.googleapis.com/auth/chat.bot"));
HttpRequestFactory requestFactory = transport.createRequestFactory(new HttpCredentialsAdapter(credentials));
String messageName = "spaces/SPACE_NAME/messages/MESSAGE_ID";
GenericUrl url = new GenericUrl("https://chat.googleapis.com/v1/" + messageName + ":replaceCards");
// Construct the body
Map<String, Object> header = new HashMap<>();
header.put("title", "Updated Card Title");
header.put("subtitle", "Updated Card Subtitle");
Map<String, Object> textParagraph = new HashMap<>();
textParagraph.put("text", "The card content has been updated asynchronously.");
Map<String, Object> widget = new HashMap<>();
widget.put("textParagraph", textParagraph);
Map<String, Object> section = new HashMap<>();
section.put("widgets", Collections.singletonList(widget));
Map<String, Object> card = new HashMap<>();
card.put("header", header);
card.put("sections", Collections.singletonList(section));
Map<String, Object> cardWithId = new HashMap<>();
cardWithId.put("cardId", "unique-card-id");
cardWithId.put("card", card);
Map<String, Object> body = new HashMap<>();
body.put("cardsV2", Collections.singletonList(cardWithId));
HttpRequest request = requestFactory.buildPostRequest(url, new JsonHttpContent(jsonFactory, body));
request.execute();
System.out.println("Cards updated.");
}
}
Apps Script
/**
* This sample shows how to update cards on a message.
*/
function replaceMessageCards() {
const messageName = 'spaces/SPACE_NAME/messages/MESSAGE_ID';
const url = `https://chat.googleapis.com/v1/${messageName}:replaceCards`;
const request = {
cardsV2: [{
cardId: 'unique-card-id',
card: {
header: {
title: 'Updated Card Title',
subtitle: 'Updated Card Subtitle'
},
sections: [{
widgets: [{
textParagraph: {
text: 'The card content has been updated asynchronously.'
}
}]
}]
}
}]
};
const options = {
method: 'post',
headers: {
Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
},
contentType: 'application/json',
payload: JSON.stringify(request),
muteHttpExceptions: true
};
try {
const response = UrlFetchApp.fetch(url, options);
console.log('Cards updated.');
} catch (err) {
console.log('Failed to update cards: ' + err.message);
}
}
محدودیتها
هنگام ایجاد پیام با کارت ازطرف کاربر یا بهروزرسانی کارتها، برنامه Chat باید عضو فضا باشد. این الزام در شرایط زیر اعمال میشود:
- ایجاد پیام با کارت ازطرف کاربر.
- جایگزین کردن یا بهروزرسانی کارتهای پیام.
این الزام با دیگر میاناهای برنامهسازی کاربردی که از اصالتسنجی کاربر استفاده میکنند متفاوت است، زیرا این میاناهای برنامهسازی کاربردی معمولاً نیازی ندارند که برنامه عضو فضا باشد.
روش
replaceCardsاز جایگزینی و برداشتن کارت پشتیبانی میکند و میتوانید هنگام جایگزینی کارتها، کارتهای بیشتری اضافه کنید، اما نمیتوانید به پیامی که ازقبل کارت ندارد، کارت اضافه کنید.برنامه Chat فقط میتواند کارتهایی را که خودش به پیام پیوست کرده است جایگزین کند، نه کارتهایی که برنامههای Chat دیگر پیوست کردهاند.
اگر کاربری نوشتار پیام را ویرایش کند، کارتهای متعلق به برنامه Chat برداشته میشود و دیگر نمیتوانید آنها را بهروز کنید.