Pular para conteúdo

SEND_AUDIO - Enviar Áudio

O que é este Node?

O SEND_AUDIO é o node responsável por enviar arquivos de áudio via WhatsApp Business API (MP3, AAC, OGG, etc.).

Por que este Node existe?

Áudio é comunicação natural. O SEND_AUDIO existe para:

  1. Mensagens de voz: Enviar áudios pré-gravados
  2. Podcasts: Compartilhar episódios de áudio
  3. Notificações sonoras: Alertas em formato de áudio
  4. Músicas: Compartilhar faixas de áudio
  5. Gravações: Enviar entrevistas, depoimentos

Como funciona internamente?

Quando o SEND_AUDIO é executado, o sistema:

  1. Valida fonte: Verifica audioUrl ou audioId
  2. Constrói payload: Cria objeto tipo 'audio'
  3. Não adiciona caption: Áudios não suportam legenda
  4. Envia para API: POST com tipo audio
  5. Retorna message_id: Confirma envio

Código interno (whatsapp-meta-executor.service.ts:393-434):

private async sendMedia(data: WhatsAppMetaNodeData): Promise<any> {
  const mediaType = this.getMediaType(data.operation!);
  const mediaUrl = this.getMediaUrl(data);
  const mediaId = this.getMediaId(data);
  const caption = this.getMediaCaption(data);

  const mediaObject: any = {};

  if (mediaId) {
    mediaObject.id = mediaId;
  } else {
    mediaObject.link = mediaUrl;
  }

  if (caption) {
    mediaObject.caption = caption;
  }

  if (data.operation === 'send_document' && data.documentFilename) {
    mediaObject.filename = data.documentFilename;
  }

  const payload = {
    messaging_product: 'whatsapp',
    to: data.recipientPhone,
    type: mediaType,
    [mediaType]: mediaObject
  };

  const response: AxiosResponse = await axios.post(
    `${this.WHATSAPP_API_BASE}/${data.phoneNumberId}/messages`,
    payload,
    {
      headers: {
        'Authorization': `Bearer ${data.accessToken}`,
        'Content-Type': 'application/json'
      }
    }
  );

  return response.data;
}

Quando você DEVE usar este Node?

Use SEND_AUDIO quando precisar enviar arquivos de áudio:

Casos de uso

  1. Mensagem de voz gravada: "Obrigado pela compra!"
  2. Podcast: Episódio do podcast da empresa
  3. Música: Faixa promocional, jingle
  4. Tutorial em áudio: Instruções faladas
  5. Notificação sonora: Alerta importante

Quando NÃO usar SEND_AUDIO

  • Texto: Use SEND_MESSAGE para mensagens escritas
  • Vídeo com áudio: Use SEND_VIDEO para conteúdo audiovisual
  • Documento: Use SEND_DOCUMENT para arquivos

Parâmetros Detalhados

audioUrl (string, condicional)

O que é: URL pública HTTPS do arquivo de áudio. Obrigatório se audioId não fornecido.

Padrão: Nenhum

Flow completo para testar:

