Automatizando a Gestão de Cardápios



This content originally appeared on DEV Community and was authored by Gabriel Mendonça

O documento descreve a jornada de automatizar a atualização de cardápios para pequenos e médios restaurantes usando a ferramenta Runner H, um agente de IA de automação web por linguagem natural. O objetivo principal era centralizar e simplificar a tarefa de manter os cardápios consistentes em diversas plataformas, como Menu Legal, Menu Impresso (PDF) e iFood.

O Problema: A Dor da Atualização Manual de Cardápios

No mundo do delivery, restaurantes enfrentam o desafio constante de manter cardápios atualizados em múltiplas plataformas. A ausência de APIs de exportação ou a complexidade técnica para utilizá-las força os comerciantes a gastarem horas atualizando manualmente cada sistema, um processo propenso a erros e que consome tempo valioso. As principais frentes de atualização seriam o Menu Legal (uma vitrine virtual), o Menu Impresso (PDF) e o iFood, que serviria como base de dados primária.

A Ferramenta Principal: Runner H

A Runner H foi escolhida por sua promessa de:

  • Simplicidade: Automatizar tarefas complexas com comandos em linguagem comum.
  • Automação de UI: Interagir com interfaces gráficas de qualquer site, mesmo sem APIs.
  • Reconhecimento de Idioma: Capacidade de compreender e responder em português do Brasil.
  • Conectividade: Integração com ferramentas como Google Sheets e Google Drive.

Primeira Abordagem: Automação Direta de UI (Criação/Atualização no Menu Legal)

A hipótese inicial era usar a Runner H para automatizar a criação e atualização de produtos diretamente na interface do Menu Legal.

Desafios Enfrentados:

  • Login Instável: A Runner H demonstrou dificuldade em realizar o login de forma consistente, desviando para pesquisas no Bing ou reportando credenciais inválidas. Foi necessário um prompt extremamente detalhado e com esperas explícitas para estabilizar o processo (ver Apêndice, Prompt 3).
  • Recusa em Interagir com Formulários: Após o login, a Runner H se recusou a preencher formulários de criação/edição de produtos, alegando “incapacidade de performar interações” ou “não respeitar os Termos de Serviço”. Em vez de executar, ela gerava PDFs com instruções manuais.
  • Relato de Sucesso Falso: Em uma tentativa, a Runner H reportou ter criado todos os produtos com sucesso, mas a verificação manual no site revelou que nenhum produto havia sido adicionado.

Conclusão da Primeira Abordagem: A Runner H mostrou-se inconsistente e não robusta para automação de UI complexa (preenchimento/criação de formulários e validação de sucesso) em um site dinâmico como o Menu Legal. Isso levou a um pivô estratégico.

O Pivô Estratégico: Runner H como Agente de Scraping do iFood

Reconhecendo as limitações da Runner H para escrita em UIs complexas, a estratégia foi focar em sua força: a extração de dados (scraping). A loja do iFood (“Brigadeiros de Mãe – Doces Gourmet”) foi posicionada como a fonte primária de dados.

Sucessos na Extração de Dados do iFood:

  • Navegação e Rolagem: A Runner H conseguiu navegar até a página da loja no iFood e carregar a maioria dos produtos visíveis em uma página dinâmica com instruções de rolagem repetida.
  • Extração de Detalhes Complexos: Demonstrou capacidade de extrair Nome do produto, Descrição, Preço, Categoria, Subcategoria e URL da foto da listagem principal.
  • Extração de ID Único: Clicou em cada produto, navegou para a página de detalhes, extraiu o ID único (hash da URL) e retornou à lista principal para o próximo produto.
  • Preenchimento de Campos Ausentes: Preencheu campos não encontrados com o texto “nao encontrado”, conforme instruído.

Desafios Persistentes na Persistência de Dados (Escrita na Planilha Google):

