Reconocer por BSUID a quien oculta su teléfono, y poder pedírselo
Meta no permite averiguar el teléfono a partir del BSUID: no hay endpoint de consulta inversa, cada empresa debe llevar su propia equivalencia. Pero el BSUID llega en TODOS los webhooks de mensaje, también en los que aún traen teléfono, así que la equivalencia se puede ir guardando sola mientras la persona todavía muestra su número. - users.bsuid guarda esa equivalencia, y el webhook la anota en cada mensaje. Cuando alguien oculte su número, se le seguirá reconociendo y respondiendo a su teléfono de siempre. - Va en columna aparte y no en phone_number porque el teléfono además cruza con el paciente y el turnero; mezclarlos rompería esos cruces. - Para quien nunca escribió mostrando el número queda pedirle el contacto: pedirContacto() manda el botón request_contact_info, y el webhook atiende el mensaje `contacts` que llega si acepta. - Al vincular puede aparecer un segundo registro de la misma persona. No se fusionan: una fusión mal hecha mezcla dos historias clínicas. Gana el que tiene el teléfono, el otro queda anotado en el log para revisarlo a mano. - scripts/backfill_bsuid.php carga las equivalencias del histórico (6.423), con --simular para verlas sin escribir. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
92179af56a
commit
26025a6399
@@ -238,6 +238,32 @@ class WhatsAppService
|
||||
/**
|
||||
* Enviar mensaje con botones interactivos
|
||||
*/
|
||||
/**
|
||||
* Pedirle a la persona que comparta su número de teléfono.
|
||||
*
|
||||
* Quien activó el nombre de usuario de WhatsApp llega sin teléfono, y sin él
|
||||
* no se le puede cruzar con su historia ni con el turnero. Este botón es la
|
||||
* vía que da Meta para pedírselo: la persona decide si lo comparte, y si
|
||||
* acepta llega un mensaje de tipo `contacts` con el número.
|
||||
*
|
||||
* Solo tiene sentido dentro de la ventana de 24 horas; fuera de ella hay que
|
||||
* usar una plantilla con el botón REQUEST_CONTACT_INFO.
|
||||
*/
|
||||
public function pedirContacto($to, $bodyText)
|
||||
{
|
||||
return $this->sendMessage([
|
||||
'messaging_product' => 'whatsapp',
|
||||
'recipient_type' => 'individual',
|
||||
'to' => $this->formatPhoneNumber($to),
|
||||
'type' => 'interactive',
|
||||
'interactive' => [
|
||||
'type' => 'request_contact_info',
|
||||
'body' => ['text' => $bodyText],
|
||||
'action' => ['name' => 'request_contact_info'],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
public function sendInteractiveMessage($to, $bodyText, $buttons, $header = null, $footer = null)
|
||||
{
|
||||
$interactive = [
|
||||
|
||||
Reference in New Issue
Block a user