Conectar Google Calendar com Formulários de Contato do WordPress

Integrar o Google Calendar with formulários de contato do WordPress permite criar eventos automaticamente quando alguém preenche um formulário. Isso é especialmente útil para agendamentos, consultas, reuniões e eventos.


Requisitos Importantes

  • WordPress com acesso administrativo
  • Plugin de formulário (Contact Form 7, WPForms, Gravity Forms, etc.)
  • Conta Google com Calendar ativado
  • Plugin de integração ou conhecimento em PHP/JavaScript
  • SSL ativo no site (obrigatório para APIs do Google)

O que Você Vai Conseguir Fazer

Criar eventos no Google Calendar automaticamente

Capturar dados do formulário (nome, email, data, horário)

Personalizar detalhes do evento

Enviar convites automáticos

Sincronizar com múltiplos calendários

Configurar lembretes


Método 1: Usando WPForms + Zapier (Mais Fácil)

Passo 1: Instalar e Configurar WPForms

1. Instale o WPForms:

  • Vá para Plugins > Adicionar Novo
  • Pesquise por “WPForms”
  • Instale e ative o plugin

2. Crie um Formulário de Agendamento:

  • Vá para WPForms > Adicionar Novo
  • Escolha o template “Contact Form”
  • Adicione os campos necessários:
  • Nome (obrigatório)
  • Email (obrigatório)
  • Data do Evento
  • Horário do Evento
  • Descrição/Assunto

3. Configurar Campos Específicos:

- Campo Data: Formato DD/MM/AAAA
- Campo Horário: Formato HH:MM
- Campo Duração: Em minutos (opcional)

Passo 2: Configurar Zapier

1. Criar Conta no Zapier:

  • Acesse zapier.com
  • Crie uma conta gratuita
  • Clique em “Make a Zap”

2. Configurar Trigger (Gatilho):

  • App: WPForms
  • Trigger: New Form Entry
  • Account: Conecte sua conta WordPress
  • Form: Selecione o formulário criado

3. Configurar Action (Ação):

  • App: Google Calendar
  • Action: Create Detailed Event
  • Account: Conecte sua conta Google
  • Calendar: Selecione o calendário desejado

4. Mapear Campos:

Event Title: Campo "Nome" + "Assunto"
Start Date & Time: Campo "Data" + Campo "Horário"
End Date & Time: Calculado automaticamente
Description: Campo "Descrição"
Guest Email: Campo "Email"

Passo 3: Testar a Integração

  1. Publique o formulário em uma página
  2. Faça um teste preenchendo o formulário
  3. Verifique se o evento foi criado no Google Calendar
  4. Ative o Zap se o teste for bem-sucedido

Método 2: Usando Gravity Forms + Google Calendar (Profissional)

Passo 1: Instalar Gravity Forms

1. Compre e Instale o Gravity Forms:

  • Acesse gravityforms.com
  • Compre a licença (a partir de $59/ano)
  • Baixe e instale o plugin

2. Instalar Add-on Google Calendar:

  • No painel do WordPress: Forms > Add-Ons
  • Procure por “Google Calendar”
  • Instale e ative o add-on

Passo 2: Configurar Google API

1. Criar Projeto no Google Cloud Console:

2. Ativar APIs Necessárias:

  • Vá para “APIs & Services > Library”
  • Ative: “Google Calendar API”
  • Ative: “Google+ API” (se necessário)

3. Criar Credenciais OAuth 2.0:

  • Vá para “APIs & Services > Credentials”
  • Clique em “Create Credentials > OAuth 2.0 Client ID”
  • Tipo: Web application
  • Nome: “WordPress Integration”
  • Authorized redirect URIs: https://seusite.com/wp-admin/admin.php?page=gf_settings&subview=gravityformsgooglecalendar

4. Copiar Client ID e Client Secret:

Client ID: 123456789-abcdefghijklmnop.apps.googleusercontent.com
Client Secret: GOCSPX-AbCdEfGhIjKlMnOpQrStUvWxYz

