> For the complete documentation index, see [llms.txt](https://lorembot.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lorembot.gitbook.io/docs/proposta.md).

# Proposta

| Data     | Versão | Descrição                                                                                  | Autor  |
| -------- | ------ | ------------------------------------------------------------------------------------------ | ------ |
| 20/05/18 | 1.0    | Ideia, Implementação, Spot, Tipo de Framework, Documentação, Bibliotecas, Próximos Passos. | Equipe |

## 1. Ideia

Desenvolvimento de um framework escrito em Python ou Ruby para criação de chatbots, prontos para integração com as plataformas Facebook Messenger e Telegram.

O nosso framework agiria como um intermediário (middleware) entre as SDKs do Messenger e o Telegram e o código escrito pelo usuário para criar os chatbots.

## 2. Implementação

Nós iremos desenvolver um servidor web para receber as requisições dos servidores do facebook e do telegram. irá receber a requisição e irá tratar essa requisição delegando para as SDK’s a ação final de acordo com a mensagem.<br>

![Diagrama de Integração de Módulos do Framework](https://docs.google.com/drawings/u/1/d/sjT5PXK90cT8CLK-CUN4GJw/image?w=531\&h=330\&rev=277\&ac=1)

## 2. Spots

### 2.1 Frozen

* Integração com Telegram
* Integração com Messenger
* SQLite para armazenamento de dados

### 2.2 Hot

* Models para armazenamento de dados
* Comandos de ação do chatbot

## 3. **Tipo do Framework**

Após a análise das funcionalidades que pretendem ser oferecidas pelo framework, identificou-se o tipo caixa cinza. O framework permitirá reúso por herança, associação dinâmica, sendo um intermediário entre os dois outros tipos de frameworks, caixa branca e caixa preta.

## 4. **Documentação**

Pretende-se elaborar uma documentação a nível de código, explicando o que cada método das classes fazem, além de criar alguns exemplos de projetos usando o framework.

## 5. **Bibliotecas**

A depender da linguagem escolhida pela equipe, poderá se utilizar as seguintes bibliotecas para a criação do framework.<br>

| Linguagem | Título               | Descrição                                                  | URL                                                          |
| --------- | -------------------- | ---------------------------------------------------------- | ------------------------------------------------------------ |
| Ruby      | telegram-bot-ruby    | Biblioteca de integração com Telegram                      | <https://github.com/atipugin/telegram-bot-ruby>              |
| Ruby      | Ruby Messenger       | Biblioteca de integração com Facebook Messenger.           | <https://github.com/netguru/messenger-ruby>                  |
| Ruby      | Rack                 | Biblioteca para criação de servidores web.                 | <https://rack.github.io/>                                    |
| Ruby      | SQLite3/Ruby         | Biblioteca para gerenciamento de banco de dados SQLite.    | <https://github.com/sparklemotion/sqlite3-ruby>              |
| Python    | Python Telegram Bot  | Biblioteca de integração com Telegram.                     | <https://github.com/python-telegram-bot/python-telegram-bot> |
| Python    | Python Messenger Bot | Biblioteca de integração com Facebook Messenger.           | <https://github.com/hartleybrody/fb-messenger-botPython>     |
| Python    | SQLite3/Python       | Biblioteca para gerenciamento de banco de dados SQLite.    | <https://docs.python.org/2/library/sqlite3.html>             |
| Python    | SQLAlchemy           | Biblioteca de mapeamento objeto-relacional SQL para Python | <http://sqlalchemy-migrate.readthedocs.io/en/latest/>        |

## 6. Próximos Passos

A equipe definiu algumas tarefas para iniciar o desenvolvimento do framework e estão relacionadas a seguir:<br>

* Estudar documentação:
  * <https://developers.facebook.com/docs/messenger-platform/>
  * <https://core.telegram.org/bots/api>
* Definir funcionalidades do Framework
  * Como fazer uma model apenas especificando os atributos e os tipos de cada atributo.
  * Criar o diagrama de classes do framework
  * Criar um site para a documentação (<https://www.gitbook.com/>)
  * Definir a estrutura de pastas do projeto
