- Acesse AWS Lambda Console
- Criar nova função:
secode-chat-api - Runtime: Node.js 18.x
- Copie o código abaixo na seção "Código das Funções Lambda"
- Configurar variável de ambiente:
OPENAI_API_KEY - Adicionar layer do OpenAI ou fazer upload com node_modules
- Criar nova função:
secode-contact-api - Runtime: Node.js 18.x
- Copie o código abaixo na seção "Código das Funções Lambda"
- Acesse API Gateway Console
- Criar nova "REST API"
- Nome:
secode-api
- Criar recurso
/chat- Método POST → Integrar com
secode-chat-api - Habilitar CORS
- Método POST → Integrar com
- Criar recurso
/contact- Método POST → Integrar com
secode-contact-api - Habilitar CORS
- Método POST → Integrar com
- Deploy para stage "prod"
- Anote a URL base:
https://xxxxxxxxxx.execute-api.region.amazonaws.com/prod
- Acesse https://platform.openai.com
- Crie uma conta (se não tiver uma)
- Faça login e vá para "API keys" no menu
- Clique em "Create new secret key"
- Dê um nome para a chave (ex: "secode-chatbot")
- Copie a chave gerada (ela começa com "sk-")
- IMPORTANTE: Guarde essa chave em local seguro, ela não será exibida novamente
- No AWS Lambda Console, abra a função
secode-chat-api - Vá na aba "Configuration" → "Environment variables"
- Clique em "Edit"
- Adicione nova variável:
- Key:
OPENAI_API_KEY - Value: sua chave da OpenAI (sk-...)
- Key:
- Salve as alterações
No console do Amplify, adicione estas variáveis:
VITE_CHAT_API_URL:https://sua-api.execute-api.region.amazonaws.com/prod/chatVITE_CONTACT_API_URL:https://sua-api.execute-api.region.amazonaws.com/prod/contact
O arquivo amplify.yml já está configurado:
- Build command:
npx vite build - Output:
dist/public
IMPORTANTE: Configure timeout para 30 segundos
- Lambda → Configuration → General configuration → Edit → Timeout: 30 segundos
- Chamadas para OpenAI podem demorar 5-10 segundos, timeout padrão de 3s causa erro 502
export const handler = async (event) => {
const headers = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
"Access-Control-Allow-Methods": "GET,POST,OPTIONS",
"Access-Control-Max-Age": "86400"
};
if (event.httpMethod === 'OPTIONS') {
return {
statusCode: 200,
headers,
body: JSON.stringify({})
};
}
try {
if (!event.body) {
throw new Error('Request body is missing');
}
const { message } = JSON.parse(event.body);
const response = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: "gpt-4o", // Use gpt-4o, gpt-4-turbo, ou gpt-4 (NÃO use 4.1)
messages: [{
role: "system",
content: "Você é o SecodIA, assistente virtual da Secode. A Secode oferece soluções de IA para pequenos empreendedores brasileiros, incluindo presença digital, automação e consultoria tecnológica. Seja prestativo e responda em português."
}, {
role: "user",
content: message
}],
max_tokens: 150, // Reduzido para evitar timeouts
temperature: 0.7
})
});
const data = await response.json();
return {
statusCode: 200,
headers,
body: JSON.stringify({
response: data.choices[0].message.content
})
};
} catch (error) {
return {
statusCode: 500,
headers,
body: JSON.stringify({
error: "Erro interno do servidor",
details: error.message
})
};
}
};exports.handler = async (event) => {
const headers = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET"
};
if (event.httpMethod === 'OPTIONS') {
return { statusCode: 200, headers, body: '' };
}
try {
const { name, email, phone, business, message } = JSON.parse(event.body);
console.log('Contato recebido:', { name, email, phone, business, message });
return {
statusCode: 201,
headers,
body: JSON.stringify({
success: true,
message: 'Contato enviado com sucesso!'
})
};
} catch (error) {
return {
statusCode: 500,
headers,
body: JSON.stringify({
error: "Erro interno do servidor"
})
};
}
};Confirme se você configurou:
- ✅ Chave OpenAI na função Lambda
secode-chat-api - ✅ URLs das APIs nas variáveis do Amplify
- ✅ CORS habilitado no API Gateway
- Faça um novo deploy no Amplify (ou aguarde o automático)
- Acesse seu site em produção
- Teste o chatbot - ele deve abrir automaticamente na primeira visita
- Teste o formulário de contato
Se o chatbot não funcionar:
- Verifique se a chave OpenAI está correta na função Lambda
- Verifique se as URLs estão corretas no Amplify
- Verifique os logs da função Lambda no CloudWatch
- Site funcionando no Amplify
- Chat com IA usando OpenAI
- Formulário de contato funcional
- URLs configuráveis via variáveis de ambiente
- Documentação completa para manutenção