---
# System prepended metadata

title: Release 1.4.11

---

# Release 1.4.11

## 1.4.10.1 
- JS API for widget (prev release, not tested properly)
- New proactive message logic (widget on different tabs is one instance)
    - preview\unfurl of links
- Change logic for sending end session message
### Update
#### Services
 - worker-service
 - core-service
 - admin-service
 - widget-service
 - modules
#### Bucket
1. Update on bucket parameters.json for NICE inContact
2. Update on bucket connector.js for NICE inContact
3. Update on bucket parameters.json for Rake user app
#### Modules
1. Update module NICE inContact
2. Update module Rake user app

## 1.4.10.2 

Date on PROD: 2020.04.28

- https://chatbots-studio.atlassian.net/browse/W5GOL-2045
### Update
#### Services
 - worker-service
 - core service
 - NICE inContact module
 - Rake user app module
 - admin-service
 - widget-service
#### DB
```javascript=
db.getCollection("rakeLiveChat_EventTypes").insert({
    "select": [
        {
            "name": "true",
            "conditionId": 0
        },
        {
            "name": "false",
            "conditionId": 4
        }
    ],
    "multiselect": null,
    "disabled": false,
    "name": "Only during business hours",
    "second": null,
    "rakeLiveChat_EventTypeId": NumberInt(10),
    "__v": NumberInt(0)
})
db.rakeLiveChat_EventTypes.update(
  {},
  { $set: {"orderId": null} },
  false,
  true
)
```

## 1.4.10.3

- API for return offline user
- Localization for admin-service and rake user app
    - each label will be have tooltipId
        - if label not have text, we hide tooltip
    - research about localization service