Passo 3: Configurar Gravity Forms

1. Configurar Add-on Google Calendar:

  • Vá para Forms > Settings > Google Calendar
  • Cole o Client ID e Client Secret
  • Clique em “Save Settings”
  • Clique em “Authenticate with Google”
  • Autorize o acesso

2. Criar Formulário de Agendamento:

Campos Essenciais:
- Nome (Single Line Text)
- Email (Email)
- Telefone (Phone)
- Data do Evento (Date Picker)
- Horário de Início (Time)
- Horário de Fim (Time)
- Assunto/Título (Single Line Text)
- Descrição (Paragraph Text)

3. Configurar Feed do Google Calendar:

  • Edite o formulário
  • Vá para Settings > Google Calendar
  • Clique em “Add New”
  • Configure os campos:
Feed Name: Agendamentos do Site
Google Account: [sua conta conectada]
Calendar: [selecione o calendário]
Event Title: {Nome:1} - {Assunto:7}
Event Description: {Descrição:8}
Start Date: {Data do Evento:4}
Start Time: {Horário de Início:5}
End Date: {Data do Evento:4}
End Time: {Horário de Fim:6}
Attendees: {Email:2}

Método 3: Integração Manual com Contact Form 7

Passo 1: Preparar Contact Form 7

1. Instale Contact Form 7:
Plugins > Adicionar Novo > Contact Form 7

2. Criar Formulário Personalizado:

<label> Seu nome (obrigatório)
[text* your-name] </label>

<label> Seu e-mail (obrigatório)
[email* your-email] </label>

<label> Data do evento
[date event-date] </label>

<label> Horário de início
[time start-time] </label>

<label> Horário de fim
[time end-time] </label>

<label> Assunto
[text event-subject] </label>

<label> Sua mensagem
[textarea your-message] </label>

[submit "Agendar"]

Passo 2: Criar Script PHP Personalizado

Adicionar ao functions.php do tema:

<?php
// Função para criar evento no Google Calendar
add_action('wpcf7_mail_sent', 'create_google_calendar_event');

function create_google_calendar_event($contact_form) {
    // Configurações da API
    $client_id = 'SEU_CLIENT_ID_AQUI';
    $client_secret = 'SEU_CLIENT_SECRET_AQUI';
    $refresh_token = 'SEU_REFRESH_TOKEN_AQUI';
    $calendar_id = 'primary'; // ou ID específico do calendário

    // Obter dados do formulário
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();

    // Extrair informações
    $name = sanitize_text_field($posted_data['your-name']);
    $email = sanitize_email($posted_data['your-email']);
    $event_date = sanitize_text_field($posted_data['event-date']);
    $start_time = sanitize_text_field($posted_data['start-time']);
    $end_time = sanitize_text_field($posted_data['end-time']);
    $subject = sanitize_text_field($posted_data['event-subject']);
    $message = sanitize_textarea_field($posted_data['your-message']);

    // Formatar datas para ISO 8601
    $start_datetime = $event_date . 'T' . $start_time . ':00';
    $end_datetime = $event_date . 'T' . $end_time . ':00';

    // Criar evento
    $event_data = array(
        'summary' => $subject . ' - ' . $name,
        'description' => $message . "\n\nContato: " . $email,
        'start' => array(
            'dateTime' => $start_datetime,
            'timeZone' => 'America/Sao_Paulo',
        ),
        'end' => array(
            'dateTime' => $end_datetime,
            'timeZone' => 'America/Sao_Paulo',
        ),
        'attendees' => array(
            array('email' => $email)
        ),
        'reminders' => array(
            'useDefault' => false,
            'overrides' => array(
                array('method' => 'email', 'minutes' => 1440), // 24h antes
                array('method' => 'popup', 'minutes' => 30),   // 30min antes
            )
        )
    );

    // Enviar para Google Calendar API
    send_to_google_calendar($event_data, $client_id, $client_secret, $refresh_token, $calendar_id);
}

