Em um chatbot como eu busco informações no Dialogflow e gravar em um banco?
Em um chatbot como eu busco informações no Dialogflow e gravar em um banco?
Olá João.
Tudo bem?
Para buscar informações no Dialogflow e gravar em um banco, você precisa integrar o Dialogflow com sua aplicação backend. No fluxo básico, quando o usuário envia uma mensagem para o bot, o Dialogflow processa a requisição e retorna uma resposta com base na intenção ou entidade correspondentes. Em seguida, no código da sua aplicação (como um servidor Node.js, Python, etc.), você captura a resposta do Dialogflow e, dependendo das informações necessárias, realiza uma conexão com o banco de dados (como MySQL, PostgreSQL, MongoDB, etc.).
Você pode usar bibliotecas específicas de acesso ao banco, como Sequelize ou Mongoose, para inserir ou atualizar os dados no banco após a resposta do Dialogflow.
Para isso, é importante configurar um webhook no Dialogflow, que vai direcionar a comunicação entre o Dialogflow e seu backend.
No backend, você valida os dados e faz a inserção no banco conforme necessário.
Qualquer duvida comente ai .
Bons estudos.
Você teria um passo a passo ou um curso referente acima:
Olá amigo.
Vamos dividir esse processo em etapas para te ajudar a implementar um sistema básico de integração entre o Dialogflow, backend e um banco de dados.
Vou te guiar por cada uma das partes: configuração do Dialogflow, criação do backend e integração com o banco de dados.
Agora que o Dialogflow está configurado, precisamos criar o servidor backend para processar as requisições.
Vou te passar um exemplo básico de como criar um servidor usando Node.js e o framework Express para receber as requisições do Dialogflow e interagir com o banco de dados.
Instalar as dependênciasInicie um novo projeto Node.js:
npm init -y
Instale as dependências necessárias:
npm install express body-parser axios sequelize mysql2
Crie um arquivo chamado index.js e adicione o seguinte código:
const express = require('express');
const bodyParser = require('body-parser');
const axios = require('axios');
const { Sequelize, DataTypes } = require('sequelize');
// Criando a instância do Express
const app = express();
const port = 3000;
// Configurando o BodyParser
app.use(bodyParser.json());
// Configurando a conexão com o banco de dados (MySQL no exemplo)
const sequelize = new Sequelize('mysql://user:password@localhost:3306/db_name');
// Definindo o modelo do banco de dados
const User = sequelize.define('User', {
name: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false
},
});
// Testando a conexão com o banco
sequelize.authenticate().then(() => {
console.log('Conexão com o banco de dados estabelecida com sucesso!');
}).catch((err) => {
console.error('Erro ao conectar ao banco de dados:', err);
});
// Endpoint para receber dados do Dialogflow
app.post('/webhook', async (req, res) => {
const { queryResult } = req.body;
// Aqui, você pode tratar a intenção que foi identificada pelo Dialogflow
const intent = queryResult.intent.displayName;
const parameters = queryResult.parameters;
if (intent === 'Cadastrar Usuário') {
const { name, email } = parameters;
// Inserir no banco de dados
try {
await User.create({ name, email });
res.json({
fulfillmentText: `Usuário ${name} cadastrado com sucesso!`
});
} catch (error) {
res.json({
fulfillmentText: 'Ocorreu um erro ao cadastrar o usuário.'
});
}
} else {
res.json({
fulfillmentText: 'Desculpe, não entendi sua solicitação.'
});
}
});
// Iniciar o servidor
app.listen(port, () => {
console.log(`Servidor rodando na porta ${port}`);
});
User foi definido para armazenar name e email./webhook. A partir disso, ele verifica a intenção (intent) e os parâmetros enviados.Cadastrar Usuário, os parâmetros name e email são extraídos e salvos no banco de dados.Inicie o servidor com o comando:
node index.js
Agora, no Dialogflow, defina o Webhook URL para o endereço do seu servidor (ex: http://localhost:3000/webhook).
continua...
Agora, quando o Dialogflow identificar a intenção correta (por exemplo, "Cadastrar Usuário"), ele vai chamar seu webhook.
O servidor backend processa a requisição e insere as informações no banco de dados, enviando uma resposta de volta para o Dialogflow, que por sua vez, envia essa resposta ao usuário.
Esse é o fluxo básico de integração entre o Dialogflow, seu backend e o banco de dados.
O Dialogflow processa a entrada do usuário, o backend recebe a requisição e faz a manipulação do banco conforme necessário.
Analisa o texto acima faça as implementações e avise qualquer duvida.
Bons estudos.
Bom dia!
Excelente trabalho.
Fiz tudo que foi pedido acima só que na hora da integração com o webhook não esta fazendo.
veja aonde estou erando:
minha url e esta: https://rotaservicos.com.br/contatos/
no webhook eu fiz assim:
mas não grava no banco mysql
Será que você pode me ajudar?
Olá amigo.
Vamos tentar e ver o que acontece.
Pela imagem, o Dialogflow está com o webhook configurado para https://rotaservicos.com.br/contatos/, mas o problema é que essa URL precisa apontar exatamente para o endpoint do seu backend, e esse endpoint deve estar preparado para receber requisições POST no formato que o Dialogflow envia.
Vamos fazer uma checagem passo a passo pra entender onde pode estar o erro
No seu código Node.js, o endpoint precisa ser exatamente o mesmo que o configurado no Dialogflow:
app.post('/contatos', async (req, res) => {
const { queryResult } = req.body;
const intent = queryResult.intent.displayName;
const parameters = queryResult.parameters;
if (intent === 'Cadastrar Usuário') {
const { name, email } = parameters;
try {
await User.create({ name, email });
res.json({
fulfillmentText: `Usuário ${name} cadastrado com sucesso!`
});
} catch (error) {
console.error(error);
res.json({
fulfillmentText: 'Ocorreu um erro ao cadastrar o usuário.'
});
}
} else {
res.json({
fulfillmentText: 'Desculpe, não entendi sua solicitação.'
});
}
});
Isso significa que:
https://rotaservicos.com.br/contatos/,/contatos.Se no seu código estiver /webhook, o Dialogflow não vai encontrar esse caminho.
Você pode testar se o endpoint realmente responde enviando uma requisição POST via Postman ou curl:
curl -X POST https://rotaservicos.com.br/contatos/ \
-H "Content-Type: application/json" \
-d '{"queryResult": {"intent": {"displayName": "Cadastrar Usuário"}, "parameters": {"name": "João", "email": "joao@email.com"}}}'
Se o servidor estiver certo, ele deve retornar:
{
"fulfillmentText": "Usuário João cadastrado com sucesso!"
}
Se der erro de timeout ou 404:
/contatos ≠ /webhook);Se o backend estiver rodando localmente (ex: localhost:3000), o Dialogflow não consegue acessá-lo.
Para resolver, use um túnel como:
npx ngrok http 3000
O ngrok vai gerar uma URL do tipo:
https://abcd1234.ngrok.io/webhook
Aí sim, você coloca essa URL no Dialogflow.
O Dialogflow envia os dados dentro de req.body.queryResult.
Garanta que você está usando app.use(bodyParser.json()) no Express, como no exemplo.
sequelize.authenticate()
Users foi criada (sequelize.sync() pode ajudar).app.listen():sequelize.sync({ alter: true });
Teste ai e me avise.
Qualquer problema me envia o index.js para eu analisar.
Bons estudos.
Executei no Pòstman:
Minha Intent e está:
Meu DialogFlow Webhhok:

Aqui faço o e
teste teria que gravar no banco.
No hostgator esta confirado assim: https://rotaservicos.com.br/contatos/
Mas não gravar.
Olá João.
O Dialogflow envia o corpo (body) em um formato JSON específico, e seu backend precisa tratar esse formato corretamente.
O erro mais comum é:
O código espera req.body.queryResult.parameters,
mas o servidor está recebendo o JSON “cru” (ou está fora da estrutura esperada).
Além disso, se o nome da intenção no Dialogflow não bater exatamente com o nome no backend, o código não entra no if (intent === 'Cadastrar Usuário').
Abra o arquivo /public_html/contatos/index.js e use este código revisado:
const express = require('express');
const bodyParser = require('body-parser');
const { Sequelize, DataTypes } = require('sequelize');
// Inicializando o Express
const app = express();
const port = 3000;
// Middleware para interpretar JSON
app.use(bodyParser.json());
// Conexão com o banco MySQL
const sequelize = new Sequelize('rotase97_nodezeus', 'rotase97_older', 'Skca@1954', {
host: 'localhost',
dialect: 'mysql'
});
// Modelo do banco
const Contato = sequelize.define('Contato', {
nome: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false
},
telefone: {
type: DataTypes.STRING,
allowNull: false
},
cpf: {
type: DataTypes.STRING,
allowNull: false
}
});
// Sincroniza o modelo com o banco
sequelize.sync();
// Rota Webhook que o Dialogflow chama
app.post('/contatos', async (req, res) => {
console.log('Requisição recebida do Dialogflow:');
console.log(JSON.stringify(req.body, null, 2));
// Garante que o corpo contém os dados esperados
if (!req.body.queryResult) {
return res.json({ fulfillmentText: 'Formato de dados inválido recebido.' });
}
const intent = req.body.queryResult.intent.displayName;
const params = req.body.queryResult.parameters;
if (intent === 'cadastrar-contato') {
const { nome, email, telefone, cpf } = params;
try {
await Contato.create({ nome, email, telefone, cpf });
res.json({
fulfillmentText: `Contato ${nome} cadastrado com sucesso!`
});
} catch (error) {
console.error('Erro ao salvar no banco:', error);
res.json({
fulfillmentText: 'Ocorreu um erro ao salvar o contato.'
});
}
} else {
res.json({
fulfillmentText: 'Intenção não reconhecida pelo servidor.'
});
}
});
// Inicializa o servidor
app.listen(port, () => {
console.log(`Servidor rodando na porta ${port}`);
});
No seu Dialogflow a intenção está com o nome cadastrar-contato,
então o código precisa verificar exatamente esse nome:
if (intent === 'cadastrar-contato') {
Se estiver diferente (ex: "Cadastrar Usuário"), o backend não executará a inserção.
Use este corpo JSON no Postman:
{
"queryResult": {
"intent": {
"displayName": "cadastrar-contato"
},
"parameters": {
"nome": "João Cruz",
"email": "cruz.jasc@gmail.com",
"telefone": "27997119905",
"cpf": "32783177520"
}
}
}
Deve retornar:
{
"fulfillmentText": "Contato João Cruz cadastrado com sucesso!"
}
E verificar se o dado foi inserido na tabela do MySQL.
No phpMyAdmin, confira se existe a tabela Contatos (ou contatos) e se as colunas nome, email, telefone, cpf estão lá.
Se a tabela ainda não existir, o Sequelize cria automaticamente com o comando sequelize.sync().
Agora volte ao Dialogflow, abra o chatbot e envie:
Bom dia!
Demorei para dar um retorno devido uma cirurgia que eu tive que fazer nos olhos.
Já me recuperei e estou bem.
Consegui resolver o problema com o webhook, esta funcionando.
Obrigado.
Estou com outro problema, se você puder me ajudar eu agradeço.
Estou tentando enviar o documento via Dialogflow, veja abaixo minha arte.
É possível enviar por aqui ou vou ter que enviar para um site?
Olá amigo.
Fico feliz que está se recuperando bem de sua cirurgia.
Esse nosso post já se tornou uma consultoria.
Vaou tentar lhe auxiliar com sua duvida.
É possível enviar documentos diretamente pelo Dialogflow?
NÃO.
O Dialogflow não envia arquivos diretamente pela interface padrão.
Ele só recebe texto, números, entidades e dispara webhooks.
Para enviar um documento, você precisa passar por uma camada externa, como:
| Plataforma | Pode enviar arquivo? | Como funciona |
|---|---|---|
| Telegram | Sim | Via API corta(Telegram Bot API sendDocument), usando webhook |
| WhatsApp (Cloud API / Twilio) | Sim | Envia arquivo via requisição HTTP API |
| Messenger | Sim | Envia attachment via Graph API |
| Site (widget) | Não envia direto | Você só consegue mandar links |
Como normalmente se faz
Fluxo correto
Usuário aciona o intent → nome, telefone etc.
Dialogflow chama seu webhook (Fulfillment).
Seu servidor responde com:
Exemplo de webhook (Node.js) enviando link
agent.add("Aqui está o documento que você pediu:");
agent.add("https://seusite.com/documentos/contrato.pdf");
Exemplo enviando arquivo pelo WhatsApp Cloud API
curl -X POST \
https://graph.facebook.com/v18.0/YOUR_PHONE_ID/messages \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"messaging_product": "whatsapp",
"to": "55XXXXXXXXX",
"type": "document",
"document": {
"link": "https://seusite.com/documentos/contrato.pdf",
"filename": "Contrato.pdf"
}
}'
Resumo final
Faça os testes ai e as alterações necessarias.
Vai precisar fazer algumas adaptações em seu código.
Avisa alguma duvida e envia o feedback com os resultados.
Boa sorte com seu projeto.
Até...
Bom dia!
Obrigado, consegui concluir o projeto. Sua ajuda foi primordial.
Olá João.
Tudo bem ?
Fico feliz que tenha concluído seu projeto.
Peço apenas que encerre este tópico e marque como solucionado.
Muito sucesso para você!
Bons estudos.