---
title: "Conector GitHub"
description: "Guia completo de integração do GitHub para sincronizar eventos de repositório, issues, pull requests e atividade de desenvolvedores com o Brevo via Tajo."
url: https://tajo.io/pt/docs/connectors/custom/github/
markdown: https://tajo.io/pt/docs/connectors/custom/github.md
lang: pt-BR
robots: noindex
---

Solicite acesso antecipado

Indique o seu nome e endereço de e-mail profissional. Enviaremos um link para confirmar o seu pedido de acesso ao Tajo.

# Conector GitHub

Status do conector: Planejado Ainda não construído. O Tajo não executa este conector hoje.

| Campo de origem | Campo de destino | Valor de exemplo |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Conecte seus repositórios do GitHub ao Brevo para rastreamento de engajamento de desenvolvedores, workflows de notificação de release e monitoramento de atividade da comunidade através do Tajo.

## Visão geral

| Propriedade | Valor |
| --- | --- |
| **Plataforma** | GitHub |
| **Categoria** | Personalizado |
| **Complexidade de configuração** | Moderada |
| **Integração oficial** | Não |
| **Dados sincronizados** | Eventos, Usuários, Repositórios |
| **Tipo de API** | REST API, GraphQL API |
| **Autenticação** | GitHub App / Personal Access Token / OAuth 2.0 |
| **URL base** | `https://api.github.com` |
| **Versão da API** | `2022-11-28` (versionamento baseado em cabeçalho) |

## Recursos

- **Rastreamento de issues e PRs** - Sincronize eventos de issues e pull requests para as timelines de contato do Brevo
- **Notificações de release** - Dispare campanhas do Brevo em novas releases de repositório
- **Sincronização de colaboradores** - Mapeie colaboradores do GitHub para contatos do Brevo para engajamento com a comunidade
- **Rastreamento de stars e forks** - Monitore métricas de popularidade do repositório
- **Encaminhamento de eventos de webhook** - Encaminhe eventos do GitHub para automações do Brevo
- **Catálogo de repositórios** - Sincronize metadados de repositório como itens de catálogo do Brevo

## Pré-requisitos

Antes de começar, certifique-se de que você tem:

1. Uma conta GitHub com acesso aos repositórios alvo
2. Um GitHub App ou Personal Access Token (fine-grained recomendado)
3. Acesso de administrador aos repositórios para configuração de webhook
4. Uma conta Brevo com acesso à API
5. Uma conta Tajo com assinatura ativa

## Autenticação

O GitHub suporta vários métodos de autenticação. O Tajo recomenda usar GitHub Apps para acesso em nível de organização.

### Opção 1: GitHub App (Recomendado)

1. Navegue até **Settings** > **Developer settings** > **GitHub Apps**
2. Clique em **New GitHub App**
3. Configure o app com estas permissões:

```
Repository permissions:
  Issues: Read
  Pull requests: Read
  Contents: Read
  Metadata: Read

Organization permissions:
  Members: Read

Subscribe to events:
  Issues
  Pull request
  Push
  Release
  Star
  Fork
```

### Opção 2: Fine-Grained Personal Access Token

1. Acesse **Settings** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Clique em **Generate new token**
3. Selecione os repositórios alvo
4. Conceda estas permissões:

```
Repository access: Selected repositories
Permissions:
  Issues: Read-only
  Pull requests: Read-only
  Contents: Read-only
  Metadata: Read-only
```

Segurança do token

Tokens fine-grained têm datas de expiração. Configure a rotação de tokens antes da expiração. Tokens de instalação de GitHub App se renovam automaticamente e são preferidos para uso em produção.

### Conectando ao Tajo

```bash
# Using GitHub App
tajo connectors install github \
  --app-id $GITHUB_APP_ID \
  --private-key-path ./github-app-key.pem \
  --installation-id $GITHUB_INSTALLATION_ID

# Using Personal Access Token
tajo connectors install github \
  --token $GITHUB_TOKEN
```

## Configuração

### Configuração básica

```yaml
connectors:
  github:
    enabled: true
    auth_type: "github_app"  # or "token"

    repositories:
      - owner/repo-1
      - owner/repo-2

    sync:
      issues: true
      pull_requests: true
      releases: true
      contributors: true
      stars: true

    lists:
      contributors: 20
      stargazers: 21
```

### Mapeamento de campos

Mapeie dados de usuário do GitHub para atributos de contato do Brevo:

```yaml
field_mapping:
  # Standard fields
  login: GITHUB_USERNAME
  email: email
  name: FIRSTNAME

  # Developer metrics
  contributions: GITHUB_CONTRIBUTIONS
  repositories_count: GITHUB_REPOS
  followers: GITHUB_FOLLOWERS
  created_at: GITHUB_JOINED

  # Custom attributes
  company: COMPANY
  location: LOCATION
  bio: GITHUB_BIO
```

## Endpoints da API

O Tajo integra-se com os seguintes endpoints da REST API do GitHub:

| Endpoint | Método | Finalidade |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Listar issues do repositório |
| `/repos/{owner}/{repo}/pulls` | GET | Listar pull requests |
| `/repos/{owner}/{repo}/releases` | GET | Listar releases |
| `/repos/{owner}/{repo}/contributors` | GET | Listar colaboradores |
| `/repos/{owner}/{repo}/stargazers` | GET | Listar stargazers |
| `/repos/{owner}/{repo}/forks` | GET | Listar forks |
| `/repos/{owner}/{repo}/events` | GET | Listar eventos do repositório |
| `/users/{username}` | GET | Obter perfil de usuário |
| `/orgs/{org}/members` | GET | Listar membros da organização |
| `/repos/{owner}/{repo}/hooks` | POST | Criar webhook |

