📄 SKILL.md

← Vault

name: comercialrs-meta-webhook-button-update

description: Atualizar meta_webhook_vps.py para processar botões custom do template Meta nova_reuniao_criada — botões "Iniciada", "Concluída", "Remarketing" atualizam task via payload

category: devops

created: 2026-05-25


ComercialRS — Atualizar meta_webhook_vps.py para Botões Custom

Contexto

O que mudou


PROBLEMA: Botão atualiza reunião ERRADA (2026-06-01)

Sintoma

Corretor clica no botão de uma reunião específica, mas o feedback mostra outra reunião (título diferente).

Causa raiz

find_task_by_phone_and_status busca LIMIT 1 ordenado por due_date ASC — quando responsável tem múltiplas reuniões pendentes, o sistema sempre retorna a mais antiga (por vencimento), não a que o corretor clicou.

Solução implementada — Option A (2026-06-01)

Multi-task selection: quando botão é clicado e há 2+ reuniões pendentes, perguntar qual atualizar.

Fluxo:

1. Botão clicado → find_tasks_by_phone_and_status() (retorna TODAS, não LIMIT 1)

2. Se 1 tarefa → processa directo

3. Se 2+ tarefas → envia mensagem pedindo para escolher:

`

Qual reuniao voce quer marcar como Iniciada?

1 - Empresa ABCLtda (venc: 2026-06-05)

2 - Jose da Silva ME (venc: 2026-06-08)

Responda com o número (1, 2, etc.)

`

4. Corretor responde número → pending_selections[phone] guarda selecao pendente

5. Próxima mensagem do mesmo phone é validada como selecao numérica → actualiza tarefa correcta

Código novo:

`python

pending_selections = {} # top of file

find_tasks_by_phone_and_status returns list (not single task)

tasks = find_tasks_by_phone_and_status(msg_from, button_payload)

if len(tasks) == 1:

# direct update

update_task_status(task['task_id'], new_status)

else:

# save pending, ask which

pending_selections[msg_from] = {"status": new_status, "tasks": tasks, "ts": time.time()}

send_meta_reply(msg_from, "Qual reuniao voce quer marcar como X?\n1 - ...\nResponda com o número")

Text reply handler checks pending_selections first

if msg_type == 'text' and msg_text.strip().isdigit():

sel = pending_selections.get(msg_from)

if sel and 0 <= int(msg_text)-1 < len(sel['tasks']):

task = sel['tasks'][int(msg_text)-1]

update_task_status(task['task_id'], sel['status'])

del pending_selections[msg_from]

`

Verificar depois de editar:

`bash

python3 -c "import ast; ast.parse(open('/var/www/comercialrs/data/meta_webhook_vps.py').read()); print('OK')"

`

Reiniciar serviço:

`bash

fuser -k 8083/tcp && sleep 1 && nohup python3 /var/www/comercialrs/data/meta_webhook_vps_service.py > /var/www/comercialrs/data/meta_webhook_vps.log 2>&1 &

`