Apesar da excelência na extração, a Runner H apresentou uma limitação crítica na etapa de gravação dos dados na planilha Google:

  • Remoção/Sobrescrita do Cabeçalho: Mesmo com instruções explícitas (“CRITICALLY: You MUST NOT MODIFY OR DELETE THE FIRST ROW”), a Runner H consistentemente removeu ou sobrescreveu a linha de cabeçalho da planilha ao tentar anexar novos dados.
  • Relato de Sucesso Falso na Escrita: Em várias tentativas, a Runner H reportou ter “anexado com sucesso” os dados à planilha, mas a verificação manual revelou que nenhum dado havia sido persistido. Apenas após intervenção humana explícita, ela conseguiu, em uma ocasião, gravar os dados.
  • Inconsistência na Quantidade de Produtos Extraídos: A quantidade de produtos extraídos em diferentes execuções da mesma página ainda não foi 100% consistente.

A Solução Híbrida: Runner H + Zapier + APIs (O Caminho para a Robustez)

Diante das limitações da Runner H em automação de UI complexa para escrita e manipulação de planilhas, a solução mais robusta e realista para o projeto se tornou uma arquitetura híbrida:

  • Runner H: Atua como o “Agente de Scraping Inteligente”. Sua função é navegar pelo iFood, extrair todos os dados detalhados dos produtos e enviá-los via Webhook para o Zapier, em vez de tentar escrever diretamente na planilha.
  • Zapier: Atua como o “Orquestrador de Dados Robusto”. Recebe os dados do Webhook da Runner H e, utilizando seus conectores nativos para Google Sheets e/ou chamadas de API, garante que os dados sejam gravados corretamente na planilha e, posteriormente, atualizados em outras plataformas.
  • APIs: O Zapier pode consumir APIs de forma muito mais estável do que a Runner H tentando emular a UI.

Desafios da Conexão Runner H com Zapier:

  • Integração “Nativa” Quebrada: A Runner H depende de um protocolo de conexão Zapier (Zapier MCP / Transporter SSE) que foi descontinuado pelo Zapier, impedindo a ativação da “ferramenta Zapier” dentro da Runner H e bloqueando qualquer comunicação HTTP externa.
  • Incapacidade de Fazer Requisições HTTP Genéricas: Mesmo com prompts explícitos para fazer requisições HTTP POST genéricas para um webhook, a Runner H persistiu em pedir a ativação da “ferramenta Zapier” quebrada.

Valor Adicionado da Solução Híbrida (Conceitual): Esta arquitetura combina o melhor de cada ferramenta: a capacidade única da Runner H de extrair dados de UIs sem API, e a robustez do Zapier para integração e manipulação de dados. O resultado seria uma automação de ponta a ponta que é robusta, centralizada em uma planilha e mais acessível para o usuário final.

Lições Aprendidas e Conclusão

A jornada com a Runner H foi um estudo de caso valioso sobre o potencial e os desafios dos agentes de IA para automação web:

  • Potencial da IA: A Runner H é impressionante em navegação, leitura de dados e extração de informações complexas de UIs dinâmicas.
  • Limitações da Automação de UI: A automação de UI para escrita e manipulação precisa de dados (como cabeçalhos de planilhas) ainda apresenta desafios significativos de robustez e consistência para agentes de IA baseados em linguagem natural. A Runner H falha em persistir dados e em obedecer a instruções imperativas sobre a estrutura da planilha.
  • Desafios de Integração: A dependência de protocolos de integração descontinuados pode inviabilizar funcionalidades cruciais.
  • O Valor das APIs: Para automações críticas e robustas, as APIs continuam sendo o método mais confiável e estável para persistência de dados.
  • Poder da Arquitetura Híbrida: O projeto demonstra a necessidade de combinar ferramentas com forças complementares (IA para scraping de UI, iPaaS para integração robusta) para construir soluções de automação eficazes no mundo real.
  • A Importância da Persistência e Depuração: Cada falha foi uma oportunidade de aprendizado, refinando a compreensão das capacidades da ferramenta e aprimorando a estratégia de automação.

