Chat com a Sophia
Última atualização: 16 de julho de 2026
Visão Geral
A home tem um assistente conversacional chamado Sophia. A experiência de usar esse chat foi construída com cuidado, incluindo uma tela de "pensando" antes da primeira resposta e um indicador de "digitando..." animado, mas por trás de toda essa encenação não existe nenhuma inteligência artificial real. Toda pergunta recebe a mesma resposta, um texto de recheio em latim.
Arquivos-chave
| Arquivo | Responsabilidade |
|---|---|
features/home/subscreens/virtual-assistant/home-virtual-assistant.tsx | Tela inicial: prompt livre ou pergunta sugerida |
features/home/subscreens/virtual-assistant/home-virtual-assistant-loading.tsx | Tela de "pensando" antes da primeira resposta |
features/home/subscreens/virtual-assistant/home-virtual-assistant-chat.tsx | A conversa em si |
providers/virtual-assistant/virtual-assistant.provider.tsx | Estado das conversas, em memória |
Duas telas de espera fixas antes de qualquer resposta
Enviar a primeira pergunta não vai direto para o chat. Ela passa antes por uma tela de "pensando", com uma barra de progresso animada e duração fixa de 2 segundos:
// home-virtual-assistant-loading.tsx
const LOADING_DURATION_MS = 2000;
const loadingAnimation = Animated.timing(progress, {
toValue: progressWidth,
duration: LOADING_DURATION_MS,
useNativeDriver: false,
});
loadingAnimation.start();
const timeout = setTimeout(() => {
router.replace({ pathname: "/home/assistente-virtual-chat", params: { conversationId } });
}, LOADING_DURATION_MS);
Ao chegar no chat, a última mensagem já é a pergunta do usuário, ainda sem resposta, o que aciona um segundo tempo de espera, dessa vez com um indicador de "digitando..." de três pontinhos animados:
// home-virtual-assistant-chat.tsx
const scheduleSophiaReply = React.useCallback((userMessageId: string) => {
setIsSophiaTyping(true);
replyTimeoutRef.current = setTimeout(() => {
appendMessage(conversationId, "assistant", VIRTUAL_ASSISTANT_LOREM_REPLY);
setIsSophiaTyping(false);
}, 2000);
}, [appendMessage, conversationId]);
Somando as duas esperas fixas, a primeira pergunta de uma conversa leva cerca de 4 segundos entre o envio e a resposta aparecer, todos os 4 segundos sendo só encenação, sem nenhuma chamada de rede acontecendo nesse meio tempo.
A resposta é sempre a mesma, para qualquer pergunta
// home-virtual-assistant.data.ts
export const VIRTUAL_ASSISTANT_LOREM_REPLY =
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
Não importa se o vendedor pergunta sobre meta de vendas, um cliente específico, ou digita qualquer outra coisa, a resposta anexada à conversa é sempre esse mesmo texto. Não há leitura do conteúdo da pergunta em nenhum momento além de guardá-la na conversa.
Perguntas sugeridas e histórico
A tela inicial oferece perguntas prontas para tocar, que preenchem o campo e já enviam:
// home-virtual-assistant.tsx
{VIRTUAL_ASSISTANT_SUGGESTED_QUESTIONS.map((question) => (
<Button key={question} onPress={() => { setQuery(question); handleSubmitPrompt(question); }}>
{/* ... */}
</Button>
))}
Existe também uma tela de "Histórico de conversas" (/home/assistente-virtual-historico), mas como o VirtualAssistantProvider guarda tudo só em useState, esse histórico só existe enquanto o app estiver aberto na mesma sessão, sem sobreviver a um reload.
Armadilhas conhecidas
Não use esse chat como referência de como uma integração de IA real deveria se comportar no app, para isso use Importação de Pedido por IA, que de fato chama um backend de IA. Se for conectar esse chat a um serviço real no futuro, o ponto de substituição é exatamente a chamada a VIRTUAL_ASSISTANT_LOREM_REPLY dentro de scheduleSophiaReply, o resto da tela (histórico de mensagens, indicador de digitação, scroll automático) já está pronto para receber uma resposta de verdade no lugar.