Webhooks V4
O que é um webhook?
Um webhook é um callback HTTP do tipo push que o Frame.io dispara assim que algo interessante acontece na sua conta (por exemplo, quando um novo arquivo termina a transcodificação, um comentário é adicionado ou um projeto é criado).
Em vez de consultar a API repetidamente, você fornece uma URL HTTPS pública; o Frame.io envia uma carga JSON para essa URL em tempo real para que você possa:
Para saber mais sobre o que é um webhook e o que ele faz, consulte https://docs.webhook.site/.
Visão geral do ponto de acesso
Autenticação — Todos os pontos de acessoV4 exigem um token de acesso OAuth 2.0 obtido pelo Adobe Developer Console. Tokens de desenvolvedor legado e JWTs não são aceitos.
Alterações e atualizações no Frame V4
Webhooks criados no Legacy são transferidos para a V4 com as seguintes alterações:
- Estrutura de conteúdo: ID da conta adicionado ao conteúdo
- Alterações de ponto de acesso:
team_idnão é mais fornecido na carga JSON, mas no parâmetro de caminho da URL:https://api.frame.io/v4/accounts/:account_id/workspaces/:workspace_id/webhooks - Integração de API: devido às mudanças na estrutura da API, nos pontos de acesso e nos métodos de autenticação, qualquer código existente para webhooks de entrada que faça chamadas subsequentes à API do Frame.io para enriquecimento e consulta de recursos precisará ser atualizado
- Tipos de evento: webhooks de ativo foram divididos em eventos separados de Arquivo e Pasta. Todos os webhooks vindos do Legacy com eventos de ativo precisam ser atualizados para terem os eventos apropriados de Arquivo e Pasta
Status do webhook após migração: quando sua conta migra para o Frame.io V4, webhooks existentes de versões anteriores são desativados automaticamente. Isso garante que você possa modificar seus pontos de acesso de webhook e a lógica de integração para funcionar com as atualizações da V4 antes de reativá-los. Webhooks que não tiverem sido atualizados para compatibilidade com a V4 encontrarão erros se forem ativados sem as modificações apropriadas. Você pode verificar quais webhooks estão inativos examinando o campo is_active por meio da API ou revisando suas configurações de webhook antes de ligá-los novamente.
Assinaturas de eventos de webhook
Ao criar e atualizar webhooks, identifique quais eventos são de seu interesse. Escolha poucos ou muitos eventos, conforme necessário, mas observe que a experiência é melhor quando você assina menos eventos, separando seus webhooks de forma lógica com diferentes esquemas de nomenclatura e pontos de acesso diferentes, para que sua lógica de negócios no lado receptor faça menos filtragem e roteamento em funções compartilhadas.
Escopo do evento: todos os eventos estão no escopo do Workspace fornecido durante a criação do webhook. Isso significa que os eventos serão enviados para ações realizadas em todos os projetos nesse Workspace.
Projetos
Arquivos
Pastas
Comentários
Metadados
Coleções
Campos personalizados
Compartilhamentos
Conteúdo da mensagem de webhook
Todos os conteúdos de webhook contêm um campo type, indicando o evento que ocorreu, e um objeto resource. O objeto resource contém o type e ID do recurso Frame.io relacionado ao evento.
Exemplo de conteúdo
No exemplo acima de um evento file.created, o resource.id indica o ID do arquivo recém-criado. Além disso, são incluídos os objetos workspace, project e user, que contêm os respectivos workspace.id, project.id e user.id. Esses valores podem ser usados para reduzir chamadas de API filtrando eventos recebidos ou consultando dados armazenados localmente em cache.
Não incluímos nenhuma informação adicional além do ID do recurso sobre o recurso assinado.
Se o aplicativo exigir mais informações ou contexto, recomendamos fazer uma chamada de API para consultar mais informações sobre os recursos referenciados.
Segurança
Por padrão, todos os webhooks têm uma chave de assinatura. Esse segredo de assinatura não configurável pode ser usado para verificar se a solicitação se origina do Frame.io.
O conteúdo da resposta do webhook configurado inclui o segredo de assinatura específico desse webhook. Esse segredo é fornecido apenas nessa resposta inicial de criação do webhook; portanto, armazene-o em um local seguro no seu armazenamento de segredos ou em variáveis de ambiente. Use-o posteriormente para verificar se o webhook vem diretamente dos nossos servidores e não foi interceptado nem manipulado de nenhuma forma.
Verificação de assinaturas de webhook
Para proteger uma integração contra ataques man-in-the-middle e de repetição, é essencial verificar a assinatura do conteúdo do webhook. A verificação garante que os conteúdos de webhook tenham sido realmente enviados pelo Frame.io e que o conteúdo não tenha sido modificado durante o transporte.
Incluídos com a solicitação POST estão os seguintes cabeçalhos HTTP:
O carimbo de data e hora é a hora do sistema nos sistemas do Frame.io quando o webhook de saída é enviado. Isso pode ser usado para evitar ataques de repetição. Recomendamos verificar se esse horário está dentro de 5 minutos em relação à hora local. A assinatura é um hash HMAC SHA256 usando a chave de assinatura fornecida quando o Webhook é criado pela primeira vez. Siga estas etapas para verificar a assinatura:
A assinatura fornecida tem o prefixo v0=. Atualmente, o Frame.io tem apenas essa versão para assinar solicitações. Certifique-se de adicionar esse prefixo à assinatura calculada.
Novas tentativas e registro
-
Cinco tentativas no total (a inicial + 4 novas tentativas)
-
Recuo exponencial começando em 15 s (+ variação aleatória)
-
Um status não
2xxou tempo-limite > 5 segundos aciona a nova tentativa
O Frame.io mantém um log de falhas com: webhook_id, account_id, event_type, resource_id, user_id.
Tutorial de webhook
Etapa 1: Configurar o lado receptor (feito primeiro para que você saiba qual será sua URL)
Aqui, usamos webhook.site, que permite criar facilmente um receptor de webhook de uso único que pode ser usado para inspecionar conteúdos e enviar respostas básicas sem nenhuma lógica de negócios real. Ao acessar https://webhook.site pela primeira vez, um ponto de acesso de webhook exclusivo é criado para você, que pode ser copiado imediatamente para uso.
Essa URL é exclusiva da sua sessão.

