Integrações & OAuth

Em uma implantação auto-hospedada, as integrações não funcionam até você registrar seu próprio aplicativo OAuth em cada serviço. A plataforma hospedada do Studio já vem com credenciais para todas as integrações; uma instância auto-hospedada não vem com nenhuma. Os usuários vão ver o conector na interface, clicar em "Connect" e receber um erro do provedor até que o *_CLIENT_ID e o *_CLIENT_SECRET correspondentes estejam definidos.

Você só precisa registrar os serviços que seu time realmente usa. Um único app OAuth cobre todos os conectores do Studio que compartilham aquela credencial — um único app do Google atende Gmail, Drive, Sheets, Calendar, Docs, Forms, BigQuery e mais.

Como funciona

Cada conector tem um provider ID. Quando um usuário conecta uma conta, o Studio o redireciona para o provedor, e o provedor redireciona de volta para:

https://<your-studio-domain>/api/auth/oauth2/callback/<provider-id>

Essa URL é derivada de NEXT_PUBLIC_APP_URL, então defina-a corretamente antes de registrar qualquer coisa — a redirect URI que você registra no provedor precisa coincidir byte a byte, incluindo o esquema e a ausência de barra no final.

A maioria dos provedores permite registrar várias redirect URIs em um mesmo app. Registre sua URL de produção e qualquer URL de staging juntas, para que um app OAuth atenda os dois ambientes.

Configuração

Confirme sua URL pública

NEXT_PUBLIC_APP_URL=https://studio.yourdomain.com
BETTER_AUTH_URL=https://studio.yourdomain.com

As duas precisam ser a sua origem pública real. Se estiverem erradas, todo ciclo de OAuth falha com erro de redirect URI incompatível.

Registre um app no provedor

No console de desenvolvedor do provedor, crie um aplicativo OAuth 2.0. Registre a(s) redirect URI(s) de cada conector do Studio que você quer daquele provedor — uma linha por provider ID das tabelas abaixo.

Para um app do Google que cobre Gmail e Drive, por exemplo, você registra as duas:

https://studio.yourdomain.com/api/auth/oauth2/callback/google-email
https://studio.yourdomain.com/api/auth/oauth2/callback/google-drive

Os escopos são solicitados pelo Studio no momento da autorização; em geral você não precisa declará-los antes, mas Google e Microsoft exigem que você habilite as APIs correspondentes no projeto/app primeiro (por exemplo, Gmail API, Drive API, Calendar API).

Defina as credenciais

Adicione o client ID e o secret ao ambiente da aplicação. No Kubernetes eles vão em app.env — o chart escreve todas as chaves de lá em um Secret gerenciado por ele — mas forneça os valores via External Secrets ou por um Secret criado previamente, em vez de commitá-los em um arquivo de values:

app:
  env:
    GOOGLE_CLIENT_ID: "..."
    GOOGLE_CLIENT_SECRET: "..."
    SLACK_CLIENT_ID: "..."
    SLACK_CLIENT_SECRET: "..."

Reinicie a aplicação. As credenciais são lidas na inicialização — um pod em execução não vai captar credenciais novas.

Verifique

Abra um workflow, adicione o bloco da integração e conecte uma conta. Um ciclo bem-sucedido devolve você ao Studio com a conta listada. Uma redirect URI incompatível é a falha que você vai encontrar mais vezes; compare a URI registrada com NEXT_PUBLIC_APP_URL caractere por caractere.

Referência de provedores

Todo provider ID abaixo mapeia para a redirect URI https://<your-domain>/api/auth/oauth2/callback/<provider-id>.

Google

Um único client OAuth no Google Cloud Console cobre todos estes. Habilite a API correspondente para cada conector que você usar.

Variáveis de ambienteProvider IDs
GOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET
google-email, google-drive, google-sheets, google-docs, google-calendar, google-contacts, google-forms, google-tasks, google-meet, google-groups, google-ads, google-bigquery, google-vault, vertex-ai

