Biblioteka queries
Biblioteka queriesPrzepisywanie treści strony Bricks z ChatGPT dla lepszego SEO

Przepisywanie treści strony Bricks z ChatGPT dla lepszego SEO

To query używa ChatGPT do przepisania treści elementów heading i text strony Bricks, dla lepszego SEO.

To query wymaga włączenia rozszerzenia Bricks.

Query wymaga następujących zmiennych:

  • $customPostId: ID niestandardowego wpisu Bricks do zaktualizowania
  • $openAIAPIKey: Klucz API dla OpenAI API
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
      }
    }
  }
}