Etapa 2: Escolher os eventos que você deseja assinar
Neste tutorial, vamos manter tudo simples e configurar este webhook para assinar apenas eventos file.created. O conteúdo JSON que usaremos para criar o webhook será o seguinte.
Etapa 3: Criar um recurso de webhook usando o Postman
Usando o Postman, faça uma chamada de API para criar o recurso de webhook, fornecendo o ponto de acesso do webhook.site no conteúdo.
Etapa 4: Testar!
Agora que você criou a assinatura do webhook e configurou um ponto de acesso para receber webhooks, é hora de testar acionando o primeiro webhook por meio da ação apropriada que fará com que ele seja disparado.
Como nossa amostra foi configurada para acionar o gatilho file.created, vamos carregar um novo ativo em qualquer Projeto dentro da Conta e do espaço de trabalho correspondentes em que o webhook foi configurado.

Recursos adicionais
O Ngrok é uma excelente ferramenta para desenvolvedores que trabalham com webhooks que precisam ser expostos em uma URL publicamente acessível. Ele cria túneis seguros do ambiente local para a Internet, permitindo expor seu servidor local para receber conteúdos de webhook em tempo real.
O Hookdeck é uma plataforma projetada para ajudar equipes a gerenciar webhooks de forma confiável, oferecendo um gateway de eventos robusto. Ele centraliza o processamento de webhooks, garantindo que nenhum evento seja perdido, e oferece recursos como filtragem, enfileiramento e repetição de webhooks com falha.
O Webhook.site é uma excelente ferramenta para prototipar e testar webhooks, oferecendo uma plataforma simples e avançada para capturar e inspecionar solicitações HTTP enviadas para URLs exclusivas geradas automaticamente.
O Val.town é uma excelente ferramenta para prototipar rapidamente manipuladores de webhook, pois simplifica o processo de escrever, testar e implantar pequenas funções JavaScript e Python diretamente do navegador.