{
  "name": "Teste SEND_AUDIO - Audio URL",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "whatsapp_1",
      "type": "whatsapp_meta",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Enviar Áudio",
        "parameters": {
          "operation": "send_audio",
          "accessToken": "EAAxxxxxxxx",
          "phoneNumberId": "123456789",
          "recipientPhone": "5511999999999",
          "audioUrl": "https://exemplo.com/audio/mensagem.mp3"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Áudio enviado!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "whatsapp_1" },
    { "source": "whatsapp_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: URL deve ser HTTPS e acessível. WhatsApp baixa o áudio.

audioId (string, condicional)

O que é: ID de áudio já enviado ao WhatsApp. Obrigatório se audioUrl não fornecido.

Padrão: Nenhum

Flow completo para testar:

{
  "name": "Teste SEND_AUDIO - Audio ID",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "whatsapp_1",
      "type": "whatsapp_meta",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Reenviar Áudio",
        "parameters": {
          "operation": "send_audio",
          "accessToken": "EAAxxxxxxxx",
          "phoneNumberId": "123456789",
          "recipientPhone": "5511888888888",
          "audioId": "1234567890123456"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Áudio reenviado via ID!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "whatsapp_1" },
    { "source": "whatsapp_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Use audioId de envio anterior para economizar bandwidth.

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim Deve ser "send_audio"
accessToken string Sim Token de acesso da WhatsApp Business API
phoneNumberId string Sim ID do número WhatsApp Business
recipientPhone string Sim Número do destinatário
audioUrl string Condicional URL do áudio (obrigatório se sem audioId)
audioId string Condicional ID do áudio (obrigatório se sem audioUrl)

Exemplo 1: Mensagem de Agradecimento em Áudio

Objetivo: Enviar áudio personalizado de agradecimento após compra.

JSON para Importar

{
  "name": "Agradecimento em Áudio - SEND_AUDIO",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Dados da Compra",
        "parameters": {
          "variableName": "purchase",
          "value": {
            "customerName": "Carlos Silva",
            "customerPhone": "5511999999999",
            "orderId": "PED-12345",
            "audioUrl": "https://storage.empresa.com/audios/agradecimento.mp3"
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Introdução",
        "parameters": {
          "message": "🎉 Obrigado pela sua compra, {{purchase.customerName}}!\n\nPedido: {{purchase.orderId}}\n\nEnviando mensagem especial..."
        }
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aguardar",
        "parameters": {
          "duration": 2,
          "unit": "seconds"
        }
      }
    },
    {
      "id": "whatsapp_1",
      "type": "whatsapp_meta",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Enviar Áudio",
        "parameters": {
          "operation": "send_audio",
          "accessToken": "EAAxxxxxxxx",
          "phoneNumberId": "123456789",
          "recipientPhone": "{{purchase.customerPhone}}",
          "audioUrl": "{{purchase.audioUrl}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Finalizar",
        "parameters": {
          "message": "🎧 Ouça a mensagem acima!\n\nSe precisar de ajuda, estamos aqui."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "message_1" },
    { "source": "message_1", "target": "delay_1" },
    { "source": "delay_1", "target": "whatsapp_1" },
    { "source": "whatsapp_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 🎉 Obrigado pela sua compra, Carlos Silva!
Pedido: PED-12345
Enviando mensagem especial...

[Aguarda 2s]

[Áudio: 0:15] 🎤
"Olá Carlos! Muito obrigado pela sua compra. Sua confiança é muito importante para nós..."

Sistema: 🎧 Ouça a mensagem acima!
Se precisar de ajuda, estamos aqui.

Exemplo 2: Episódio de Podcast

Objetivo: Compartilhar episódio de podcast empresarial.

JSON para Importar

{
  "name": "Compartilhar Podcast - SEND_AUDIO",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Dados do Podcast",
        "parameters": {
          "variableName": "podcast",
          "value": {
            "subscriberPhone": "5511888888888",
            "episodeNumber": "23",
            "episodeTitle": "Como Aumentar Suas Vendas em 2025",
            "duration": "28 minutos",
            "audioUrl": "https://podcast.empresa.com/ep23.mp3"
          }
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Apresentação",
        "parameters": {
          "message": "🎙️ Novo Episódio do Podcast!\n\nEpisódio #{{podcast.episodeNumber}}\n\"{{podcast.episodeTitle}}\"\n\n⏱️ Duração: {{podcast.duration}}\n\nBoa audição! 🎧"
        }
      }
    },
    {
      "id": "whatsapp_1",
      "type": "whatsapp_meta",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Enviar Podcast",
        "parameters": {
          "operation": "send_audio",
          "accessToken": "EAAxxxxxxxx",
          "phoneNumberId": "123456789",
          "recipientPhone": "{{podcast.subscriberPhone}}",
          "audioUrl": "{{podcast.audioUrl}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Call to Action",
        "parameters": {
          "message": "💬 Gostou do episódio?\n\nCompartilhe com amigos e nos dê seu feedback!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "message_1" },
    { "source": "message_1", "target": "whatsapp_1" },
    { "source": "whatsapp_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 🎙️ Novo Episódio do Podcast!

Episódio #23
"Como Aumentar Suas Vendas em 2025"

⏱️ Duração: 28 minutos

Boa audição! 🎧

[Áudio: 28:00] 🎤
[Episódio completo do podcast]

Sistema: 💬 Gostou do episódio?
Compartilhe com amigos e nos dê seu feedback!

Resposta do Node

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "5511999999999",
      "wa_id": "5511999999999"
    }
  ],
  "messages": [
    {
      "id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNBMzYxNzQyQ0JGRjREMTU0QzFEAA=="
    }
  ]
}

Formatos Suportados

  • AAC: Audio Coding (melhor compressão)
  • MP3: MPEG Audio Layer-3 (universal)
  • AMR: Adaptive Multi-Rate (voz)
  • OGG: Ogg Vorbis com codec Opus

Tamanho máximo: 16MB

Boas Práticas

SIM:

  • Use MP3 para compatibilidade universal
  • Comprima áudios longos para reduzir tamanho
  • Prefira bitrate 64-128 kbps para voz
  • Use audioId para reenviar mesmo áudio
  • Envie mensagem de texto antes explicando o áudio

NÃO:

  • Não envie áudios muito longos (> 5 minutos)
  • Não use formatos não suportados (WAV, FLAC)
  • Não ultrapasse 16MB
  • Não tente adicionar caption (não suportado)
  • Não envie áudio sem contexto prévio

Dicas

💡 Compressão: Use ferramentas como Audacity para comprimir áudios grandes

💡 Bitrate ideal: 64 kbps para voz, 128 kbps para música

💡 Duração: Áudios curtos (< 2 min) têm melhor engajamento

💡 Contexto: Sempre envie mensagem de texto antes explicando o que é o áudio

💡 Formato: MP3 é o mais compatível com todos os dispositivos

💡 Sem caption: Áudios não aceitam legendas no WhatsApp, envie texto separado

Próximo Node

SEND_VIDEO - Enviar vídeos → SEND_MESSAGE - Enviar texto → SEND_MEDIA - Enviar mídia genérica