function send_to_google_calendar($event_data, $client_id, $client_secret, $refresh_token, $calendar_id) {
    // Obter access token
    $token_url = 'https://oauth2.googleapis.com/token';
    $token_data = array(
        'client_id' => $client_id,
        'client_secret' => $client_secret,
        'refresh_token' => $refresh_token,
        'grant_type' => 'refresh_token'
    );

    $token_response = wp_remote_post($token_url, array(
        'body' => $token_data
    ));

    if (is_wp_error($token_response)) {
        return false;
    }

    $token_body = json_decode(wp_remote_retrieve_body($token_response), true);
    $access_token = $token_body['access_token'];

    // Criar evento no calendário
    $calendar_url = 'https://www.googleapis.com/calendar/v3/calendars/' . $calendar_id . '/events';

    $calendar_response = wp_remote_post($calendar_url, array(
        'headers' => array(
            'Authorization' => 'Bearer ' . $access_token,
            'Content-Type' => 'application/json'
        ),
        'body' => json_encode($event_data)
    ));

    return !is_wp_error($calendar_response);
}
?>

Método 4: Plugin Dedicado – Amelia Booking

Passo 1: Instalar Amelia

1. Comprar e Instalar:

  • Acesse wpamelia.com
  • A partir de $59/ano
  • Inclui integração nativa com Google Calendar

2. Configurar Básico:

  • Amelia > Settings > General
  • Configure fuso horário
  • Defina moeda e formato de data

Passo 2: Conectar Google Calendar

1. Configurar API Google:

  • Amelia > Settings > Integrations > Google Calendar
  • Adicione Client ID e Client Secret
  • Clique em “Sign in with Google”

2. Configurar Sincronização:
Escolha direção da sincronização:

  • Amelia → Google Calendar
  • Google Calendar → Amelia
  • Bidirecional

Defina calendário padrão e configure conflitos de horário.

Passo 3: Criar Serviços e Funcionários

1. Adicionar Serviços:

  • Amelia > Services
  • Crie serviços (consulta, reunião, etc.)
  • Defina duração e preço

2. Configurar Funcionários:

  • Amelia > Employees
  • Adicione funcionários
  • Conecte cada um ao seu Google Calendar

Scripts e Códigos Úteis

JavaScript para Validação de Data/Hora

// Validar se data selecionada não é passada
document.addEventListener('DOMContentLoaded', function() {
    const dateInput = document.querySelector('input[name="event-date"]');
    const timeInput = document.querySelector('input[name="start-time"]');

    if (dateInput) {
        // Definir data mínima como hoje
        const today = new Date().toISOString().split('T')[0];
        dateInput.setAttribute('min', today);

        dateInput.addEventListener('change', function() {
            const selectedDate = new Date(this.value);
            const today = new Date();

            if (selectedDate < today) {
                alert('Por favor, selecione uma data futura.');
                this.value = '';
            }
        });
    }

    if (timeInput) {
        timeInput.addEventListener('change', function() {
            const selectedTime = this.value;
            const selectedDate = dateInput.value;

            if (selectedDate === today && selectedTime) {
                const now = new Date();
                const currentTime = now.getHours().toString().padStart(2, '0') + ':' + 
                                  now.getMinutes().toString().padStart(2, '0');

                if (selectedTime <= currentTime) {
                    alert('Por favor, selecione um horário futuro.');
                    this.value = '';
                }
            }
        });
    }
});

CSS para Melhorar Formulário

/* Estilização do formulário de agendamento */
.calendar-form {
    max-width: 600px;
    margin: 0 auto;
    padding: 20px;
    background: #f9f9f9;
    border-radius: 8px;
}

.calendar-form label {
    display: block;
    margin-bottom: 5px;
    font-weight: bold;
    color: #333;
}

