{"id":23357370,"url":"https://github.com/kaualandi/bot-whatsapp-flow","last_synced_at":"2025-04-10T09:37:20.067Z","repository":{"id":270956280,"uuid":"905439786","full_name":"kaualandi/bot-whatsapp-flow","owner":"kaualandi","description":"Chatbot de WhatsApp para fluxo de conversa","archived":false,"fork":false,"pushed_at":"2024-12-29T01:37:14.000Z","size":481,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T08:22:09.354Z","etag":null,"topics":["chatbot","nodejs"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kaualandi.png","metadata":{},"created_at":"2024-12-18T20:41:00.000Z","updated_at":"2025-03-17T01:19:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"00a38ce3-bc2f-450e-8b85-e52e9367e15b","html_url":"https://github.com/kaualandi/bot-whatsapp-flow","commit_stats":null,"previous_names":["kaualandi/bot-whatsapp-flow"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaualandi%2Fbot-whatsapp-flow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaualandi%2Fbot-whatsapp-flow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaualandi%2Fbot-whatsapp-flow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kaualandi%2Fbot-whatsapp-flow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kaualandi","download_url":"https://codeload.github.com/kaualandi/bot-whatsapp-flow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248192498,"owners_count":21062694,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chatbot","nodejs"],"created_at":"2024-12-21T10:28:23.557Z","updated_at":"2025-04-10T09:37:20.058Z","avatar_url":"https://github.com/kaualandi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eOlá, bem vindo!\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n\u003cimg alt=\"Versão\" src=\"https://img.shields.io/badge/version-1.0-blue.svg?cacheSeconds=2592000\" /\u003e\n\u003cimg alt=\"Licença: APACHE 2.0\" src=\"https://img.shields.io/badge/License-APACHE 2.0-yellow.svg\" /\u003e\n\u003cimg alt=\"npm version\" src=\"https://img.shields.io/npm/v/@open-wa/wa-automate.svg?color=green\"/\u003e\n\u003cimg alt=\"node-version\" src=\"https://img.shields.io/node/v/@open-wa/wa-automate\"/\u003e\n\u003cimg alt=\"made-with-node\" src=\"https://img.shields.io/badge/Made%20with-node-1f425f.svg\"/\u003e\n\n\u003c/p\u003e\n\n\u003e Olá, esse bot de whatsapp foi criado com foco em atendimento ao cliente.\n\n## Como iniciar\n\n```bash\ngit clone https://github.com/kaualandi/bot-whatsapp-flow.git\n```\n\n```bash\ncd bot-whatsapp-flow\n```\n\n```bash\nnpm install\n```\n\n### Variáveis de ambiente\n\nVocê precisará de um arquivo `.env`, copie o `.env.example`\n\n```bash\ncp .env.example .env\n```\n\nO que tem em sua env:\n\n- **JSON_SERVER_PORT**: Porta do servidor json-server, onde é salvo as informações dos usuários.\n- **EXPIRE_TIME**: Tempo de expiração da seção do usuário em milissegundos (o padrão é 2 minutos).\n\n### Ambiente de Desenvolvimento\n\n```bash\nnpm start\n```\n\nIsso iniciará o bot em modo de desenvolvimento, aparecerá um QR Code para escanear.\n\nO Json-Server também será iniciado, é nele onde é salvo as informações dos usuários.\n\n### Ambiente de Produção\n\nAcredito que você não queria que o server fique ocupando uma instância do terminal. Devemos então prepará-lo para o [PM2](https://pm2.keymetrics.io/).\n\n\u003e Não ensinarei aqui como configurar o [PM2](https://pm2.keymetrics.io/). Mas se quiser, você pode ver o [guia](https://pm2.keymetrics.io/docs/usage/quick-start/) para isso.\n\u003e Verifique de instalar também o suporte para Typescript do PM2.\n\nSe ainda não estiver, entre na pasta do servidor\n\nInicie o server com o PM2:\n\n```bash\npm2 start src/index.ts --name meu-bot\n```\n\nPara escanear o QR Code, basta acessar o endereço `http://\u003cseu_ip\u003e:3012`.\n\n## Passos ou _steps_ do bot\n\n### Como funciona?\n\nO passo do bot é o arquivo que ele chamará para executar uma ação em determinado momento.\n\nPor exemplo: Quando o usuário inicia uma conversa, o código o cadastrará e será chamado o passo 0. Fazendo o que for configurado nele.\n\nObserve o código abaixo:\n\n```typescript\nimport { Client, Message } from '@open-wa/wa-automate';\nimport { Step } from '../core/decorators/step-decorator';\nimport { OnInit } from '../core/models/step';\n\n@Step({ selector: 0 })\nexport class Step0 implements OnInit {\n  async onInit(client: Client, message: Message): Promise\u003cnumber\u003e {\n    await client.sendText(message.from, 'Olá, tudo bem? Escolha 1 ou 2');\n    return 1;\n  }\n}\n```\n\nEle é o primeiro passo, como indica o seletor no decorador `@Step({ selector: 0 })`.\n\nO método `onInit` é o hook que será chamado quando o passo é carregado. Ele espera um retorno de um número, que é o próximo passo que o bot deve chamar na próxima vez que o usuário enviar uma mensagem.\n\nMas você também pode usar um choices, como no código abaixo:\n\n```typescript\nimport { Client, Message } from '@open-wa/wa-automate';\nimport { Step } from '../core/decorators';\nimport { IChoice, WithChoices } from '../core/models/step';\n\n@Step({ selector: 1 })\nexport class Step1 implements WithChoices {\n  public choices: Record\u003cstring, IChoice\u003e = {\n    '1': this.choice1,\n    '2': this.choice2,\n  };\n\n  async choice1(client: Client, message: Message) {\n    await client.sendText(message.from, 'Você escolheu a opção 1');\n    return 0;\n  }\n\n  async choice2(client: Client, message: Message) {\n    await client.sendText(message.from, 'Você escolheu a opção 2');\n    return 0;\n  }\n}\n```\n\nO método `choice1` e `choice2` são as escolhas que o usuário pode fazer. Eles são chamados quando o usuário envia a mensagem correspondente a chave do objeto `choices`.\n\n**Dica**: Você pode combinar o uso de `onInit` e `WithChoices` para criar opções dinamicas vindo de uma API, por exemplo.\n\n### Como criar um passo?\n\nPara criar um passo, basta criar um arquivo na pasta `src/steps` com o nome `step\u003cnumber\u003e.ts`, ou como preferir.\n\nDepois disso, você deve criar uma classe com o decorador `@Step`, não se esqueça de expecificar um seletor (`selector`) que ainda não foi usado para evitar sobreposição.\n\nImplementar a interface `OnInit` ou `WithChoices` para te auxiliar com a tipagem.\n\nVocê também precisa importar de forma explícita o passo no arquivo `src/steps/index.ts`, para que o bot possa carregar ele.\n\n### API e serviços\n\nChamadas de API e outros serviços devem ser feitos na pasta `src/public/services`. Crie conforme o `user-service.ts` para te auxiliar. Mas não se esqueça de usar o decorator `@injectable` para que o serviço para uso do DI. Também o importe no arquivo `src/config/inversify.ts`, siga o exemplo do `UserService`.\n\nO Axios é o cliente HTTP que está sendo utilizado, suas configurações estão no arquivo `src/config/axios.ts`.\n\n## O que está por vir?\n\n- [ ] Testes\n- [ ] Logs com Sentry\n- [ ] Migração para um banco real\n- [ ] Containarização\n- [ ] Documentação\n- [ ] Internacionalização (i18n)\n- [ ] CI/CD\n- [ ] Histórico de conversa\n- [ ] Humanização das mensagens com IA\n- [ ] Integração com outros serviços (n8n)\n- [ ] Feedback do usuário\n\n## Autor\n\n👤 **Kauã Landi**\n\n- Website: https://kaualf.com\n- Github: [@kaualandi](https://github.com/kaualandi)\n- LinkedIn: [@kaualandi](https://linkedin.com/in/kaualandi)\n- Instagram: [@kauaalandi](https://www.instagram.com/kauaalandi/)\n\n## 🤝 Contribuição\n\nContribuições, problemas e solicitações de recursos são bem-vindos! \u003cbr/\u003e Sinta-se à vontade para verificar a [página de problemas](https://github.com/kaualandi/bot-whatsapp-flow/issues). Você também pode dar uma olhada na [página de contribuição](https://github.com/kaualandi/bot-whatsapp-flow/pulls).\n\n## 🥰 Mostre seu apoio\n\nDê uma ⭐️ se este projeto te ajudou!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaualandi%2Fbot-whatsapp-flow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkaualandi%2Fbot-whatsapp-flow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkaualandi%2Fbot-whatsapp-flow/lists"}