# Definitions
## Terminology
| define | description |
| ------ | ----------- |
| Internal Session | A session where all entities are on Rake User App Platform Id
| External Session | A session where any entity is not on the Rake User App Platform Id
| ObjectId | The MongoDB objectId set for a document. Used like 'moduleObjectid" |
| Rake System | The system describes all of botkit + our core code + modules + bots + db |
| Rake Core | This is the code which is developed by us and is required (along with Botkit code) for any modules and bots to run |
| Organization | This will be the "parent" entity for (1) Projects; and (2) Entities. All project files for Projects owned by an Organziation will be within that Organization's file structure. |
| System User | "A system user is a person who uses the admin front-end. A system user may belong to an Organization (we have not decided if they must belong) NOTE: We had called this AdminUser on our call. I just think SystemUser is a better definition" |
| Project | "A project would have modules, which in turn, would have bots. A project will be created in an Organization. A project will be shareable with Admin Users outside the Project's parent Organization." |
| Role | "This would just be an enumerator like owner, admin, developer, etc. We have not fully specified this. We have discussed that an Admin User might have an Organization Role that might then cascade to each Project in that Organization. Also, Roles might then be assigned at the Project level to provide more granularity." |
| Module | "A module would be a shared code base which would be available for building bots. It is owned by a Project and usuable only in that Project. [There is an open question about whether we would need greater flexibility for a Module to be shared across Projects. We will not pursue this question now.]" |
| Bot | "This is the code which connects to and from the outside. A bot belongs to a Project. A bot is stored in the file structure under the Project file structure. A bot uses the Rake core (minimum) and might use (probably) Module(s). A bot can hand off a Session to another Bot." |
| Platform | This is the term used to describe connectors (Facebook Messenger, Twilio SMS, inContact, etc.) |
| ConversationFlow | Taras will research the term used by botkit for their Conversation Flows |
| Message | "What gets sent from one entity on the system to another. We will store the botkit message pipleline format for now" |
| Entity | "Entity is a term for anyone or anything sending or receiving messages on the platform. Every message will have a SendingEntityID and a ReceivingEntityID. A person using the system will be assigned an EntityID. A bot will have an EntityID. When we send a message to inContact without knowing the Agent, it will go to an EntityID assigned to inContact Point-of-Contact for the bot. Later, when we include a platform like Slack (more likely Twilio Chat), where messages can be to an individual or to a Channel, these would still each represent one Entity." |
| EntityType | Person, Bot, Platform, other |
| Session | "An active encounter with the Rake System. It is tracked in a Session table. It has an Expiration. It stores items that are needed to maintain the session, like the current EntityIDs, current BotID, current Conversation Flow (term?), NextAction." |
| Message Sender Label | A Message Sender Label is prepended to a Message and is displayed as part of a Message to provide a visual indicator of the sender. It is not part of the Message itself. Its format can differ by Platform. |
| Rake User Internal Messaging | Messaging ONLY including entities on Rake User App platform. |
| Channel | This is a term used in the Rake User App. It is the same term as Channel in Slack. They can be public or private. They will be able to be restricted to a workspace or allow other workspace users.
| Site Application | This is the collection of settings for a Rake Live Chat application on a defined website domain(s).
| Widget | The widget is the user facing application that enables Rake Live Chat conversations for website visitors.
## Message
### Message Sender Lable
A Message Sender Label is prepended to a Message and is displayed as part of a Message to provide a visual indicator of the sender. It is not part of the Message itself. Its format can differ by Platform.
Example:
>Test3: Hello
message: ``` { label<messangeSenderLable>: 'Test3', text: 'Hello' } ```
after inContact module
message: ``` { label<messangeSenderLable>: 'Test3', text: 'Test3: Hello' } ```
message: ``` { label<messangeSenderLable>: 'Mykola Jakowel', text: 'Hello again' } ```
Converted to:
>Facebook platform - Mykola Jakowel
>Hello again