Queries Kütüphanesi
Queries KütüphanesiBricks sayfasındaki içeriği daha iyi SEO için ChatGPT ile yeniden yazma

Bricks sayfasındaki içeriği daha iyi SEO için ChatGPT ile yeniden yazma

Bu query, daha iyi SEO için bir Bricks sayfasının heading ve text öğelerindeki içeriği yeniden yazmak amacıyla ChatGPT kullanır.

Bu query, Bricks uzantısının etkinleştirilmesini gerektirir.

Query aşağıdaki değişkenleri gerektirir:

  • $customPostId: Güncellenecek Bricks özel gönderisinin kimliği
  • $openAIAPIKey: OpenAI API için API anahtarı
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
      }
    }
  }
}