Files

110 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: mcp-click-to-chat
description: MCP dedicado multi-site (node stdio, ligação `click-to-chat` em ~/.omp/agent/mcp.json) para gerir o Click to Chat for WhatsApp (HoliThemes) em qualquer site do bundle Descomplicar® via WP-CLI/SSH — estado do plugin, config completa, número de WhatsApp, mensagem pré-preenchida, call-to-action, activar/desactivar o widget globalmente, posição e estilo do botão flutuante. Site é um parâmetro em cada tool, não uma ligação fixa. Usar quando "click to chat mcp", "número whatsapp site", "widget whatsapp wordpress", "botão flutuante whatsapp", "mensagem pré-preenchida whatsapp", "ht_ctc_chat_options", "desactivar botão whatsapp", "posição botão whatsapp".
layer: wiki
---
# /mcp-click-to-chat — MCP dedicado multi-site ao Click to Chat for WhatsApp
Projecto em `/media/ealmeida/Dados/Dev/mcp-click-to-chat/` (TypeScript, SDK MCP oficial, stdio).
Sem código PHP novo no WordPress — cada tool executa `wp option get/update --format=json` via
`ssh server` sobre o WP-CLI já instalado. **`site` é um parâmetro em cada tool**, não uma ligação
fixa: o plugin está espalhado por vários sites reais do bundle com dados diferentes por site.
Não existe skill de conhecimento separada para este plugin — esta skill É a documentação
completa, incluindo o mapeamento de options. O plugin tem duas interfaces internas ("new" 2019+ e
"prev" legada, ver `common/class-ht-ctc-switch.php`); **todos os sites do bundle usam a interface
"new"** (a legada só se activa se a option `ccw_options` tiver a chave `number`, o que não
acontece em nenhum site verificado) — por isso este MCP só lê/escreve as options `ht_ctc_*`.
## Âmbito
Config do widget flutuante de WhatsApp (versão **Free** — nenhum site do bundle tem o addon PRO
`click-to-chat-pro.php` instalado, por isso não há múltiplos agentes/departamentos, apenas um
número principal). Não cobre: activação/desactivação do próprio plugin (`emcp-tools
activate-plugin`/`deactivate-plugin` cobre isso genericamente), estilos de cor detalhados por
variante (`ht_ctc_s1`..`ht_ctc_s9` — cosméticos por `style_desktop`/`style_mobile` escolhido, fora
do âmbito deste MCP), integração de Analytics/GTM/Pixel (`ht_ctc_othersettings`), Grupos de
WhatsApp ou Share button (`ht_ctc_group`/`ht_ctc_share`), WooCommerce (`ht_ctc_woo_options`).
## Sites conhecidos
Chamar `ctc_list_sites` para a lista actual com path e nota de estado. Verificado ao vivo
19-08-2026 (`wp plugin list` por site, slug `click-to-chat-for-whatsapp` 4.42.1, update 4.43
disponível em todos):
- **Activos:** `emanuelalmeida` (número real configurado, `+351919109155`), `starter` (activo mas
sem número configurado — config vazia), `ccv` (número real configurado), `ecommerce` (activo).
- **Instalado mas inactivo:** `descomplicar` (produção, `public_html`), `ecommerce-demo`.
- **Não instalado:** `care`, `e-commerce`.
Também aceita um path absoluto directamente (`/home/ealmeida/<site>`) para sites fora desta lista,
sem exigir rebuild do MCP.
## Mapeamento de dados
Option principal: **`ht_ctc_chat_options`** (array PHP nativo — ver §Segurança). Campos usados por
este MCP:
| Campo | Tool que lê/escreve | Descrição |
|---|---|---|
| `number` | `ctc_get_number` / `ctc_update_number` | Número de WhatsApp principal, com indicativo. Legado: `cc`+`num` (interface "prev", sempre limpos por `ctc_update_number`) |
| `pre_filled` | `ctc_get_number` / `ctc_update_message` | Mensagem já escrita na conversa ao clicar |
| `call_to_action` | `ctc_get_number` / `ctc_update_message` | Texto do tooltip/balão junto ao botão |
| `display.global_display` | `ctc_get_config` / `ctc_toggle_widget` | `show`/`hide` — liga/desliga o widget em todo o site |
| `display.home`/`pages`/`posts`/`list_showon_pages`/etc. | `ctc_get_config` (só leitura) | Excepções por tipo de página ao valor global — não alteradas por este MCP |
| `style_desktop`/`style_mobile` | `ctc_get_config` / `ctc_update_position_style` | Id do estilo pré-definido do botão, `"1"`–`"9"` (paleta de cada um em `ht_ctc_s1`..`ht_ctc_s9`, fora do âmbito) |
| `side_1`/`side_1_value` | `ctc_get_config` / `ctc_update_position_style` | Lado vertical (`top`/`bottom`) + offset CSS (ex. `"15px"`) |
| `side_2`/`side_2_value` | `ctc_get_config` / `ctc_update_position_style` | Lado horizontal (`left`/`right`) + offset CSS |
| `mobile_side_*`, `same_settings` | `ctc_get_config` (só leitura) | Posição mobile — segue a desktop enquanto `same_settings` = `"1"` (comportamento nativo) |
## Tools (8)
| Tool | Read-only | Uso |
|---|---|---|
| `ctc_list_sites` | sim | Aliases conhecidos, path WP, nota de estado |
| `ctc_get_status` | sim | Instalado/activo, versão, update disponível — chamar antes dos outros tools |
| `ctc_get_config` | sim | Option `ht_ctc_chat_options` completa (número, mensagem, posição, estilo, regras de exibição) |
| `ctc_get_number` | sim | Só `number`, `pre_filled`, `call_to_action`, `intl_country` — resposta enxuta. Free = um único número, sem multi-agente |
| `ctc_update_number` | não | Actualiza `number` com validação (8-15 dígitos após limpeza, igual a `HT_CTC_Formatting::wa_number()` do próprio plugin). Limpa `cc`/`num` legados |
| `ctc_update_message` | não | Actualiza `pre_filled` e/ou `call_to_action` — passa só o(s) campo(s) a mudar |
| `ctc_toggle_widget` | não | `enabled: true/false` → `display.global_display` = `show`/`hide`. Não toca nas excepções por página |
| `ctc_update_position_style` | não | `style_desktop`/`style_mobile` (`"1"`-`"9"`) e/ou `side_1`/`side_1_value`/`side_2`/`side_2_value` — passa só o(s) campo(s) a mudar |
Todas as tools de escrita fazem read-modify-write (merge), nunca substituição completa da option.
`site` é obrigatório em todas.
## Segurança
Allowlist fixa de 3 nomes de option `ht_ctc_*` relevantes (`src/wpcli.ts`, `OPTION_KEYS`) — nunca
`wp option update` genérico sobre uma chave arbitrária. Escritas via base64 em stdin, nunca
interpoladas no comando SSH remoto. Validação de número de WhatsApp em `ctc_update_number`
(mínimo 8, máximo 15 dígitos após remover tudo excepto dígitos).
**Formato de armazenamento confirmado (caso seguro):** `ht_ctc_chat_options` e as restantes
options `ht_ctc_*` são gravadas pelo próprio plugin via `update_option( 'ht_ctc_xxx', $array_php
)` — array PHP nativo, não uma string com JSON lá dentro (confirmado lendo
`new/admin/db/class-ht-ctc-db.php`, e comparando ao vivo a saída de `wp option get` sem formato
vs. `--format=json` em `emanuelalmeida.pt` — ambas descodificam o mesmo array, sem dupla
codificação). Por isso `getOption`/`setOption` deste MCP usam `--format=json` directamente, ao
contrário do `mcp-wpfc` (ver essa skill para o caso inverso, o gotcha de string-com-JSON-lá-dentro
que corrompeu produção nesse plugin).
## Verificação
Construído e testado ponta-a-ponta contra produção 19-08-2026: `ctc_get_status`/`ctc_get_config`/
`ctc_get_number` confirmaram os dados reais em `emanuelalmeida` (número `+351919109155`,
call-to-action "Vamos conversar?"); `ctc_update_message` (call-to-action idempotente),
`ctc_toggle_widget` (`enabled:true` idempotente) e `ctc_update_position_style` (valores
idempotentes) testados em `ccv`, cada um confirmado por leitura SSH directa antes/depois —
`ht_ctc_chat_options` ficou byte-a-byte igual, incluindo o objecto aninhado `display`;
`ctc_update_number` testado em `starter` com um número real (`+351 910 000 000` → normalizado para
`+351910000000`, confirmado por leitura SSH directa), depois restaurado ao estado original vazio
(também confirmado por leitura).
## Skills relacionadas
- `mcp-wpfc` — mesmo padrão de arquitectura, mas com o gotcha inverso de formato de armazenamento
(string PHP com JSON lá dentro) — ler antes de construir um MCP novo sobre outro plugin.
- `emcp-tools` — activação/desactivação genérica de plugins, fora do âmbito deste MCP.