Gato GraphQL + Bricks Builder + ChatGPT 데모
SEO 개선을 위해 ChatGPT로 Bricks 콘텐츠 재작성하기
ChatGPT를 사용하여 Bricks 페이지의 텍스트 콘텐츠를 검색 엔진에 최적화하기

ChatGPT와 Bricks 확장 기능을 함께 사용하면, 단 하나의 Gato GraphQL 쿼리만으로 Bricks 페이지 요소의 콘텐츠를 SEO 개선을 위해 자동으로 재작성할 수 있습니다.
이 쿼리는 ChatGPT를 사용하여 SEO 개선을 위해 Bricks 페이지의 heading 및 text 요소의 콘텐츠를 재작성합니다.
다음 변수를 제공해야 합니다.
customPostId: 업데이트할 Bricks 커스텀 포스트의 IDopenAIAPIKey: OpenAI API의 API 키
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
}
}
}
}변수는 다음과 같이 지정합니다.
{
"customPostId": 123,
"openAIAPIKey": "sk-..."
}