As mesmas variáveis também alimentam o "Sign in with Google". Veja Autenticação.

Microsoft

Um único registro de app no Entra ID cobre todos estes.

Variáveis de ambienteProvider IDs
MICROSOFT_CLIENT_ID
MICROSOFT_CLIENT_SECRET
outlook, onedrive, sharepoint, microsoft-teams, microsoft-excel, microsoft-planner, microsoft-dataverse, microsoft-ad

As mesmas variáveis também alimentam o "Sign in with Microsoft".

Todo o resto

ServiçoVariáveis de ambienteProvider ID
SlackSLACK_CLIENT_ID / SLACK_CLIENT_SECRETslack
NotionNOTION_CLIENT_ID / NOTION_CLIENT_SECRETnotion
JiraJIRA_CLIENT_ID / JIRA_CLIENT_SECRETjira
ConfluenceCONFLUENCE_CLIENT_ID / CONFLUENCE_CLIENT_SECRETconfluence
LinearLINEAR_CLIENT_ID / LINEAR_CLIENT_SECRETlinear
AsanaASANA_CLIENT_ID / ASANA_CLIENT_SECRETasana
ClickUpCLICKUP_CLIENT_ID / CLICKUP_CLIENT_SECRETclickup
MondayMONDAY_CLIENT_ID / MONDAY_CLIENT_SECRETmonday
AirtableAIRTABLE_CLIENT_ID / AIRTABLE_CLIENT_SECRETairtable
HubSpotHUBSPOT_CLIENT_ID / HUBSPOT_CLIENT_SECREThubspot
SalesforceSALESFORCE_CLIENT_ID / SALESFORCE_CLIENT_SECRETsalesforce
PipedrivePIPEDRIVE_CLIENT_ID / PIPEDRIVE_CLIENT_SECRETpipedrive
AttioATTIO_CLIENT_ID / ATTIO_CLIENT_SECRETattio
Zoho DeskZOHO_CLIENT_ID / ZOHO_CLIENT_SECRETzoho-desk
WealthboxWEALTHBOX_CLIENT_ID / WEALTHBOX_CLIENT_SECRETwealthbox
BoxBOX_CLIENT_ID / BOX_CLIENT_SECRETbox
DropboxDROPBOX_CLIENT_ID / DROPBOX_CLIENT_SECRETdropbox
DocuSignDOCUSIGN_CLIENT_ID / DOCUSIGN_CLIENT_SECRETdocusign
ZoomZOOM_CLIENT_ID / ZOOM_CLIENT_SECRETzoom
Cal.comApenas CALCOM_CLIENT_ID — client público com PKCE, sem secretcalcom
WebflowWEBFLOW_CLIENT_ID / WEBFLOW_CLIENT_SECRETwebflow
WordPressWORDPRESS_CLIENT_ID / WORDPRESS_CLIENT_SECRETwordpress
LinkedInLINKEDIN_CLIENT_ID / LINKEDIN_CLIENT_SECRETlinkedin
XX_CLIENT_ID / X_CLIENT_SECRETx
RedditREDDIT_CLIENT_ID / REDDIT_CLIENT_SECRETreddit
SpotifySPOTIFY_CLIENT_ID / SPOTIFY_CLIENT_SECRETspotify
TikTokTIKTOK_CLIENT_ID / TIKTOK_CLIENT_SECRETtiktok

Serviços com um fluxo diferente

ServiçoConfiguraçãoObservações
InstagramINSTAGRAM_CLIENT_ID / INSTAGRAM_CLIENT_SECRETApp ID/Secret do Instagram, obtidos no Meta App Dashboard (Instagram → API setup with Instagram login). Redirect URI: /api/auth/oauth2/callback/instagram. Publicar exige armazenamento de objetos em nuvem — a Meta busca uma URL HTTPS pública, então armazenamento em disco local não funciona.
Facebook PagesFACEBOOK_APP_ID / FACEBOOK_APP_SECRET, e NEXT_PUBLIC_FACEBOOK_APP_ID na webApp ID/Secret obtidos no Meta App Dashboard. A web faz login pelo SDK JavaScript do Facebook, e o servidor troca o token de curta duração por tokens de página de longa duração.
ShopifySHOPIFY_CLIENT_ID / SHOPIFY_CLIENT_SECRETRedirect URI: /api/auth/oauth2/callback/shopify. Fluxo de instalação por loja.
TrelloTRELLO_API_KEYBaseado em chave de API, não em OAuth 2.0. Callback: /api/auth/trello/callback.

