# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lorembot.gitbook.io/docs/proposta.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
