Glosario

Cómo un threadgate de Bluesky decide quién puede responder a una publicación

Taras Shynkarenko
Taras Shynkarenko
•Actualizado: •7 min de lectura
Cómo un threadgate de Bluesky decide quién puede responder a una publicaciónCómo un threadgate de Bluesky decide quién puede responder a una publicación

TL;DR, Respuesta Rápida

7 min de lectura

Los controles de respuesta de Bluesky viven en un registro app.bsky.feed.threadgate cuya clave de registro coincide con la de la publicación raíz del hilo. Su array allow admite hasta 5 reglas: mentionRule, followerRule, followingRule y listRule. Un array vacío significa que nadie puede responder, y un array ausente significa que puede cualquiera. El mismo registro guarda hasta 300 URI de respuestas ocultas. Las citas se controlan con un registro app.bsky.feed.postgate aparte, cuyo disableRule desactiva la inserción y cuyo detachedEmbeddingUris guarda hasta 50 citas desvinculadas.

¿Qué es un threadgate de Bluesky?

Lo que se conoce como threadgate de Bluesky es el registro app.bsky.feed.threadgate que decide quién puede responder a un hilo. El lexicon lo describe como un "Record defining interaction gating rules for a thread (aka, reply controls)." Los controles de respuesta en Bluesky no son un ajuste de tu cuenta ni un indicador de la publicación. Son este registro, guardado en tu propio repositorio.

Es un registro propio, no un campo de la publicación. Ese diseño tiene una consecuencia que mucha gente pasa por alto: puedes añadir, cambiar o borrar los controles de respuesta de una publicación que ya está en línea, porque el registro de la publicación nunca cambia.

El lexicon fija dónde tiene que estar el registro: "The record key (rkey) of the threadgate record must match the record key of the thread's root post, and that record must be in the same repository." Un threadgate pertenece a una publicación raíz, en el repo del propio autor, bajo la misma rkey.

¿Qué campos tiene el registro threadgate?

Cuatro, y dos de ellos son obligatorios.

CampoTipoObligatorioDescripción del lexicon
postat-uriSí"Reference (AT-URI) to the post record."
createdAtdatetimeSíNinguna
allowarray, máx. 5No"List of rules defining who can reply to this post."
hiddenRepliesarray de at-uri, máx. 300No"List of hidden reply URIs."

Un registro completo que deja responder a las cuentas mencionadas y a una lista tiene este aspecto:

{
  "$type": "app.bsky.feed.threadgate",
  "post": "at://did:plc:abc123/app.bsky.feed.post/3kxyzpost",
  "allow": [
    { "$type": "app.bsky.feed.threadgate#mentionRule" },
    {
      "$type": "app.bsky.feed.threadgate#listRule",
      "list": "at://did:plc:abc123/app.bsky.graph.list/3kxyzlist"
    }
  ],
  "createdAt": "2026-09-24T10:00:00.000Z"
}

Se escribe con com.atproto.repo.createRecord, poniendo collection en app.bsky.feed.threadgate y rkey en la rkey de la publicación, que es el último segmento de su AT-URI. La página de thread gates de Bluesky muestra el mismo paso en su ejemplo de TypeScript: const { rkey } = new AtUri(postUri).

¿Qué reglas allow puede usar un threadgate de Bluesky?

Cuatro tipos de regla, cada uno un objeto dentro de allow. La documentación de Bluesky los enumera con definiciones de una línea:

ReglaQuién puede responder
app.bsky.feed.threadgate#mentionRule"Allow replies from actors mentioned in your post."
app.bsky.feed.threadgate#followingRule"Allow replies from actors you follow."
app.bsky.feed.threadgate#followerRule"Allow replies from actors following you."
app.bsky.feed.threadgate#listRule"Allow replies from actors on a list."

Tres de las cuatro no llevan ninguna propiedad. listRule es la excepción: su campo list es obligatorio y recibe el AT-URI de un registro app.bsky.graph.list.

Las reglas suman en lugar de restringir. El ejemplo de Bluesky pone mentionRule, followingRule y listRule en un mismo array con los comentarios "allow mentioned users", "allow followed users" y "allow list members", así que cada regla abre las respuestas a un grupo más.

