Demo Gato GraphQL + Bricks Builder + ChatGPT
Menulis Ulang Konten di Bricks dengan ChatGPT untuk SEO yang Lebih Baik
Gunakan ChatGPT untuk mengoptimalkan konten teks pada halaman Bricks untuk mesin pencari

Kita dapat menggunakan ChatGPT dengan ekstensi Bricks untuk secara otomatis menulis ulang konten pada elemen halaman Bricks demi SEO yang lebih baik, semuanya dengan satu query Gato GraphQL.
Query ini menggunakan ChatGPT untuk menulis ulang konten pada elemen heading dan text dari halaman Bricks, demi SEO yang lebih baik.
Kita harus menyediakan variabel-variabel berikut:
customPostId: ID dari custom post Bricks yang akan diperbaruiopenAIAPIKey: Kunci API untuk OpenAI API
Berikut adalah query GraphQL-nya:
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
}
}
}
}Variabel-variabelnya akan terlihat seperti ini:
{
"customPostId": 123,
"openAIAPIKey": "sk-..."
}