A Runner H é uma ferramenta promissora para extração de dados de UI, mas sua capacidade de persistir esses dados em sistemas externos de forma autônoma e confiável ainda apresenta desafios significativos que exigem intervenção humana ou a integração com outras ferramentas mais robustas. A ferramenta é muito boa para scraping e tem um ótimo potencial, mas na visão do autor, ainda está longe de ser uma ferramenta de fácil utilização para integrações sistêmicas por parte de um usuário com pouca ou nenhuma experiência prévia em desenvolvimento ou automações.

Apêndice: Prompts Chave e Resultados

Para cada prompt, apresenta-se o objetivo, o prompt utilizado, o resultado observado (sucesso, parcial, falha) e as principais lições aprendidas ou frustrações.

Prompt 1: Tentativa Inicial de Login no Menu Legal (Direto)

  • Objetivo: Fazer a Runner H logar no painel administrativo do Menu Legal e navegar para a seção de produtos.
  • Prompt: Go to https://restauranthr.menulegal.app/admin#/login. Enter "****@*****.com" in the email field and "****" in the password field. Then, click the login button. After logging in, navigate to the section for managing products or menu items.
  • Resultado: Falha. A Runner H falhou no login, redirecionou para o Bing e reportou “Usuário ou senha inválidos.”
  • Aprendizado/Frustração: A Runner H se perdeu na navegação ou não submeteu as credenciais corretamente.

Prompt 2: Tentativa de Login no Menu Legal (URL e Labels Mais Específicos)

  • Objetivo: Refinar o prompt de login com a URL exata do painel administrativo e identificadores de campo mais precisos.
  • Prompt: Go to https://restauranthr.menulegal.app/admin#/login. Find the input field labeled "Email" and type "****@*****.com". Find the input field labeled "Senha" and type "****". Then, click the button that says "Entrar" or "Login" or "Enviar". After successfully logging in, navigate to the section for managing products or menu items.
  • Resultado: Falha. A Runner H reportou “The given task does not respect the Terms of Service.”
  • Aprendizado/Frustração: A inclusão direta das credenciais no prompt acionou uma política de Termos de Serviço da Runner H.

Prompt 3: Login no Menu Legal (Com Esperas Explícitas e Leitura de Credenciais da Planilha)

  • Objetivo: Superar os problemas de login e Termos de Serviço, instruindo a Runner H a ler as credenciais de uma planilha Google e usar esperas para estabilizar a interação.
  • Prompt: Go to https://restauranthr.menulegal.app/admin#/login. Wait 5 seconds for the page to fully load. Read the email and password from the "Credenciais" tab in my Google Sheet located at 1bUYfvizNLDCBsib0KdOWLdDCglCZib1AHTERsDIFEpI. Input the read email into the field labeled "Email". Wait 2 seconds. Input the read password into the field labeled "Senha". Wait 2 seconds. Click the button that says "Entrar" or "Login" or "Enviar". Wait 10 seconds for the login process to complete and the next page to load.
  • Resultado: Sucesso! A Runner H conseguiu logar no painel administrativo do Menu Legal.
  • Aprendizado/Frustração: Instruções granulares e esperas explícitas são essenciais para a robustez da automação de UI. A leitura de credenciais de uma fonte externa evitou a violação dos Termos de Serviço.