Credenciais de integração fora do OAuth

Muitos blocks se autenticam com uma chave de API que o usuário cola no próprio block, e não exigem nada de você.

O Studio também tem um mecanismo de "chave hospedada", configurado com as variáveis {PREFIX}_API_KEY_COUNT + {PREFIX}_API_KEY_1..N abaixo, que permite à plataforma fornecer uma chave para os usuários não precisarem trazer a própria. O caminho de injeção só é ativado quando a implantação é a plataforma hospedada do Studio (isHosted, derivado do hostname da aplicação), então, em uma instância auto-hospedada, essas variáveis não eliminam a necessidade de os usuários trazerem a própria chave. Defina-as apenas se você estiver rodando um fork que adaptou essa checagem.

As variáveis, para referência:

VariávelServiço
EXA_API_KEY (ou EXA_API_KEY_COUNT + EXA_API_KEY_1..N)Busca Exa
SERPER_API_KEYBusca Serper
BROWSERBASE_API_KEY / BROWSERBASE_PROJECT_IDBrowserbase
HUNTER_API_KEY_COUNT + HUNTER_API_KEY_1..NHunter.io
PEOPLEDATALABS_API_KEY_COUNT + PEOPLEDATALABS_API_KEY_1..NPeople Data Labs
CONTEXT_DEV_API_KEY_COUNT + CONTEXT_DEV_API_KEY_1..NContext.dev
FALAI_API_KEYfal.ai
TWILIO_ACCOUNT_SID / TWILIO_AUTH_TOKEN / TWILIO_PHONE_NUMBERTwilio
AGENTMAIL_API_KEY / AGENTMAIL_DOMAINAgentMail

Provedores que aceitam um _COUNT mais chaves numeradas distribuem as requisições em round-robin entre elas.

Triggers que precisam de configuração extra

Triggers de webhook recebem callbacks do provedor e precisam conseguir verificá-los:

VariávelNecessária para
SLACK_SIGNING_SECRETVerificar assinaturas de eventos e slash commands do Slack
SLACK_EXTENDED_SCOPES / NEXT_PUBLIC_SLACK_EXTENDED_SCOPESSolicitar o conjunto ampliado de escopos do Slack

Sua implantação também precisa ser alcançável pelos servidores do provedor para que triggers de webhook disparem — uma instância do Studio em rede privada pode usar triggers de polling, mas não triggers de webhook. Triggers de polling exigem, além disso, o agendador; veja Jobs em Background.

Common Questions

Apenas para as integrações que seu time usa. Nada quebra se as credenciais de um provedor não estiverem definidas — aquele conector simplesmente não pode ser conectado. Um app do Google cobre 14 conectores e um app da Microsoft cobre 8, então a maioria das implantações precisa de apenas alguns registros.
Quase sempre NEXT_PUBLIC_APP_URL não coincide com a URI registrada no provedor. Verifique http vs https, barra no final, diferença entre apex e www, ou uma porta. A URI que o Studio envia é montada a partir de NEXT_PUBLIC_APP_URL no momento da requisição.
Sim, se o provedor permitir várias redirect URIs em um app — registre os dois hosts. Provedores que permitem apenas uma URI precisam de um app por ambiente.
A Meta busca a mídia em uma URL HTTPS pública em vez de aceitar um upload, então os arquivos publicados precisam estar no S3, no Azure Blob ou no GCS. Armazenamento em disco local não consegue servi-los. Anexos do Gmail e outras integrações não têm essa restrição.