Demo Gato GraphQL + Bricks Builder + ChatGPT
Viết lại nội dung trong Bricks bằng ChatGPT để cải thiện SEO
Sử dụng ChatGPT để tối ưu hóa nội dung văn bản trên trang Bricks cho các công cụ tìm kiếm

Chúng ta có thể sử dụng ChatGPT với tiện ích mở rộng Bricks để tự động viết lại nội dung trong các phần tử trang Bricks nhằm cải thiện SEO, tất cả chỉ với một query Gato GraphQL duy nhất.
Query này sử dụng ChatGPT để viết lại nội dung trong các phần tử heading và text của trang Bricks, nhằm cải thiện SEO.
Chúng ta cần cung cấp các biến sau:
customPostId: ID của custom post Bricks cần cập nhậtopenAIAPIKey: Khóa API cho OpenAI API
Đây là query GraphQL:
query InitializeGlobalVariables
@configureWarningsOnExportingDuplicateVariable(enabled: false)
{
emptyArray: _echo(value: [])
@export(as: "elementToUpdateIDs")
@export(as: "elementToUpdateTexts")
@remove
}
query GetBricksData($customPostId: ID!)
@depends(on: "InitializeGlobalVariables")
{
customPost(by:{ id: $customPostId }, status: any) {
id
title
bricksData(filterBy: { include: ["heading", "text"] })
@underEachArrayItem(
affectDirectivesUnderPos: [1, 3]
)
@underJSONObjectProperty(by: { key: "id" })
@export(as: "elementToUpdateIDs")
@underJSONObjectProperty(by: { path: "settings.text" })
@export(as: "elementToUpdateTexts")
}
}
query CreateDescriptionsWithChatGPT(
$openAIAPIKey: String!
$systemMessage: String! = "You are an SEO content writer"
$promptTemplate: String! = """
I'm working on rewriting content for a Bricks page, for better SEO.
I've created an array with the content to rewrite. Please rewrite the content for each item.
Keep the array indexes identical, rewrite the content only.
This is the JSON:
{$encodedContentItems}
"""
$model: String! = "gpt-4o-mini"
)
@depends(on: "GetBricksData")
{
encodedContentItems: _arrayEncodeAsJSONString(array: $elementToUpdateTexts)
prompt: _strReplace(
search: "{$encodedContentItems}",
replaceWith: $__encodedContentItems,
in: $promptTemplate
)
openAIResponse: _sendJSONObjectItemHTTPRequest(input: {
url: "https://api.openai.com/v1/chat/completions",
method: POST,
options: {
auth: {
password: $openAIAPIKey
},
json: {
model: $model,
messages: [
{
role: "system",
content: $systemMessage
},
{
role: "user",
content: $__prompt
},
],
response_format: {
type: "json_schema",
json_schema: {
name: "content_response",
strict: true,
schema: {
type: "object",
properties: {
descriptions: {
type: "array",
items: {
type: "string"
}
}
},
required: ["descriptions"],
additionalProperties: false
}
}
}
}
}
})
@underJSONObjectProperty(by: { key: "choices" })
@underArrayItem(index: 0)
@underJSONObjectProperty(by: { path: "message.content" })
@export(as: "jsonEncodedRewrittenDescriptions")
}
query ExtractRewrittenDescriptions
@depends(on: "CreateDescriptionsWithChatGPT")
{
jsonEncodedRewrittenDescriptions: _echo(value: $jsonEncodedRewrittenDescriptions)
@remove
decodedRewrittenDescriptions: _strDecodeJSONObject(string: $jsonEncodedRewrittenDescriptions)
@remove
rewrittenDescriptions: _objectProperty(
object: $__decodedRewrittenDescriptions,
by: { key: "descriptions" }
)
@export(as: "rewrittenDescriptions")
}
query GetElementToUpdateData
@depends(on: "ExtractRewrittenDescriptions")
{
elementToUpdateIDs: _echo(value: $elementToUpdateIDs)
elementToUpdateTexts: _echo(value: $rewrittenDescriptions)
elementToUpdateMergeInputElements: _echo(value: $rewrittenDescriptions)
@underEachArrayItem(
passIndexOnwardsAs: "index",
passValueOnwardsAs: "elementToUpdateText"
affectDirectivesUnderPos: [1, 2]
)
@applyField(
name: "_arrayItem",
arguments: {
array: $elementToUpdateIDs,
position: $index
},
passOnwardsAs: "elementToUpdateID"
)
@applyField(
name: "_echo",
arguments: {
value: {
id: $elementToUpdateID,
settings: {
text: $elementToUpdateText
}
}
}
setResultInResponse: true
)
@export(as: "elementToUpdateMergeInputElements")
}
mutation StoreUpdatedElementText($customPostId: ID!)
@depends(on: "GetElementToUpdateData")
{
bricksMergeCustomPostElementDataItem(input: {
customPostID: $customPostId
elements: $elementToUpdateMergeInputElements
}) {
status
errors {
__typename
...on ErrorPayload {
message
@passOnwards(as: "message")
@fail(
message: $message
condition: ALWAYS
)
}
}
customPost {
__typename
...on CustomPost {
id
bricksData
}
}
}
}Các biến sẽ có dạng như sau:
{
"customPostId": 123,
"openAIAPIKey": "sk-..."
}