- Statistic updated on events
- JS API for widget (prev release, not tested properly)
    - Build out a prototype site with api demo and widget
        - [Moqups](https://app.moqups.com/ahOJDX97Xj/view/page/ab5cdc977)
    - Need UI for admin service
    - test mode
        - we not use bot logic, maybe. Echo mode
    - Rake project will have bot "Demo". This bot will be used for demostration how JS API works
    - Web site will be hosted on widget-service
        - we need UI prototype for creating web-site
        - [Inspiration](https://developers.livechat.com/docs/extending-ui/extending-chat-widget/javascript-api/?a=VPsUDBx-cG)
### Update
#### Google bucket
For JS API demo mode upload on bucket index.html
#### Services
 - stats-service
     - change structure for calculating missed chats
 - worker-service
     - add message watcher logic
 - core-service
     - change logic on request about module event end
     - add new message watcher 
 - widget-service
     - add js demo page
 - admin-service
     - localization
     - user profile
 - redis-rabbitmq-handler
     - add message watcher logic
 - user-app module
     - change request to core for end event
 - event trigger logic
     - add new actions
#### DB
- clean stats collections
    ```javascript=
    db.events.insertOne({
            "systemEventId": 90,
            "name": "session must be handeled"
    })
    db.events.insertOne({
            "systemEventId": 91,
            "name": "session was handeled"
    })
    db.events.insertOne({
            "systemEventId": 92,
            "name": "Localization was updated"
    })

    db.events.insertOne({
            "systemEventId": 93,
            "name": "Localization status was changed"
    })

    db.systemConfigs.updateMany({}, {
        $set: {
            "systemEventId": {
                "localization": {
                    "valueUpdated": 92,
                    "statusUpdated": 93
                }
            },
        },
        }
    })
    db.actions.insertOne({
            "actionId": 1,
            "name": "send request"
    })
    db.sessionTypes.insertOne({
            "sessionTypeId": 2,
            "name": "notification",
            sessionTtl: 1 * 60 * 1000,
            isSearchCacheEnabled: false,
            "__v": NumberInt(0)
    })
    db.sessionTypes.update(
        { sessionTypeId: 0 },
        { 
            $set: { 
                sessionTtl: 5 * 60 * 1000,
                isSearchCacheEnabled: true,
            }
        }
    );
    db.sessionTypes.update(
        { sessionTypeId: 1 },
        { $set: { isSearchCacheEnabled: false } } 
    )
    ```
- add in system config
   ```javascript=
   { 
    languageCode: 'en' 
    botId 
    systemEventId,
    workers: {
                userApp: {
                    url: "https://..."
        }
   }
   ```
   
 update color for rake platform
 ```
      $set: {
        "__v": 0,
        "name": "Rake",
        "platformId": 4,
        "reportColor": "#eeeeee",
        "systemName": "botkit",
        "userApp": {
            "name": "System"
        }
    }
 ```   
- add in localizations all records from uat db
- add in languages all records from uat db

## 1.4.10.4

- Separate rake user app platform from main worker
- New message API
    - edit message
        > search engine
    - delete message
        > search engine
- Transfer session to another agent
    > Already have webhook fo this. Need testing with rake-user-app team after his implementation
    > Add render on widget side sysytem event about aggent assigne and leave conversation
    > 

### DB
1) add worker url for platfrom collection
    
## 1.4.10.5


### Feature list
- (UAT deploy date:) Relation between collections inContactAgents(and other) and entities 1 to many
- (UAT deploy date:) Role system for admin panel (must be discussed, research)
    - update core service
    - update workers service
    - update statistic service
    - update admin service
    - API key system user
        - api key will be saved in collection systemUsers
        - [role system](https://docs.google.com/spreadsheets/d/1awaJSECOO8uSMsKqXThCOoIbM024uGT_XCJsnQkfDaQ/edit?ts=5afe3d3c#gid=1276652108)
        -  token for system user must be longer(uuid/v4)
        - generate for each API-system-user email and password, entity record
        - use current structure of systemUser-permission
        - use logic with refresh tokens and OAuth for generating first
        - systemUserTypes: systemUser || API user
        - entityTypeId: Rake system user
- (UAT deploy date:) Double message from module
- (UAT deploy date:) Documentation service
- (UAT deploy date:) Alternative mode for widget(use parent local storage)
- (UAT deploy date:) Allow * in allowed domains
- (UAT deploy date:) Move logic from rake user app backend to rake user app worker
- Create functionality for reactions


### Bug fix
- https://chatbots-studio.atlassian.net/browse/W5GOL-2352
- https://chatbots-studio.atlassian.net/browse/W5GOL-2378
- Facebook page access token verification

### Service to update
 - core
 - main worker
 - admin service
 - widget
 - event trigger logic
 - module(admin panel)
 - cloud function unzip
---
## Feature List.

- Log system
- Documentation
     - Describe flow for proactive message
     - Update DB documentation
     - Event trigger logic

### Integrations

- [integrations project] Google business integration on rake user app side
    - new sevice
        - back end
        - front end
    - message API(closed beta)
- [integrations project] Platform email





### FOR NEW DEPLOY
```json=  
    db.events.insert([
    {

	"systemEventId" : 101,
	"name" : "Session transfer failed"
},

/* 2 createdAt:22.06.2020, 12:27:58*/
{

	"systemEventId" : 102,
	"name" : "Session transfer expired"
},

/* 3 createdAt:11.06.2020, 09:46:40*/
{

	"systemEventId" : 100,
	"name" : "Session transfer accepted"
},

/* 4 createdAt:11.06.2020, 09:46:40*/
{

	"systemEventId" : 99,
	"name" : "Session transfer canceled"
},

/* 5 createdAt:11.06.2020, 09:46:40*/
{

	"systemEventId" : 98,
	"name" : "Session transfer declined"
},

/* 6 createdAt:11.06.2020, 09:46:40*/
{

	"systemEventId" : 97,
	"name" : "Session transfer started"
},])
    ```
    
```json=
    db.eventTriggers.update({ _id: ObjectId("{{ID}}") }, {
    $set: {
        "eventTriggerId": 2,
        "eventIds": [
            94,
            95,
            96,
            97,
            98,
            99, 
            100,
            102
        ],
        "filters": [
        {
			"filterOperatorId" : 1,
			"filterId" : 2,
			"arguments" : [
				"{{transferInfo.toEntityTypeId}}",
				9
			]
		}
        ],
        "customFilter": "1",
        "actions": [
            {
                "id": 2,
                "arguments": []
            }
        ]
    }
})

db.entities.update({ $and: [{ profileImage: {$exists: true}}, {profileImage: null }]}
, 
    {$set:{profileImage: {}}}, 
    { multi: true, upsert: false}
  ```  
    


# 1.4.10.5
```json=
db.actions.insert([{	"actionId" : 3,
	"name" : "send to rabbit queue"}])
    
    
    
db.events.insert([
    {
"systemEventId" : 103,
	"name" : "Billing feature utilization"
},
 {
"systemEventId" : 104,
	"name" : "Billing plan update"
},
 {
"systemEventId" : 105,
	"name" : "Billing add on added"
},
 {
"systemEventId" : 106,
	"name" : "Billing add on removed"
},




db.eventTriggers.insert([
{
        "eventTriggerId": 3,
        "eventIds": [
           103,
           104, 
           105, 
           106
        ],
        "filters": [
            {
            }
        ],
        "customFilter": "1",
        "actions": [
            {
                "id": 3,
                "arguments": []
            }
        ]
    }
	])
```

