Um Chatbot para whatsapp feito em python, bootstrap e docker; compatível com twilio
Este software pode ser baixado gratuitamente e testado livremente; basta descompactar o arquivo (ou navegar até a pasta /loro, caso tenha clonado a partir do github) e seguir as instruções abaixo:
Renomeie o arquivo template.env apenas para .env, altere as variáveis para os valores desejados, respeitando as regras descritas no arquivo.
Dica: Por padrão, será utilizado um banco dados 'sqlite', e tudo funcionará bem. Porém, caso queira subir um container postgres para banco de dados e um container pgadmin para monitoramento deste banco, basta remover os comentários das seções pertinentes do arquivo docker-compose.yml. Também será necessário, no arquivo .env., fazer: RELATIONAL_DATABASE_PROVIDER=postgres
Apenas rode o comando:
docker-compose up
ou, para correr os contâiners em background (Detached mode):
docker-compose up -d
Acessando o endereço http://localhost:8000/, já é possível interagir com a interface do sistema.
Também, graças ao swagger embarcado com o fastapi, é possível explorar a API e sua documentação no link http://localhost:8000/docs.
Irure sunt fugiat ea quis consectetur laborum laborum incididunt fugiat nulla mollit. Eiusmod enim minim nulla non fugiat qui est anim sunt ipsum commodo do laboris. Laborum incididunt occaecat aute nostrud.
Ad veniam pariatur id eu labore laboris ea. Dolore id ullamco esse nisi excepteur aliqua laborum nisi ipsum id magna et duis dolore. Exercitation ipsum dolore laborum.
Enim ipsum id velit ullamco ut amet quis velit. Esse magna nostrud nostrud fugiat. Consectetur minim sit culpa ipsum non quis anim veniam voluptate pariatur proident deserunt eu. Labore aliqua sint consectetur incididunt ut enim aute velit proident esse enim ad proident.
Aliqua do eu anim minim adipisicing. Ad cupidatat deserunt proident dolore culpa commodo cupidatat sit. Eu Lorem ea nulla pariatur deserunt est aute est nostrud dolor. Exercitation cillum non ea mollit cupidatat laboris veniam ipsum magna consectetur et. Pariatur ex laborum occaecat deserunt Lorem magna laboris nulla dolore dolor duis labore. Sit nisi fugiat velit dolor est est reprehenderit pariatur aute. Laborum nulla nostrud nostrud non proident nulla aliqua occaecat velit dolor.
Backend/API baseados em fastapi
Frontend concebido em bootstrap renderizado pelo sistema de templates jinja.
O projeto tem arquitetura monolítica modular (mais detalhes abaixo em Estrutura do projeto, tendo suas dependências, ambiente virtual, empacotamento gerenciados pelo poetry num nível mais baixo, e pelo docker/docker-compose numa abstração mais superior.
A comunicação com a API do whatsapp (whatsapp business API) é garantida pelo serviço twilio, um parceiro comercial do facebook, recomendado por este em sua página oficial.
Este software é uma prova de conceito; como tal ainda carece de testes exaustivos, adição de funcionalidades e code review, não sendo recomendado portanto seu uso em produção.
Apesar de o fastAPI ser um framework assíncrono, a comunicação com o banco de dados é feita através da biblioteca de ORM pony, que não é (nativamente) assíncrona. Esta foi uma decisão de projeto; está nos planos de refatoração a substituição por uma biblioteca assíncrona.
Podem haver custos para envios de mensagens; ESTE software pode ser baixado sem custos, seu uso é livre, dentro das restrições impostas pela sua licença. Entretanto, a operação comercial do envio de mensagens não é competência deste software, que apenas automatiza as respostas, do modo recomendado pela empresa responsável pelo whatsapp, o facebook. Este modo demanda a intermediação de um parceiro comercial, neste caso o twilio, que cobra por mensagem enviada.
│ ├── app
│ │ ├── api
│ │ │ └── api_v1
│ │ │ ├── api.py
│ │ │ └── endpoints
│ │ │ ├── answers.py
│ │ │ └── twilio_hook.py
│ │ ├── lib
│ │ │ ├── chatbot
│ │ │ └── utils
│ │ │ ├── db
│ │ │ │ └── sql
│ │ │ │ ├── crud
│ │ │ │ │ └── answers.py
│ │ │ │ └── models.py
│ │ │ ├── exceptions.py
│ │ │ ├── schemas.py
│ │ │ └── tools
│ │ │ └── string_conversion.py
│ │ ├── main.py
│ │ ├── settings
│ │ │ ├── database_adapters.py
│ │ │ ├── default_answers.py
│ │ │ ├── general.py
│ │ │ ├── url_paths_handler.py
│ │ │ └── web_templating.py
│ │ └── web
│ │ ├── pages
│ │ │ ├── answers_dynamic_form.py
│ │ │ ├── answers.py
│ │ │ ├── home.py
│ │ │ └── router.py
│ │ ├── static
│ │ │ ├── assets
│ │ │ │ ├── img
│ │ │ │ │ ├── favicon.ico
│ │ │ │ │ ├── favicon.svg
│ │ │ │ │ ├── loro.svg
│ │ │ │ │ ├── loro_transparent.png
│ │ │ │ │ └── loro_transparent.svg
│ │ │ │ └── mail
│ │ │ │ ├── contact_me.js
│ │ │ │ ├── contact_me.php
│ │ │ │ └── jqBootstrapValidation.js
│ │ │ ├── css
│ │ │ │ └── styles.css
│ │ │ └── js
│ │ │ └── scripts.js
│ │ └── templates
│ │ ├── answers
│ │ │ ├── answers.html
│ │ │ ├── base_answers.html
│ │ │ ├── delete_confirmation.html
│ │ │ ├── dynamic_form.html
│ │ │ └── not_found.html
│ │ ├── base.html
│ │ ├── clients
│ │ │ ├── not_found.html
│ │ │ └── saved.html
│ │ ├── home.html
│ │ └── page_template.html
│ ├── Dockerfile
│ ├── poetry.lock
│ └── pyproject.toml
├── CHANGELOG.md
├── docker-compose.yml
├── LICENSE
├── README.md
└── template.env