This commit is contained in:
Lizandro Guarnizo
2026-01-28 13:05:36 -05:00
parent fe11a3ebb5
commit 7997ecb830
5 changed files with 169 additions and 79 deletions
+35 -5
View File
@@ -337,16 +337,30 @@ class WhatsAppService
/**
* Enviar audio
* @param string $to Número de destinatario
* @param string $audioUrl URL del audio
* @param bool $skipAutoSave Omitir guardado automático
* @param bool $isVoice True para enviar como nota de voz (requiere .ogg con códec OPUS)
*/
public function sendAudioMessage($to, $audioUrl, $skipAutoSave = false)
public function sendAudioMessage($to, $audioUrl, $skipAutoSave = false, $isVoice = false)
{
$audioData = [
'link' => $audioUrl
];
// Si es nota de voz, agregar parámetro ptt (push-to-talk)
// Requiere archivo .ogg con códec OPUS
if ($isVoice) {
// NOTA: WhatsApp Cloud API no tiene parámetro 'ptt' directo para links.
// Para notas de voz se recomienda subir el archivo y usar sendMediaById con is_voice.
error_log('sendAudioMessage: is_voice=true pero usando link. Para notas de voz, subir archivo primero.');
}
$data = [
'messaging_product' => 'whatsapp',
'to' => $this->formatPhoneNumber($to),
'type' => 'audio',
'audio' => [
'link' => $audioUrl
]
'audio' => $audioData
];
if ($skipAutoSave) {
@@ -434,8 +448,15 @@ class WhatsAppService
/**
* Enviar mensaje usando media_id (archivo ya subido a WhatsApp)
* @param string $to Número de destinatario
* @param string $mediaId ID del archivo en WhatsApp
* @param string $mediaType Tipo: image, video, audio, document
* @param string|null $caption Texto opcional (no aplica para audio)
* @param string|null $filename Nombre archivo (solo document)
* @param bool $skipAutoSave Omitir guardado automático
* @param bool $isVoice Para audio: true = nota de voz con onda verde, false = audio normal
*/
public function sendMediaById($to, $mediaId, $mediaType, $caption = null, $filename = null, $skipAutoSave = false)
public function sendMediaById($to, $mediaId, $mediaType, $caption = null, $filename = null, $skipAutoSave = false, $isVoice = false)
{
$data = [
'messaging_product' => 'whatsapp',
@@ -453,6 +474,15 @@ class WhatsAppService
$mediaData['filename'] = $filename;
}
// Para audio: agregar parámetro 'ptt' (push-to-talk) si es nota de voz
// Esto hace que aparezca con la onda verde característica de WhatsApp
if ($mediaType === 'audio' && $isVoice) {
// Según documentación de Meta: "ptt": true para mensajes de voz
// El archivo debe ser .ogg con códec OPUS
$mediaData['ptt'] = true;
error_log('sendMediaById: Enviando como nota de voz (ptt=true)');
}
$data[$mediaType] = $mediaData;
// Marcar para evitar guardado automático si se solicita