Prompt 4: Orquestração Genérica de Criação/Atualização de Produtos no Menu Legal

  • Objetivo: Fazer a Runner H orquestrar o processo de login, navegação, comparação e atualização/criação de produtos no Menu Legal a partir da planilha.
  • Prompt: Automate the process of updating my RestaurantHR menu on menulegal.app. First, log into the admin panel using my credentials from the connected Google Sheet. Then, navigate to the products management section and ensure all products from my Google Sheet (ID: 1bUYfvizNLDCBsib0KdOWLdDCglCZib1AHTERsDIFEpI) are present and updated on the website. If a product from the sheet is missing on the website, create it. If a product exists but its details (name, description, price, availability, image URL) differ, update them.
  • Resultado: Falha Parcial. A Runner H leu a planilha e planejou a tarefa, mas desviou para uma pesquisa (https://connecteam.com/…) em vez de continuar a automação no Menu Legal.
  • Aprendizado/Frustração: A Runner H pode se perder no contexto ou precisar de redirecionamento explícito após etapas de planejamento complexas.

Prompt 5: Extração de Dados de um Único Produto do iFood

  • Objetivo: Testar a capacidade da Runner H de extrair dados de uma página dinâmica como o iFood.
  • Prompt: Go to https://www.ifood.com.br/delivery/taboao-da-serra-sp/brigadeiros-de-mae--doces-gourmet-arraial-paulista/2e104a63-41b2-4d7a-8d24-8050c4b087b7. Wait 10 seconds for the entire page to fully load, including all product listings. Locate the first product visible on the page. Extract the following details for this product: - Product Name - Product Description - Price - Category (if clearly visible for this product) - Image URL (if available) Report all extracted data to me.
  • Resultado: Sucesso! A Runner H extraiu com precisão todos os detalhes do primeiro produto, incluindo categoria e URL da imagem.
  • Aprendizado/Frustração: A Runner H demonstra grande capacidade de extração de dados de UI, mesmo em sites dinâmicos.

Prompt 6: Extração de Todos os Produtos do iFood e Escrita Direta na Planilha (Com Leitura de Cabeçalho)

  • Objetivo: Fazer a Runner H ler o cabeçalho da planilha, extrair todos os produtos do iFood (incluindo navegação para IDs) e gravá-los na planilha.
  • Prompt: FIRST, go to my Google Sheet with ID 1bUYfvizNLDCBsib0KdOWLdDCglCZib1AHTERsDIFEpI, into the sheet named "produtos". Read and identify the exact column headers from the FIRST ROW of this sheet. These headers represent the product fields you need to extract from iFood. NEXT, go to https://www.ifood.com.br/delivery/taboao-da-serra-sp/brigadeiros-de-mae--doces-gourmet-arraial-paulista/2e104a63-41b2-4d7a-8d24-8050c4b087b7. Wait 15 seconds for the entire page to fully load and all initial products to appear. THEN, for ALL products visible on this iFood page, extract data for the fields that correspond to the headers you just read from the Google Sheet. (For example, if a header is 'Product Name', find and extract the product's name.) FINALLY, after extracting all data, append this information as new rows to the SAME Google Sheet (ID: 1bUYfvizNLDCBsib0KdOWLdDCglCZib1AHTERsDIFEpI, sheet "produtos"), ensuring the extracted data aligns with the correct columns (headers) you identified. Report the total number of products extracted and confirm when the data has been successfully added to the Google Sheet.
  • Resultado: Falha Parcial. A Runner H extraiu produtos (mas menos do que o esperado, e.g., 7 vs 13), conseguiu o ID, mas removeu a linha de cabeçalho da planilha.
  • Aprendizado/Frustração: A Runner H tem dificuldade em manipular precisamente a linha de cabeçalho da planilha e inconsistência na extração completa de todos os itens de páginas dinâmicas.

Prompt 7: Extração de Todos os Produtos do iFood e Escrita Direta (Com Rolagem e Proteção Explícita de Cabeçalho)

  • Objetivo: Melhorar a completude da extração com rolagem e forçar a proteção do cabeçalho da planilha.
  • Prompt: Go to https://www.ifood.com.br/delivery/taboao-da-serra-sp/brigadeiros-de-mae--doces-gourmet-arraial-paulista/2e104a63-41b2-4d7a-8d24-8050c4b087b7. Wait 15 seconds for the initial page content to load. **IMPORTANT: SCROLL DOWN THE PAGE REPEATEDLY TO LOAD ALL PRODUCTS.** Scroll to the bottom, wait 5 seconds for new content to load, then scroll again. Repeat this process at least 3-5 times, or until no more new products appear to load. Ensure the entire list of available products is visible. For EACH product visible on this iFood page, perform the following steps: 1. Extract the 'Nome do produto', 'Descrição', 'Preço', 'Categoria', 'Subcategoria'. If any of these fields are not found on the main listing page, fill that corresponding data point with the text "nao encontrado". 2. Extract the 'Url da foto' (URL of the main product image). If not found, use "nao encontrado". 3. IMPORTANT: CLICK on the product listing to open its specific detail page. 4. On the product detail page, extract the unique hash ID from the URL. This hash is found immediately after "prato=" in the URL. This extracted hash is the 'ID'. 5. After extracting the 'ID', navigate back to the main product listing page (https://www.ifood.com.br/delivery/taboao-da-serra-sp/brigadeiros-de-mae--doces-gourmet-arraial-paulista/2e104a63-41b2-4d7a-8d24-000000000000) to continue with the next product in the list. After extracting all data for all products from the iFood page, APPEND THIS INFORMATION AS NEW ROWS to my Google Sheet with ID 1bUYfvizNLDCBsib0KdOWLdDCglCZib1AHTERsDIFEpI, into the sheet named "produtos". Always append data starting from the second row onwards, ensuring the extracted data aligns perfectly with the columns defined by your spreadsheet's existing headers. Report the total number of products extracted and confirm when the data has been successfully added to the Google Sheet.
  • Resultado: Falha Crítica (Falso Positivo). A Runner H reportou sucesso (“extracted and appended data for 18 products”), mas nenhum dado foi realmente anexado à planilha.
  • Aprendizado/Frustração: A Runner H tem sérios problemas de persistência de dados em Google Sheets, reportando sucesso mesmo quando a operação falha.

Prompt 8: Forçando a Escrita após Falso Positivo (Intervenção Humana)

  • Objetivo: Fazer a Runner H persistir os dados após um falso positivo.
  • Prompt: (Após o Prompt 7, o autor informou à Runner H: “A tarefa de adição à planilha não foi bem executada.”)
  • Resultado: Sucesso (com intervenção). A Runner H então executou a escrita e gravou 11 produtos na planilha.
  • Aprendizado/Frustração: A Runner H não é totalmente autônoma para a persistência de dados e requer feedback humano para corrigir seus próprios falsos positivos.

Prompt 9: Teste de Envio de Produtos Fakes para Webhook do Zapier (Primeira Tentativa)

  • Objetivo: Testar a capacidade da Runner H de enviar dados via HTTP POST para um Webhook do Zapier.
  • Prompt: Generate 3 fake product entries... After generating this data, send each product entry as a separate HTTP POST request to the Zapier Webhook URL: https://hooks.zapier.com/hooks/catch/7352674/u32h4r4/. Ensure each request body is a JSON object... Report the success of each webhook transmission.
  • Resultado: Falha. A Runner H respondeu: “I noticed you could benefit from these tools: Zapier. Please activate them or ask me to proceed with your request.”
  • Aprendizado/Frustração: A Runner H exige a ativação de uma “ferramenta Zapier” interna para realizar requisições HTTP, mesmo para webhooks genéricos.

Prompt 10: Teste de Envio de Produtos Fakes para Webhook do Zapier (Enfatizando HTTP POST)

  • Objetivo: Tentar forçar a Runner H a fazer a requisição HTTP POST, contornando a dependência da ferramenta “Zapier” descontinuada.
  • Prompt: Generate 3 fake product entries... After generating this data, make a **HTTP POST request** for each product entry to the Zapier Webhook URL: https://hooks.zapier.com/hooks/catch/7352674/u32h4r4/. Ensure each request body is a JSON object... Report the success of each HTTP POST request, including any response messages received.
  • Resultado: Falha. A Runner H persistiu na mensagem de ativação da ferramenta “Zapier”, confirmando que sua capacidade de requisições HTTP está ligada a essa integração desatualizada.
  • Aprendizado/Frustração: A capacidade de fazer requisições HTTP arbitrárias na Runner H está bloqueada por uma integração “Zapier” quebrada/descontinuada, inviabilizando o envio de webhooks de forma autônoma.


This content originally appeared on DEV Community and was authored by Gabriel Mendonça