## Exemplos de código

### Inicializar o conector

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

await tajo.connectors.connect('github', {
  appId: process.env.GITHUB_APP_ID,
  privateKey: process.env.GITHUB_PRIVATE_KEY,
  installationId: process.env.GITHUB_INSTALLATION_ID
});
```

### Sincronizar colaboradores para o Brevo

```javascript
await tajo.connectors.sync('github', {
  type: 'full',
  resources: ['contributors'],
  repositories: ['owner/repo-1', 'owner/repo-2']
});

const status = await tajo.connectors.status('github');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-03-15T11:00:00Z',
//   contributorsCount: 245,
//   issuesTracked: 1890,
//   releasesTracked: 34
// }
```

### Tratar eventos de webhook

```javascript
app.post('/webhooks/github', async (req, res) => {
  const signature = req.get('X-Hub-Signature-256');
  const event = req.get('X-GitHub-Event');

  // Verify webhook signature
  if (!verifyGitHubSignature(req.body, signature)) {
    return res.status(401).send('Unauthorized');
  }

  await tajo.connectors.handleWebhook('github', {
    event,
    payload: req.body
  });

  res.status(200).send('OK');
});
```

### Disparar campanha de release

```javascript
// Listen for new releases and trigger Brevo campaign
tajo.connectors.on('github', 'release.published', async (event) => {
  await tajo.campaigns.trigger('release-announcement', {
    listId: 21,
    params: {
      version: event.release.tag_name,
      release_notes: event.release.body,
      download_url: event.release.html_url
    }
  });
});
```

## Limites de taxa

O GitHub aplica limites de taxa com base no método de autenticação:

| Autenticação | Limite de taxa primário | Search API |
| --- | --- | --- |
| **Não autenticado** | 60 requisições/hora | 10 requisições/minuto |
| **Personal Access Token** | 5.000 requisições/hora | 30 requisições/minuto |
| **GitHub App (installation)** | 5.000 requisições/hora | 30 requisições/minuto |
| **GitHub App (user-to-server)** | 5.000 requisições/hora | 30 requisições/minuto |

Requisições condicionais

O Tajo usa requisições condicionais (cabeçalhos `If-None-Match` / `If-Modified-Since`) para reduzir o consumo da API. Respostas com `304 Not Modified` não contam contra os limites de taxa.

Limites adicionais:

- **Limites de taxa secundários**: No máximo 100 requisições concorrentes. No máximo 900 pontos por minuto para endpoints da REST API.
- **GraphQL**: 5.000 pontos por hora (o custo da consulta varia de acordo com a complexidade).

## Solução de problemas

### Problemas comuns

| Problema | Causa | Solução |
| --- | --- | --- |
| 401 Unauthorized | Token expirado ou credenciais erradas | Regere o token ou reinstale o GitHub App |
| 403 Forbidden | Permissões insuficientes | Verifique os escopos do token ou permissões do App |
| 404 Not Found | Repositório privado sem acesso | Conceda acesso ao repositório ao token ou App |
| Limite de taxa excedido | Muitas chamadas de API | Habilite requisições condicionais e reduza a frequência de sincronização |
| Webhooks não recebidos | URL incorreta ou firewall | Verifique se a URL do webhook é publicamente acessível |

### Modo de depuração

```yaml
connectors:
  github:
    debug: true
    log_level: verbose
    log_webhooks: true
```

### Testar conexão

```bash
tajo connectors test github
# ✓ API authentication successful
# ✓ Repository access verified
# ✓ Issue data readable
# ✓ Webhook delivery active
# ✓ Rate limit healthy (4,850/5,000 remaining)
```

## Melhores práticas

1. **Use GitHub Apps em vez de PATs** - GitHub Apps fornecem permissões granulares e tokens com renovação automática
2. **Habilite segredos de webhook** - Sempre verifique assinaturas de webhook com HMAC-SHA256
3. **Use requisições condicionais** - Aproveite ETags para evitar desperdiçar cota de limite de taxa
4. **Pagine respostas grandes** - O GitHub retorna no máximo 100 itens por página; itere com cabeçalhos `Link`
5. **Sincronize durante baixa atividade** - Agende sincronizações completas fora dos horários de pico de desenvolvimento
6. **Monitore os cabeçalhos de limite de taxa** - Verifique `X-RateLimit-Remaining` para limitar proativamente

## Segurança

- **Autenticação de GitHub App** - JWT baseado em chave RSA com tokens de instalação de vida curta
- **Assinaturas de webhook** - Verificação de assinatura HMAC-SHA256 em todos os payloads de webhook
- **Tokens Fine-Grained** - Com escopo para repositórios e permissões específicas
- **Somente HTTPS** - Toda comunicação com a API é criptografada via TLS 1.2+
- **Armazenamento criptografado** - Chaves privadas e tokens criptografados em repouso no Tajo
- **Expiração de token** - Tokens fine-grained expiram automaticamente; configure alertas de rotação

## Recursos relacionados

- [Conector Jira](https://tajo.io/pt/docs/connectors/custom/jira)
- [Conector Linear](https://tajo.io/pt/docs/connectors/custom/linear)
- [Conector Notion](https://tajo.io/pt/docs/connectors/custom/notion)
- [API de contatos do Brevo](https://tajo.io/pt/docs/contact-management)
