Pular para o conteúdo
Decoding Chat API

Desenrolar

Desenrolar (unfurl) resolve uma URL na prévia que uma mensagem mostraria para ela. Essa prévia é um array de objetos embed, os mesmos objetos que a rota comum de mensagens anexa.

A rota é apenas para usuários. O Decoding Chat rejeita um token de bot e uma credencial bearer OAuth2 com 403 ACCESS_DENIED.

A tabela abaixo lista cada resolvedor de site. Se um site produz uma prévia depende do site, e os resolvedores do Klipy e do YouTube também exigem uma chave de API configurada na instância. Outras URLs públicas podem produzir prévias a partir dos metadados de suas páginas ou conteúdo de mídia.

SiteMatched URL
Hacker News1news.ycombinator.com com um caminho começando em /item
Klipy23klipy.com e www.klipy.com
Tenortenor.com
xkcdxkcd.com
YouTube24youtube.com, www.youtube.com, m.youtube.com, music.youtube.com, youtube-nocookie.com, www.youtube-nocookie.com e youtu.be
Wikipedia5wikipedia.org, www.wikipedia.org e os hosts de idioma en, de, fr, es, it, ja, ru e zh, com um caminho começando em /wiki/
Bluesky6bsky.app
FxTwitter7fxtwitter.com, fixupx.com, twittpr.com, xfixup.com e qualquer subdomínio destes
Generic8Todas as URLs

1 O identificador do item é lido do parâmetro de consulta id, e uma URL que não tem nenhum não produz embed

2 As URLs de prévia do Klipy e do YouTube usam sua forma canônica de provedor

3 Exige que a instância tenha uma chave de API do Klipy configurada e não produz nada sem uma

4 A URL possui um identificador de vídeo de 6 a 15 caracteres retirados de A-Za-z0-9_-, e a instância precisa de uma chave da API de Dados do YouTube configurada

5 Um host cujo subdomínio de idioma está fora do conjunto suportado não corresponde, e o título do artigo é retirado do caminho após /wiki/

6 Resolve a URL de uma postagem e a URL de um perfil. Qualquer outro caminho no host não produz embed

7 Apenas os domínios espelho. twitter.com e x.com não correspondem a este resolvedor e caem no genérico

8 Constrói um embed de mídia direto quando a resposta é uma imagem, vídeo ou recurso de áudio. Uma resposta final cujo status não seja 200 não produz embed

Um embed resolvido tem no máximo um embed aninhado em children, e um embed aninhado não tem children próprios.

O Decoding Chat aplica sua política de rede antes de cada busca e novamente para cada alvo de redirecionamento. Ele recusa uma URL por qualquer um destes motivos:

  • A URL está vazia, excede 8192 caracteres ou contém um caractere de controle.
  • O esquema não é HTTP nem HTTPS.
  • A URL possui informações de usuário.
  • A porta é 0.
  • O host não é um nome de host público válido.
  • O host resolve para um loopback, privado, link-local ou outro endereço reservado.
  • O host não resolve para nenhum endereço.

A resolução tem um prazo de 12 segundos. Uma busca falha em um loop de redirecionamento, mais de cinco redirecionamentos ou um documento maior que 8 MiB.

Uma busca recusada ou com falha não falha a operação por si só. Quando o Decoding Chat não produz nenhum embed, a resposta é 200 com um array vazio.

Este endpoint não lê resultados em cache e resolve a URL novamente. Uma mensagem pode mostrar uma prévia em cache para a mesma URL ou receber sua prévia posteriormente em uma atualização de mensagem.

POST/v1/unfurl

Resolve a URL fornecida. Retorna um array de objetos embed, vazio quando nenhum resolvedor produz um. Apenas para usuário.

Nenhuma permissão se aplica.

FieldTypeDescription
url123stringURL HTTP ou HTTPS absoluta (1-2048 caracteres)

1 Cortado antes de ter seu comprimento medido

2 Um valor normalizado fora de 1 a 2048 caracteres tem o código de validação URL_LENGTH_INVALID, e qualquer outra rejeição neste limite tem INVALID_URL_FORMAT

3 O valor começa com http:// ou https://. O Decoding Chat rejeita um valor que tenha credenciais incorporadas, omita um host, use uma forma relativa ao protocolo ou termine seu host com um ponto final

Fora de uma instância de desenvolvimento, o Decoding Chat também rejeita uma URL que omite um domínio de nível superior.

A mídia explícita pode carregar CONTAINS_EXPLICIT_MEDIA em suas flags. A mídia do Klipy não é classificada. As prévias de mensagens em canais que permitem mídia explícita podem ter flags diferentes.

StatusBodyCondition
200array[objeto embed]Resolução concluída, possivelmente sem embed
403error responseO chamador é um bot ou apresenta uma credencial bearer e a solicitação retorna ACCESS_DENIED, ou a conta tem uma ação obrigatória pendente e a solicitação retorna ACCOUNT_SUSPICIOUS_ACTIVITY
502error responseO serviço de resolução relata uma falha, ou responde com um payload que a API não pode ler, e a solicitação retorna BAD_GATEWAY
503error responseNenhum serviço de resolução está respondendo, ou o serviço rejeita a solicitação em seu limite de simultaneidade, e a solicitação retorna SERVICE_UNAVAILABLE
504error responseO serviço de resolução não responde dentro de seu prazo de 12 segundos e a solicitação retorna GATEWAY_TIMEOUT

A resolução pode buscar a URL e sua mídia vinculada. Ela não cria nenhuma mensagem.

10 solicitações por minuto para cada usuário autenticado, no bucket unfurl:debug. O Decoding Chat cobra o bucket antes de verificar a credencial e o vincula ao endereço do chamador quando nenhuma credencial válida está presente. Portanto, um chamador não autenticado o consome e recebe 429 RATE_LIMITED quando ele se esgota, não 401.