> ## Documentation Index
> Fetch the complete documentation index at: https://zapo.to/llms.txt
> Use this file to discover all available pages before exploring further.

# Newsletters (canais)

> Crie, descubra, siga, publique, reaja e administre canais (newsletters) do WhatsApp usando o coordinator client.newsletter do zapo em TypeScript.

Newsletters — os **canais** do WhatsApp — ficam em `client.newsletter` ([`WaNewsletterCoordinator`](/pt-br/reference/client#newsletter)). O coordinator combina três conjuntos de operações: **descoberta**, **administração** e **mensagens**. Os JIDs de newsletter terminam em `@newsletter`.

<h2 id="discovery">
  Descoberta
</h2>

```ts theme={null}
// Buscar metadados por JID ou código de convite
const meta = await client.newsletter.fetch('1234567890@newsletter')
const byInvite = await client.newsletter.fetchByInvite('AbCdEf')

// Canais que a conta segue
const subscribed = await client.newsletter.listSubscribed()

// Pesquisar no diretório público
const results = await client.newsletter.searchDirectory({ /* text, categories */ })

// Recomendações e canais similares
const recommended = await client.newsletter.fetchRecommended()
const similar = await client.newsletter.fetchSimilar(newsletterJid)
```

<h2 id="following">
  Seguindo
</h2>

```ts theme={null}
await client.newsletter.follow(newsletterJid)
await client.newsletter.unfollow(newsletterJid)
await client.newsletter.mute({ newsletterJid, mute: true })
```

<h2 id="posting">
  Publicando
</h2>

O `send` recebe a mesma [union de conteúdo](/pt-br/guides/sending-messages#the-content-union) de uma mensagem normal — texto, mídia, enquetes e assim por diante:

```ts theme={null}
const result = await client.newsletter.send(newsletterJid, 'Hello, subscribers!')

// Editar uma mensagem publicada
await client.newsletter.editMessage(newsletterJid, result.id, 'Edited')

// Revogá-la
await client.newsletter.revoke({ newsletterJid, originalMessageId: result.id })
```

<h3 id="reactions--poll-votes">
  Reações e votos em enquetes
</h3>

```ts theme={null}
await client.newsletter.react({ newsletterJid, parentMessageServerId, reactionCode: '🔥' })
await client.newsletter.votePoll({ /* WaNewsletterVotePollInput */ })
await client.newsletter.sendViewReceipt({ /* WaNewsletterViewReceiptInput */ })
```

<h3 id="reading-messages">
  Lendo mensagens
</h3>

```ts theme={null}
const page = await client.newsletter.fetchMessages({
  newsletterJid,
  count: 50
})

// Edições / reações / atualizações de enquete desde um ponto
const updates = await client.newsletter.fetchMessageUpdates({
  newsletterJid,
  count: 50,
  since: someTimestamp
})

// Assinatura de atualizações ao vivo
const { durationSeconds } = await client.newsletter.subscribeLiveUpdates(newsletterJid)
```

<h2 id="administration">
  Administração
</h2>

Para canais que a conta possui:

```ts theme={null}
// Criar um canal
const created = await client.newsletter.create({ name: 'My channel', description: '...' })

// Atualizar campos editáveis (nome / descrição / foto)
await client.newsletter.update(newsletterJid, { name: 'Renamed' })

// Excluir
await client.newsletter.delete(newsletterJid)

// Visões de admin
const adminInfo = await client.newsletter.fetchAdminInfo(newsletterJid)
const followers = await client.newsletter.fetchFollowers(newsletterJid)
const insights = await client.newsletter.fetchInsights(newsletterJid, metrics)
```

<h3 id="admins--ownership">
  Admins e propriedade
</h3>

```ts theme={null}
await client.newsletter.createAdminInvite({ /* WaNewsletterAdminInviteInput */ })
await client.newsletter.changeOwner({ /* ... */ })
await client.newsletter.demoteAdmin({ /* ... */ })
```

<h3 id="poll-voters--reaction-senders">
  Votantes de enquetes e quem reagiu
</h3>

```ts theme={null}
const voters = await client.newsletter.fetchPollVoters({
  newsletterJid,
  messageServerId,
  voteHash
})

const reactors = await client.newsletter.fetchMessageReactionSenders({
  newsletterJid,
  messageServerId
})
```

<h2 id="events">
  Eventos
</h2>

A atividade de newsletter chega em `newsletter`, e edições/reações/atualizações de enquete em `newsletter_message_update`:

```ts theme={null}
client.on('newsletter', (event) => console.log(event))
client.on('newsletter_message_update', (event) => console.log(event))
```