.calendar-form input,
.calendar-form textarea,
.calendar-form select {
    width: 100%;
    padding: 10px;
    margin-bottom: 15px;
    border: 1px solid #ddd;
    border-radius: 4px;
    font-size: 16px;
}

.calendar-form input[type="date"],
.calendar-form input[type="time"] {
    width: 48%;
    display: inline-block;
    margin-right: 2%;
}

.calendar-form input[type="submit"] {
    background: #0073aa;
    color: white;
    padding: 12px 30px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    font-size: 16px;
    width: auto;
}

.calendar-form input[type="submit"]:hover {
    background: #005a87;
}

.form-row {
    display: flex;
    gap: 10px;
}

.form-row input {
    flex: 1;
}

Configurações Avançadas

Personalizar Evento no Google Calendar

// Adicionar mais detalhes ao evento
$event_data = array(
    'summary' => $subject . ' - ' . $name,
    'description' => $message . "\n\n" .
                    "Contato: " . $email . "\n" .
                    "Telefone: " . $phone . "\n" .
                    "Site: " . get_site_url(),
    'location' => 'Endereço da Empresa, Cidade, Estado',
    'start' => array(
        'dateTime' => $start_datetime,
        'timeZone' => 'America/Sao_Paulo',
    ),
    'end' => array(
        'dateTime' => $end_datetime,
        'timeZone' => 'America/Sao_Paulo',
    ),
    'attendees' => array(
        array('email' => $email, 'displayName' => $name)
    ),
    'reminders' => array(
        'useDefault' => false,
        'overrides' => array(
            array('method' => 'email', 'minutes' => 1440), // 24h
            array('method' => 'email', 'minutes' => 60),   // 1h
            array('method' => 'popup', 'minutes' => 15),   // 15min
        )
    ),
    'colorId' => '2', // Verde para novos agendamentos
    'visibility' => 'private',
    'status' => 'confirmed'
);

Webhook para Notificações

// Adicionar webhook ao functions.php
add_action('wpcf7_mail_sent', 'send_calendar_notification');

function send_calendar_notification($contact_form) {
    $submission = WPCF7_Submission::get_instance();
    $posted_data = $submission->get_posted_data();

    // Enviar notificação para Slack/Discord/Teams
    $webhook_url = 'https://hooks.slack.com/services/SEU/WEBHOOK/AQUI';

    $message = array(
        'text' => 'Novo agendamento recebido!',
        'attachments' => array(
            array(
                'color' => 'good',
                'fields' => array(
                    array(
                        'title' => 'Nome',
                        'value' => $posted_data['your-name'],
                        'short' => true
                    ),
                    array(
                        'title' => 'Email',
                        'value' => $posted_data['your-email'],
                        'short' => true
                    ),
                    array(
                        'title' => 'Data',
                        'value' => $posted_data['event-date'],
                        'short' => true
                    ),
                    array(
                        'title' => 'Horário',
                        'value' => $posted_data['start-time'],
                        'short' => true
                    )
                )
            )
        )
    );

    wp_remote_post($webhook_url, array(
        'body' => json_encode($message),
        'headers' => array('Content-Type' => 'application/json')
    ));
}

Troubleshooting Comum

Problema: Erro de Autenticação

Soluções:

  • Verifique se o SSL está ativo
  • Confirme Client ID e Secret
  • Reautentique a conta Google
  • Verifique URLs de redirecionamento

Problema: Eventos não são criados

Soluções:

// Adicionar logs para debug
function debug_calendar_integration($message) {
    error_log('[Calendar Integration] ' . $message);
}

// Usar na função principal
debug_calendar_integration('Dados recebidos: ' . print_r($posted_data, true));

Problema: Fuso Horário Incorreto

Soluções:

  • Configure WordPress: Settings > General > Timezone
  • Use timezone correto na API: America/Sao_Paulo
  • Teste com eventos manuais
Gostou deste conteúdo?

Sua opinião é importante para nós!