mentionRule depende de cómo la publicación codifica sus menciones. En un registro de publicación, una mención es un facet app.bsky.richtext.facet#mention, y el lexicon de facets señala que "The text is usually a handle, including a '@' prefix, but the facet reference is a DID." Escribir un @handle como texto plano sin facet no lo convierte en una mención dentro del registro. Acertar con los offsets en bytes del facet es un problema aparte, tratado en la nota sobre byteStart y byteEnd de los facets de Bluesky.

El array allow tiene un máximo de 5 elementos aunque solo hay cuatro tipos de regla. El esquema no prohíbe repetir listRule, así que el quinto hueco sirve para una segunda lista.

Un candado colgado de una puerta de madera cerrada, que representa un hilo en el que nadie puede responder.

¿Qué diferencia hay entre un array allow vacío y uno ausente?

Toda. El lexicon marca la línea en una frase: "If value is an empty array, no one can reply. If value is undefined, anyone can reply."

Valor de allowQuién puede responder
AusenteCualquiera
[]Nadie
Una o más reglasCualquiera que cumpla alguna regla

La documentación de Bluesky lo formula a nivel de registro: "If a thread gate record is present but empty, then nobody can reply," y "If a thread gate record is not present, then anybody can reply." Si lees las dos fuentes juntas aparece un caso que la página de documentación se salta. Un registro threadgate puede existir sin campo allow, por ejemplo uno que solo contiene hiddenReplies. Según el texto del lexicon, ese hilo sigue abierto a cualquiera. Si tu código oculta una respuesta creando un threadgate y luego alguien entiende "registro presente significa hilo restringido", tendrá la lógica al revés.

¿Se puede restringir una respuesta en mitad de un hilo?

No. La rkey del threadgate tiene que coincidir con "the thread's root post", así que hay un threadgate por hilo, ligado a su primera publicación. Las respuestas más abajo no pueden llevar sus propios controles de respuesta.

AdaptlyPost
AdaptlyPost

Empieza tu prueba gratis de 7 días

Analíticas multiplataforma

Bandeja Social

Asistente con IA

El array hiddenReplies vive en el mismo registro raíz y tiene un máximo de 300 URI. El anuncio de Bluesky de esta función, en la versión 1.90 de la app, dice "Only the original creator of the thread can hide replies," y que "All hidden replies will be placed behind a Hidden replies screen." Siguen accesibles allí, "but much less visible." El mismo anuncio advierte de que las respuestas ocultas, junto con qué publicaciones ocultó el autor, "are still public data." Todo lo que hay en un registro threadgate lo puede leer cualquiera que lea tu repositorio.

Una mano subraya un pasaje citado en un libro impreso, para ilustrar la cita de la publicación de otra persona.

¿Qué es el registro postgate?

El postgate es el equivalente del threadgate para las citas. app.bsky.feed.postgate es un "Record defining interaction rules for a post," y sigue la misma regla de ubicación: su rkey "must match the record key of the post, and that record must be in the same repository."

CampoTipoObligatorioDescripción del lexicon
postat-uriSí"Reference (AT-URI) to the post record."
createdAtdatetimeSíNinguna
embeddingRulesarray, máx. 5No"List of rules defining who can embed this post."
detachedEmbeddingUrisarray de at-uri, máx. 50No"List of AT-URIs embedding this post that the author has detached from."

embeddingRules tiene hoy un solo tipo de regla, app.bsky.feed.postgate#disableRule, descrito como "Disables embedding of this post." Ese es el interruptor que desactiva las citas.

Ojo, los valores por defecto del postgate son distintos de los del threadgate. Para embeddingRules, "If value is an empty array or is undefined, no particular rules apply and anyone can embed." Un array vacío cierra las respuestas en un threadgate pero deja abiertas las citas en un postgate. Para bloquear citas hace falta un disableRule explícito.

El postgate también cambia de alcance. Coincide con "the record key of the post", no con la raíz del hilo, así que cualquier publicación, incluida una respuesta, puede tener su propio postgate.

detachedEmbeddingUris registra las citas de las que ya te has desvinculado. El anuncio de la versión 1.90 de Bluesky lo describe: "you can detach your original post from someone's quote post," y "Like blocks, quote post removals are public data." El array admite 50 URI.

¿Cómo sabe un cliente que una publicación está restringida?

Por la vista de la publicación, no descargando los registros. app.bsky.feed.defs#postView lleva un campo threadgate que devuelve el registro junto con las listas a las que hace referencia. El estado del visor para la cuenta con sesión iniciada añade dos booleanos, replyDisabled y embeddingDisabled, que un cliente puede usar para poner en gris los botones de responder y citar para esa persona.

Una herramienta de programación tiene un paso extra. El threadgate es un segundo registro, así que una publicación programada con controles de respuesta supone dos escrituras: la publicación y luego el gate bajo la misma rkey. La nota sobre cómo programar publicaciones en Bluesky cubre la parte de la publicación, y las dos escrituras cuentan para los límites descritos en la nota sobre el límite de solicitudes de la API de Bluesky.

Publicar una publicación con controles de respuesta
1
Escribe la publicación. Crea el registro del post y guarda su AT-URI.
2
Toma el rkey. Es el último segmento del AT-URI de la publicación.
3
Escribe el threadgate. Mismo repositorio, colección app.bsky.feed.threadgate, mismo rkey.
4
Añade un postgate si no quieres citas. Es un registro aparte, con el rkey de la publicación y una disableRule.
Cada gate es una escritura propia además de la publicación.

Preguntas frecuentes

¿Cómo impido que nadie responda a una publicación de Bluesky mediante la API?

Crea un registro app.bsky.feed.threadgate con la rkey de la publicación y "allow": []. El lexicon dice "If value is an empty array, no one can reply."

¿Puede un threadgate de Bluesky permitir que solo respondan mis seguidores?

Sí. Añade app.bsky.feed.threadgate#followerRule a allow. Bluesky lo define como "Allow replies from actors following you."

¿Cuántas reglas admite un threadgate?

Cinco. El array allow tiene un maxLength de 5 en el lexicon.

¿Puedo cambiar los controles de respuesta después de publicar?

Sí. El threadgate es un registro aparte, así que puedes crearlo, actualizarlo o borrarlo sin tocar la publicación.

¿Cómo desactivo las citas en Bluesky mediante la API?

Crea un registro app.bsky.feed.postgate con la rkey de la publicación y añade app.bsky.feed.postgate#disableRule a embeddingRules. Un array vacío no bloquea las citas.

¿Las respuestas ocultas son privadas?

No. Bluesky dice que las respuestas ocultas, y qué publicaciones ocultó el autor, "are still public data." Están en el array hiddenReplies del threadgate, que puede leer cualquiera.

AdaptlyPost
AdaptlyPost

Empieza tu prueba gratis de 7 días

Analíticas multiplataforma

Bandeja Social

Asistente con IA

¿Quién puede ocultar respuestas en un hilo de Bluesky?

Solo el creador original del hilo puede ocultar respuestas, según el anuncio de Bluesky de la versión 1.90. Los URI de las respuestas ocultas van en el array hiddenReplies del threadgate, hasta 300. Quedan tras una pantalla de Hidden replies y siguen siendo accesibles allí.

¿Un array embeddingRules vacío desactiva las citas?

No lo hace. En un postgate, un embeddingRules vacío o sin definir significa que no se aplica ninguna regla particular y cualquiera puede incrustar la publicación. Para bloquear las citas, añade app.bsky.feed.postgate#disableRule.

¿Cómo separo una cita de mi publicación original en Bluesky?

Añade el AT-URI de la cita al array detachedEmbeddingUris del postgate de tu publicación. El array admite hasta 50 URI. Bluesky señala que, igual que los bloqueos, las eliminaciones de citas son datos públicos.

¿Puede un threadgate combinar varias reglas allow?

Las reglas se suman. Cada regla de allow abre las respuestas a un grupo más, así que usuarios mencionados, usuarios seguidos y una lista pueden convivir en el mismo array. El array admite hasta 5 reglas, y listRule necesita el AT-URI de un registro app.bsky.graph.list.

¿Te resultó útil este artículo?

¡Cuéntanos qué te parece!

Vernos más en Google

Un clic marca AdaptlyPost como fuente preferida y nuestros artículos aparecen más arriba en tus Noticias destacadas, el modo IA y los resúmenes con IA.

Antes de irte...

AdaptlyPost

AdaptlyPost

Programa tu contenido en todas las plataformas

Gestiona todas tus cuentas de redes sociales en un solo lugar con AdaptlyPost.

Analíticas multiplataforma

Bandeja Social

Asistente con IA

Términos relacionados del glosario

Artículos Relacionados