Upgrade tasks

Document version: 245. Automatically generated.

Document lists important changes to Automate platform which affect existing deployments.

Each change is provided with migration guide which has to be applied in order to keep platform running correctly.

Prerequisites

Conventions

  • CAPITAL_LETTERS_VARIABLE_NAME - fragment which should be replaced with actual values matching particular environment
  • AUTOMATE_CONFIG_REPO_PATH - Path to automate configuration repository (eg. /home/user/automate-config)
  • ENVIRONMENT_NAME - Environment name (eg. production)

Example

$ cd AUTOMATE_CONFIG_REPO_PATH/ENVIRONMENT_NAME/external-services

Should be substituted with:

$ cd /home/user/automate-config/production/external-services

Releases

Ordered from latest to oldest

245

1. Change of default configuration values in the Sentione package.

Following configuration keys in file [ENV_NAME]/kubernetes/helm/automate/values.yaml are deprecated now:

sentione.newweb
sentione.botintegration
sentione.analyser
sentione.slimuploader
sentione.refinery

Follow steps below to migrate your configuration
Steps

1. Remove deprecated configuration keys

* Open [ENV_NAME]/kubernetes/helm/automate/values.yaml in text editor
* Remove following sections:
```yaml
sentione.newweb
sentione.botintegration
sentione.analyser
sentione.slimuploader
sentione.refinery
```

2. Enable SentiOne React apps

  • Open [ENV_NAME]/kubernetes/helm/automate/values.yaml in text editor
  • Add following sections in the file
```yaml
sentione:
    applications:
      newweb:
        enable: true

      botintegration:
        enable: true

      analyser:
        enable: true

      slimuploader:
        enable: true

      refinery:
        enable: true
```

3. Tailor the config

  • Open [ENV_NAME]/kubernetes/helm/automate/values.yaml in text editor
Make any amendments your deployment require
You can amend POD requests / limits using following keys

```yaml
sentione:
  applications:
      appName:
        resources:
          requests:
            cpu: "1"
            memory: "8Gi"
          limits:
            cpu: "2"
            memory: "8Gi"
```

4. Commit your changes

```yaml
git add [ENV_NAME]/kubernetes/helm/automate/values.yaml
git commit -m '245 sentione config migration'
git push
```

244

1. LiveChat channel requires new scope

📘

This step is only required if LiveChat integration is configured.

The customers:rw scope is now required for LiveChat integration. Please follow steps below to add it.

  1. Log in to LiveChat Developer Console.
  2. Go to Apps -> Your apps.
  3. Click on the app that is used for integration with Automate.
  4. Go to the "App Authorization" block.
  5. Scroll down to "App scopes and API access" section.
  6. Add scope customers:rw.

This scope is needed for SetLiveChatCustomVariables command. It's going to work only in newly created LiveChat channels.

2. Added Microsoft Entra ID support

To enable Entra ID provider in SSO server, provide config values:

chatbots.sso-server {
  host: "" # publicly visible SSO Server's URL (only host) for generating links
  is-https: true # is SSO Server available under SSL

  entra-id {
    tenant-id: ""
    client-id: ""
    client-secret: ""
  }
}

243 (build 243.0.7 and newer)

1. Migration of RabbitMQ queues from classic to quorum

It's not possible to change the type of existing RabbitMQ queue, so we've added version suffix to all queue names.

For example, automate.analytics.message is now automate.analytics.message.v2.

New queues will be automatically created by Automate. Automate won't connect to old queues, so if there are some messages left, they won't be processed.

For production environments with ongoing bot conversations, we recommend manually moving messages from old queues that contain conversations history and their metadata to new queues:

  • automate.analytics.message -> automate.analytics.message.v2
  • automate.analytics.metadata -> automate.analytics.metadata.v2
  • automate.analytics.callSummary -> automate.analytics.callSummary.v2
  • automate.analytics.recording -> automate.analytics.recording.v2
  • transcription.add.v2 -> transcription.add.v3
  • transcription.recording.attach -> transcription.recording.attach.v2
  • transcription.metadata.update.v2 -> transcription.metadata.update.v3

To to move messages from old queue to new queue, you can use RabbitMQ Management UI. This step should be performed after the deployment, when the new queues are created.

  1. Open RabbitMQ Management UI
  2. Go to Queues tab
  3. Find old queue that contains messages
  4. Click on queue name
  5. Go to Move messages section
  6. Enter new queue name in Destination field
  7. Click Move messages

240

1. NLU Facade resources requirements increase

📘

This step is only required if autocorrect feature is going to be enabled. For description of autocorrect feature please visit documentation.

1.1. Resources requirements

Please refer to NLU Facade resources requirements in the adequate platform size in Platform scaling.

1.2. Enable autocorrect

1.2.2. Please open ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml in Text Editor of your choice
1.2.3. Head to section chatbots.commonConf
1.2.4. Add following config
chatbots.nlu-facade-api {
  autocorrect-languages: ["pl", ...]
}

For information about supported autocorrect-languages please refer to NLU Facade Application's config.

2. NLU Complex models limit configuration (Optional)

As NLU Complex model is much heavier than Simple model, we've introduced
configuration parameter for limiting number of NLU complex models on the platform.

It's recommended to set the limit to avoid out-of-memory issues on the platform. To do so please follow steps below.

📘

For information about available intentizer types and how to calculate NLU Complex models limit please refer to documentation.

2.2. Please open ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml in Text Editor of your choice

2.3. Head to section chatbots.commonConf

2.4. Add following config

chatbots.nlu.complex-models-limit: Integer

2.5. Commit changes and push to configuration repository

3. Livechat API proxy configuration (optional)

In this version, we introduced the ability to use HTTP proxy to communicate with the Livechat API.

Please follow steps below if you want to use proxy.

2.2. Please open ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml in Text Editor of your choice

2.3. Head to section chatbots.commonConf

2.4. Add following config

chatbots.channels-connector {
  livechat {
    proxy {
      host: "PROXY_HOST"
      port: PROXY_PORT
      username: "PROXY_USER"
      password: "PROXY_PASSWORD"
    }
  }
}

238

1. Speech-to-text service's configuration change

📘

It doesn't affect on-premise deployments.

📘

This configuration change is only required if chatbots.admin.speech-to-text exists.

1.2. Please open ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml in Text Editor of your choice

1.3. Head to section chatbots.commonConf

1.4. Replace chatbots.admin.speech-to-text with following config

chatbots.admin.speech-to-text {
  endpoint {
    hostname: HOSTNAME
    port: 6881
  }
}

1.5. Commit changes and push to configuration repository

237

1. New database chatbots-nlu-facade

nlu-facade application from now requires database.

1.1 Create new database in PostgreSQL Server by issuing following SQL command

CREATE DATABASE "chatbots-nlu-facade";

2. nlu-facade configuration changes

There are new mandatory configuration keys for nlu-facade application.

Please follow steps below to make sure nlu-facade connects to DB chatbots-nlu-facade

2.2. Please open ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml in Text Editor of your choice

2.3. Head to section chatbots.commonConf

2.4. Add following config

chatbots.nlu-facade.db.url: "jdbc:postgresql://DB_HOST:DB_PORT/chatbots-nlu-facade",
chatbots.nlu-facade.db.user: "PUT_USERNAME_HERE",
chatbots.nlu-facade.db.password: "PUT_PASSWORD_HERE"

2.5. Commit changes and push to configuration repository

$ git add ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml
$ git commit -m 'UPGRADE#237 1. Configure db in nlu-facade'
$ git push

3. Enable response cleaner if needed

Response cleaner is a mechanism that post-processes bot response before returning it to user. It is responsible for:

  • removing whitespaces at the beginning and end
  • replacing multiple spaces with one
  • cleaning whitespaces before punctuation mark
  • replacing multiple punctuation marks with last one

In this version, we've disabled it by default. To keep using it, you have to override config setting.

3.2. Please open ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml in Text Editor of your choice

3.3. Head to section chatbots.commonConf

3.4. Add following config

chatbots.utils.response-cleaner.enabled: true

3.5. Commit changes and push to configuration repository

4. New application storage

Storage is a new application. App is enabled by default, so no additional steps are required.

4.1 Resources requirements

By default, following resources are required on the environment.

resources:
    requests:
      cpu: "1"
      memory: "1Gi"
    limits:
      cpu: "1"
      memory: "1Gi"

Please adjust resources requirements based on owned platform size - Platform Scaling.

4.2 New database chatbots-storage

4.2.1 Create new database in PostgreSQL Server by issuing following SQL command
CREATE DATABASE "chatbots-storage";
4.2.2 Add storage's database configuration section

Add following properties to ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml in section chatbots.commonConf

chatbots.storage.db.url: "jdbc:postgresql://DB_HOST:DB_PORT/chatbots-storage",
chatbots.storage.db.user: "PUT_USERNAME_HERE",
chatbots.storage.db.password: "PUT_PASSWORD_HERE"

4.3 Disk requirements

Depending on configured data source and monthly voice-based conversations traffic, please make sure that attached disk is capable of storing such an amount of data.
For more details, please refer to Storage.

235

1. CPU requirements for emerging-intents increases

🚧

4 additional CPUs might be required

If emerging-intents service is enabled on your environment (disabled by default) then you'll need 4 additional CPUs.

Resources requirements for emerging-intents changed from:

resources:
    requests:
        cpu: "0.1"
        memory: "1Gi"

    limits:
        cpu: "1"
        memory: "2Gi"

to

resources:
    requests:
        cpu: "4"
        memory: "1Gi"

    limits:
        cpu: "12"
        memory: "2Gi"

So please make sure there's enough resources on Kubernetes cluster to accommodate the change.

234.0.74

1. web-chat configuration changes

There are new mandatory configuration keys for web-chat application.

Please follow steps below to make sure web-chat channel works properly

📘

This step is optional if web-chat application is disabled. If it's not set the web-chat won't be displayed as an available channel.

1.2. Please open ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml in Text Editor of your choice

1.3. Head to section chatbots.commonConf

1.4. Make sure chatbots.admin.web-chat-demo-url key is set and points to URL of web-chat application

1.5. If not set add new configuration key

chatbots.admin.web-chat-demo-url: https://WEB_CHAT_URL

1.6. Commit changes and push to configuration repository

$ git add ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml
$ git commit -m 'UPGRADE#234.19 1. set web-chat demo url'
$ git push

234

1. New index in chatbots-analytics database

Before upgrading to the new version, create a new index in chatbots-analytics database by issuing following SQL command

CREATE INDEX IF NOT EXISTS idx_session_company_id ON session_log(company_id);

Issuing this command manually will significantly smoothen the upgrading process.

233

1. New index in chatbots-analytics database

Before upgrading to the new version, create a new index in chatbots-analytics database by issuing following SQL command

CREATE INDEX IF NOT EXISTS idx_session_updated_at ON session_log(update_time);

Issuing this command manually will significantly smoothen the upgrading process.

232

1. Settings moved from config to UI

The following settings have been moved to the System module in Admin panel:

  • chatbots.admin.conversation-history-enabled
  • chatbots.admin.open-ai.api-key
  • chatbots.admin.open-ai.org-id
  • chatbots.admin.invitations.enabled
  • chatbots.admin.invitations.expire-after

Those config settings will no longer be considered by the application. If you override any of those settings, please remove it (or comment-out) from your config to avoid confusion.

231

1. web-chat's external API

The configuration key that holds OTP secret has been renamed from chatbots.web-chat.external-api.otp-secret to chatbots.web-chat-api.otp-secret.

228

1. Change hooks configuration in thread-coordinator and web-chat

1.1. thread-coordinator configuration

  • chatbots.thread-coordinator.hooks.hook-receivers-urls renamed to chatbots.thread-coordinator.hooks.hooks-receivers
  • OTP secret need to be defined separately for each hook receiver URL
  • there is new optional field: chatbots.thread-coordinator.hooks.hooks-messages-max-age
chatbots.thread-coordinator.hooks {
  hooks-receivers: [
    {
      url: "https://REACT_HOOKS_SERVER_URL/automate"
      otp-secret: "XXX"
    }
  ]  
}

1.2. web-chat configuration

  • chatbots.web-chat.hooks.hooks-api-config renamed to chatbots.web-chat.hooks.hooks-receivers
  • chatbots.web-chat.hooks.hooks-receivers is now a list of URLs with OTP secrets
chatbots.web-chat.hooks {  
  hooks-receivers: [
    {
      url: "https://REACT_HOOKS_SERVER_URL/webchat"
      otp-secret: "XXX"
    }
  ]
}

The format of message web-chat hooks messages has been changed. It's breaking change. It's possible that, some events in old format might be present in the queue, causing the message will be lost and there might be some parsing failures in the logs.

🚧

(Optional) If there are parsing failures after deploy in automate.webhooks.webchat queue, then please purge the queue.

225

1. DB HTTP connector is a new optional application.

By default, the application is disabled and won't be deployed. To enable it, modify the following configuration keys in [ENV_NAME]/kubernetes/helm/automate/values.yaml

automate:
  chatbots:
    apps:
      dbHttpConnector: true

2. Migrate MS Teams bots to Channels

MS Teams Bot service has been removed - it needs to be disabled in custom config for environments with MS Teams.

Cron job changes

We have renamed RefreshMSTeamsSubscriptions cron job to RefreshChannelsSubscriptions.
From now on, it's a system job. There is no need to configure it manually for environments with MS Teams. Please remove the following configuration if present:

chatbots.cron-orchestrator {
  cron-jobs: [      
    {
      name: RefreshMSTeamsSubscriptions,
      uuid: "c06156ed-ccb1-4d85-b28a-8319bd93613b",
      interval: "0 */5 * ? * *",
      message-timeout: 3m
    }
  ]
}
Enable MS Teams Channel

The service that takes over the communication with MS Teams is Channels Connector. Bots configuration has been moved from config to the UI - Channels module.

In order to enable MS Teams channel, please provide the configuration:

  chatbots.channels-connector.ms-teams {
    enabled: true
    private-key: "XXX",
    client-secret: "XXX"
    tenant-id: "XXX"
    client-id: "XXX"
  }

224

1. Unsync NLU after the deploy

Due to the new intentizer and keywords deployment, all NLUs will have to be retrained. To mark all NLUs "Not ready",
following SQL script on DB chatbots-admin has to be triggered.
Please run it only when deployment is verified as successful, because it cannot be rolled back.

UPDATE nlu_models SET status = 'OutSync';

2. Delete all intentizer (simple) models from RedisAI

The new version of the intentizer introduces a generation of drastically smaller models.
To remove any "loose" or "forgotten" models run following command from any of RedisAI cluster node.
Please run it only when deployment is verified as successful, because it cannot be rolled back.

$ redis-cli --cluster call localhost:6379 keys '*::intentizer*' | xargs -L 1 -d'
' redis-cli --cluster call localhost:6379 del

3. Restart RedisAI cluster in order to free up memory

Delete each redis-ai pod independently - one by one, waiting until the previous is marked as healthy and then proceeding with next.

4. New application platform-api

Platform API is new optional application.

Steps

Please follow steps below if you want to turn it on.

1. Enable application deployment

By default, the platform-api application is disabled and won't be deployed. To enable it modify following configuration keys in [ENV_NAME]/kubernetes/helm/automate/values.yaml

chatbots:
  apps:
    platformApi: true
2. Expose Platform API outside Kubernetes

Platform API needs to be accessible from the outside of Kubernetes to serve it's purpose.

2.1 Add following entry to [ENV_NAME]/kubernetes/ingress/automate_ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: envname-automate-ingress
spec:
  tls: # add spec.tls section
  - hosts: # include URIs to be secured by the certificate
    - platform-api-envname.automate.example.com
    secretName: tls-wildcard-example-com-secret # TLS certificate secret name that will be added in the next step
  rules:
  - host: platform-api-envname.automate.example.com
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: platform-api
              port:
                number: 5780
2.2 Install ingress configuration on Kubernetes cluster & configure any proxy servers in front of it.
kubectl apply -f [ENV_NAME]/kubernetes/ingress/automate_ingress.yaml

222

1. Webchat Connectivity changes

Removed connections:

webchat application no longer connects to bot-integration service from SentiOne Listen & React.
The configuration chatbots.senti-one-api is not used in webchat configuration anymore.
More details can be found here.

New connections:

webchat now connects to: hooks-server and thread-coordinator.
hooks-server URL need to be defined in chatbots.web-chat.hooks.hooks-api-config.url.
More details can be found here.

2. Override the default OTP secret for Webchat external API

Generate a new secret and set it in [ENV_NAME]/kubernetes/helm/automate/chatbots/common.conf

chatbots.web-chat {
  external-api {
    otp-secret: "XXX"
  }
}

The same secret should be set for L&R by modifying the following key in sentione.config.configYaml in [ENV_NAME]/kubernetes/helm/automate/values.yaml

webchat:
  otpSecret: "XXX"

3. Twilio/Vonage - React integration changes (optional)

📘

If React is used to provide human agent service to Twilio/Vonage conversations then the steps below have to be followed

3.2 Amend ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml

Change following section in chatbots.config.commonConf

chatbots.channels-connector.hooks-server-url: https://REACT_HOOKS_SERVER_URL

More details about react hooks server can be found here

3.3 Commit changes and push to configuration repository

$ git add ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml
$ git commit -m 'UPGRADE#222 3. sets hooks-server url used by channels-connector'
$ git push

4. React hooks-server is no longer required for setting-up Twilio/Vonage chatbots (optional)

📘

Primary receiver of Twilio/Vonage webhooks is now channels-connector service which implies that hooks-server application is now optional and no needed if no Human Agent serviced sources are integrated within SentiOne React.

🚧

Please follow the steps below only if you want to save resources and no react integration with these sources is used: Facebook, Twilio, Vonage, Twitter

4.2 Amend ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml

Change following key:

sentione.hooksServer.enable: false

4.3 Commmit changes and push to configuration repository

$ git add ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml
$ git commit -m 'UPGRADE#222 4. disables hooks-server'
$ git push

5. Twilio webhooks URL changes

🚧

Following steps should be performed after platform upgrade

Twilio webhook events should now be delivered to channels-connector service.

5.1 Log in to automate

5.2 Navigate to Channels module

5.3 Click Edit icon on any of the Twilio channels.

5.4 Copy Webhook URL to clipboard

5.5 Log in to twilio.com

5.6 Navigate to Phone numbers

5.7 Set Webhook URL for messaging service to be the one you copied in step 5.4

5.8 Repeat the steps for all Twilio channels / numbers.

6. Vonage webhooks URL changes

🚧

Following steps should be performed after platform upgrade

Vonage webhook events should now be delivered to channels-connector service.

6.1 Log in to automate

6.2 Navigate to Channels module

6.3 Click Edit icon on any of the Vonage channels.

6.4 Copy Webhook URL & Webhook Status URL to clipboard

6.5 Log in to vonage.com

6.6 Navigate to Applications

6.7 Set Webhook URL to match URLs copied in step 6.4

6.8 Repeat the steps for all Vonage channels / numbers.

7. Removed URL and HMAC key for Channels

We have removed two properties from chatbots.channels:

  • hooks-server-url,
  • vonage-repeat-hmac-key.

These changes are related to aforementioned Twilio/Vonage changes.

From now on, these properties are not supported.

7.2 Amend ENVIRONMENT_NAME/kubernetes/helm/automate/values.yaml

Remove following sections in chatbots.config.commonConf

chatbots.channels.hooks-server-url
chatbots.channels.vonage-repeat-hmac-key

218

1. Set URLs and HMAC key for Channels

We've added webhook URLs generator. Based on configured properties, webhooks URLs will be generated and displayed on appropriate channels forms.

📘

Please override below properties before upgrading the platform.

hooks-server-url is only required for environments with configured HooksServerUrl.

chatbots.channels {
  channels-connector-url: "URL" 
  vonage-repeat-hmac-key: "XXX" # By default it is equal to Listen's onpremise hookServer.vonage.repeatHmacKey  
  hooks-server-url: "URL" # Optional 
}

217.0.24

📘

Healthchecks for slim-uploader and refinery applications

From this release (217.0.24) readiness and liveness healthchecks are enabled also for applications: slim-uploader and refinery, which are part of the sentione helm chart.

217

1. Migrate Facebook and WhatsApp bots to Channels

Facebook Bot and WhatsApp Bot services have been removed - they need to be disabled in custom config.

The service that takes over the communication with Facebook, WhatsApp etc. is Channels Connector.

Bots configuration have been moved from config to the UI - Channels module.

2. Set encryption key for Channels params

We've added encrypting Channels parameters (like API keys to external services) before saving them to the database.

Generate new encription key and place it in config. Key length should be 256 bits (32 characters).

chatbots.channels {
  channel-data-encryption-key: "XXX"
}

216

1. Elasticsearch script

We have added two new fields into to Statement schema, in order to update your current ES cluster there is a need to run a script from our repository.

More details about the upgrade steps soon.

2. Unsync NLU after the deploy

Due to the new Intentizer + RedisAI deployment, all NLUs will have to be retrained. To mark all NLUs "Not ready", following SQL script on DB chatbots-admin has to be triggered. Please run it only when deployment is verified as successful, because it cannot be rolled back.

UPDATE nlu_models SET status = 'OutSync';

3. Configure RefreshMSTeamsSubscriptions cron job

We have removed RefreshMSTeamsSubscriptions cron job from system jobs. From now, RefreshMSTeamsSubscriptions has to be defined in configuration.

WHERE?

Environments where ms-teams-bot are deployed should have configured RefreshMSTeamsSubscriptions cron job using following configuration.

chatbots.cron-orchestrator {
  cron-jobs: [      
    {
      name: RefreshMSTeamsSubscriptions,
      uuid: "c06156ed-ccb1-4d85-b28a-8319bd93613b",
      interval: "0 */5 * ? * *",
      message-timeout: 3m
    }
  ]
}

📘

Please make sure that on all environments, which don't have ms-teams-bot deployed, queues automate.job.msteams.subscription are purged.

214

1. Reddit Domain Category

Issue ID: DEV-14830

WHERE?
Environments where Listen crawlers are used

Apply SQL script on chimeo (new-web) database AFTER THE DEPLOY.

do $$
    declare
        domain_exists boolean := false;
    begin

        select true from urldomain where host_name = 'www.reddit.com' INTO domain_exists;

        if not found then
            INSERT INTO urldomain (id, ip, allow_redirect_to_host, allow_subdomains, archived, automatic_learn_count, charset, commentsapiname, crawl, created_at, custom_cookie, deactivation_date, from_auto_search, from_blog_search, group_id, host_name, important, kindness, lang, learn_by_generic_to_configurable, learning_date, learning_flow_state, manual_profile, max_depth, modified_at, name, never_crawl, no_statements_sites_to_learn, no_statements_sites_to_reset, notes, path_after_host, posts_page_link, profile, robotstxt, seo_moz_domain_authority, topics_page_link, user_agent, ignore_encoding, average_posts_per_month, monthly_uniqueurls, average_page_views, average_time_on_site, bounce_rate, data_month, seo_moz_page_authority, estimated_visits, sites_with_statements, sites_without_statements, fraction_of_whole_host, always_try_commentsapi, banned_hosts, ignore_robotstxt, version, manual_kindness, excluded_subdomains, excluded_paths_after_host, last_modified_by, accepted_languages, too_long_statements_error, max_posts_per_page, modified_by_user_at, proxy_host, proxy_port, problem, statistics_updated_at, queue_restart_interval, allow_different_top_level_domain_links, search_profile, only_private, country, download_mode, inactivity_reason) VALUES (74, null, null, false, false, null, 'UTF-8', null, false, '2023-03-15 12:45:33.403000 +00:00', null, null, null, null, 44, 'www.reddit.com', 0, 10000, 'en', false, null, null, false, null, '2023-03-15 13:25:45.791000 +00:00', 'https://www.reddit.com', false, null, null, null, null, null, 'eNp9k9tugzAMht+F6z1B76quSGithlh3kKZdWMFQq8FBiWk7TXv3BbK1AardIOX7fbb5SiwqY8u3HGSfLJLkLqHRgwUtg85uwwJbDQq91JOgliAYGUMne2NnYBRQGR+RJTayQkrj/SRWoMtZyMBXozDvHxdhR6JvxHkhPLkIt8aR0DG2ZOzEgh6RGiZGzielxn+e/Chj4YCfJz/ckMOFksK8H24oVLN3z6HGmGriQ4E1GZ7SlelajeHdeq+NZ1HvvYnbWWBXGdv4mg3/OQPXLlRYEZfbTgv5SBk/MhZDecmiAu2wP4bcYkXnYN1gSRC3sb0COIKADXaytwhlStZJbpxMthjUDfwj9oKb0em+Ai2mBxzwzrSkopEM9QN3oPuM7tKhvz0FEk7qAkEpbGUZzsS9khc7mfh1TkzTs3QY7+9s/axSa5o1K1MS13FF2bzIrHy2evT39FtLSXuwPivduevWrF8h16NuzsWUaaOGTfev7x904FAw', null, null, null, null, false, null, null, null, null, null, null, null, null, null, null, null, false, null, false, 0, false, null, null, '[email protected]', null, false, null, '2023-03-15 13:25:45.789000 +00:00', null, null, false, null, null, false, null, false, null, 'HttpClientMode', null);
        else
            UPDATE urldomain SET group_id = 44 WHERE host_name = 'www.reddit.com';
        end if;
    end $$

2. hookServer.publicUrl config parameter change

📘

This change doesn't affect existing environments, so nothing has to be changed.

📘

This change has been also backported to Automate 213.0.31.

Existing config property used for defining public URL of Sentione's hook-server has become polymorphic.
It can now both accept single string value as well as list of string values. Thanks to this change, hook-server can be exposed on multiple different URLs.

📘

Some sources (like Twitter) use this property to register webhooks subscription. In this scenario - first URL from the list is going to be used.

To make a use of this property modify following key in sentione.config.configYaml in [ENV_NAME]/kubernetes/helm/automate/values.yaml using one of two possible options:

  1. as string
hookServer:
    publicUrl: "https://sentione-webhooks-url.com"    
  1. as list of strings
hookServer:
    publicUrl: ["https://sentione-webhooks-url.com", "https://alternative-sentione-webhooks-url.com"]   

213

1. Unsync NLU after the deploy

Issue: DEV-14857

Due to the RedisAI deployment, all NLUs will have to be retrained. To mark all NLUs "Not ready", following SQL script on DB chatbots-admin
has to be triggered. Please run it only when deployment is verified as successful, because it cannot be rolled back.

UPDATE nlu_models SET status = 'OutSync';

2. Upgrade ElasticSearch cluster from 6.8 to 7.17.9

This is major upgrade of document database used for storing chatbot transcriptions.

More details about the upgrade steps soon.

3. Install RedisAI

There are some major changes to NLU services which now require installation of RedisAI cluster.

More details about the installation process can be found in external-services/redisai-installation

212

1. Conditional update script bug has been fixed

Issue ID: DEV-14883

Mentions from social media like Instagram & Facebook were affected by a bug which could cause certain properties to be wiped out during metadata refresh.

In order for fix to be effective - following manual steps has to be followed.

Steps

1. Cloning GIT repository with ElasticSearch Ansible scripts in $HOME directory
$ cd ~
$ git clone https://repo-ext.sentione.com/public/external-services.git
Cloning into 'external-services'...
Username for 'https://repo-ext.sentione.com': YOUR_GIT_USERNAME
Password for 'https://[email protected]@repo-ext.sentione.com':

🚧

If you already cloned the repo - please pull latest changes!

2. Navigate to $HOME/external-services/elasticsearch/6.8.23/scripts
$ cd ~/external-services/elasticsearch/6.8.23/scripts
3. Run storeScripts.sh
$ ./storeScripts.sh ELASTICSEARCH_HOSTNAME ELASTICSEARCH_PORT ELASTICSEARCH_USERNAME ELASTICSEARCH_PASSWORD ELASTICSEARCH_CERTIFICATE_PATH

Example

$ ./storeScripts.sh elastic-master-host1 9200 esuser espassword ~/automate-config/production/external-services/elasticsearch/elastic-stack-ca.pem
Storing commonValuesUpdateScriptPain.painless...
Storing conditionalUpdate.painless...
Storing dayOfWeekIntScriptFieldPain.painless...
Storing dayOfWeekScriptFieldPain.painless...
Storing hourOfDayFilterPain.painless...
Storing hourOfDayScriptFieldPain.painless...
Storing opinionUpdate.painless...
Storing removeAndAddTagsScriptPain.painless...

211

1. New application channels-connector

Channels connector is new optional application.

Steps

Please follow steps below if you want to turn it on.

1. Enable application deployment

By default, the channels-connector application is disabled and won't be deployed. To enable it modify following configuration keys in [ENV_NAME]/kubernetes/helm/automate/values.yaml

sentione:
  channelsConnector: 
    enable: true
2. Expose Channels connector bot on public URL

Channels connector needs to be accessible from the outside.

This means that this application needs to be accessible from public internet in order to work properly.

2.1 Add following entry to [ENV_NAME]/kubernetes/ingress/automate_ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: envname-automate-ingress
spec:
  tls: # add spec.tls section
  - hosts: # include URIs to be secured by the certificate
    - channels-connector-envname.automate.example.com
    secretName: tls-wildcard-example-com-secret # TLS certificate secret name that will be added in the next step
  rules:
  - host: channels-connector-envname.automate.example.com
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: channels-connector
              port:
                number: 5782
2.2 Install ingress configuration on Kubernetes cluster & configure any proxy servers in front of it.
kubectl apply -f [ENV_NAME]/kubernetes/ingress/automate_ingress.yaml

210

1. New application ms-teams-bot

MS Teams bot is new optional application.

Steps

Please follow steps below if you want to turn it on.

1. Enable application deployment

By default, the ms-teams-bot application is disabled and won't be deployed. To enable it modify following configuration keys in [ENV_NAME]/kubernetes/helm/automate/values.yaml

sentione:
  msTeamsBot: 
    enable: true
2. Expose MS Teams bot on public URL

MS Teams bot application receives and sends webhooks from/to Microsoft Teams.

This means that this application needs to be accessible from public internet in order to work properly.

2.1 Add following entry to [ENV_NAME]/kubernetes/ingress/automate_ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: envname-automate-ingress
spec:
  tls: # add spec.tls section
  - hosts: # include URIs to be secured by the certificate
    - ms-teams-bot-envname.automate.example.com
    secretName: tls-wildcard-example-com-secret # TLS certificate secret name that will be added in the next step
  rules:
  - host: ms-teams-bot-envname.automate.example.com
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: ms-teams-bot
              port:
                number: 5770
2.2 Install ingress configuration on Kubernetes cluster & configure any proxy servers in front of it.
kubectl apply -f [ENV_NAME]/kubernetes/ingress/automate_ingress.yaml

208

1. New application hooks-server

React Hooks Server is new optional application used by WhatsApp Bots.

📘

hooks-server application has been also backported to 207.0.17.

Steps

Please follow steps below if you want to turn it on

1. Enable application deployment

By default, the hooks-server application is disabled and won't be deployed. To enable it modify following configuration keys in [ENV_NAME]/kubernetes/helm/automate/values.yaml

sentione:
  hooksServer: 
    enable: true
2. Expose hook server on public URL

Hook server application receives webhooks coming from Third party services like Twilio, Facebook, Twitter etc.

This means that this application needs to be accessible from public internet in order to work properly.

2.1 Add following entry to [ENV_NAME]/kubernetes/ingress/automate_ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: envname-automate-ingress
spec:
  tls: # add spec.tls section
  - hosts: # include URIs to be secured by the certificate
    - hooks-server-envname.automate.example.com
    secretName: tls-wildcard-example-com-secret # TLS certificate secret name that will be added in the next step
  rules:
  - host: hook-server-envname.automate.example.com
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: hooks-server
              port:
                number: 8069
2.2 Install ingress configuration on Kubernetes cluster & configure any proxy servers in front of it.
kubectl apply -f [ENV_NAME]/kubernetes/ingress/automate_ingress.yaml
3. Add hookServer configuration section to config.yaml

Modify sentione.config.configYaml key in [ENV_NAME]/kubernetes/helm/automate/values.yaml by adding following section:

onpremise:
  hookServer:
     publicUrl: https://PUT_HOOKS_SERVER_PUBLIC_URL
     automate:
         # Please make sure it matches Chatbots config key: chatbots.thread-coordinator.hooks.otp-secret
         otpSecret: PUT_OTP_SECRET_HERE

2. New database chatbots-thread-coordinator

System now requires additional database for the purpose of thread-coordinator application.

Steps

1. Create new database in PostgreSQL Server by issuing following SQL command
CREATE DATABASE "chatbots-thread-coordinator";

3. New application thread-coordinator

Thread coordinator is new optional application used by WhatsApp Bots.

Steps

Please follow steps below if you want to turn it on

1. Enable application deployment

Modify following configuration keys in [ENV_NAME]/kubernetes/helm/automate/values.yaml

chatbots:
  apps:
    threadCoordinator: true
2. Add thread coordinator configuration section

Add following section to [ENV_NAME]/kubernetes/helm/automate/chatbots/common.conf

chatbots.thread-coordinator {
  db {
    url: "jdbc:postgresql://database-host:5432/chatbots-thread-coordinator",
    user: "PUT_USERNAME_HERE",
    password: "PUT_PASSWORD_HERE"
    max-connections: 20
  }
  
  hooks {
    hook-receivers-urls: ["https://REACT_HOOKS_SERVER_PUBLIC_URL/automate"]
    hooks-request-timeout: 30s
    # Please make sure it matches with OTP Secret set in SentiOne's config.yaml key: hookServer.automate.otpSecret
    otp-secret: "PUT_OTP_SECRET_HERE"
  }
}

206

1. Elasticsearch script

We have added two new fields into to Statement schema, in order to update your current ES cluster there is a need to run a script from our repository.

Steps

1. Cloning GIT repository with Ansible scripts
git clone https://repo-ext.sentione.com/public/external-services.git
Cloning into 'external-services'...
Username for 'https://repo-ext.sentione.com': YOUR_GIT_USERNAME
Password for 'https://[email protected]@repo-ext.sentione.com': YOUR_GIT_PASSWORD
2. Run existing mappings script

After pulling changes in elasticsearch repo run script with parameters

external-services/elasticsearch/6.8.23/indexScripts/updateExistingMappingInPlace/9-add-author-category.sh ELASTIC_HOST PORT [USERNAME] [PASSWORD]

3. Run index template script [NEW]

Step added: 30.11.2022

Run script with parameters

external-services/elasticsearch/6.8.23/indexScripts/updateAllIndexTemplates.sh ELASTIC_HOST PORT [USERNAME] [PASSWORD]

205

1. Docker image registry URL change

Docker image registry has changed from dockerhub.sentione.com to harbor-vm-proxy.sentione.com

In order to upgrade to new version of the platform you'll have to create new secret for pulling images from the new registry.

Default secret name for pulling images is set inside automate's HELM package values.yaml and have following values:

nlu:
    imagePullSecrets:
    - name: "sec-harbor-vm-proxy.sentione.com"
chatbots:
    imagePullSecrets:
    - name: "sec-harbor-vm-proxy.sentione.com"
sentione:
    imagePullSecrets:
    - name: "sec-harbor-vm-proxy.sentione.com"

If you override these values in your deployment you'll have to update commands below accordingly.

Steps

  1. Please execute following commands on your Kubernetes clusters:
# creating secret type object named 'sec-harbor-vm-proxy.sentione.com' - enabling access to SentiOne docker registry
kubectl create secret \
docker-registry sec-harbor-vm-proxy.sentione.com \
--docker-server=harbor-vm-proxy.sentione.com \
--docker-username=USERNAME \
--docker-password=PASSWORD \
[email protected] \
--namespace sentione
  1. Verify secret has been successfully created
# veryfying if secret type object has been created in sentione namespace
kubectl get secrets -n sentione sec-harbor-vm-proxy.sentione.com

NAME                               TYPE                             DATA   AGE
sec-harbor-vm-proxy.sentione.com   kubernetes.io/dockerconfigjson   1      2d17h

2. Docker registry key structure has changed.

Structure & Name of following keys from values.yaml has changed:

  • chatbots.docker_registry
  • sentione.docker_registry
  • nlu.docker_registry

Steps

  1. If configuration for your environment overwrites default docker registry (eg. because of using self-hosted proxy),
    please update your values.yaml accordingly to changes listed below.

Chatbots

  • Before:
    chatbots.docker_registry: custom-charts-repo.com
    
  • After:
    chatbots.dockerRegistry:
      host: custom-charts-repo.com
      path:
        application: /chatbots
    

SentiOne

  • Before:
    sentione.docker_registry: custom-charts-repo.com
    
  • After:
    sentione.dockerRegistry:
      host: custom-charts-repo.com
      path:
        application: /sentione
        thirdParty: /sentione
    

NLU

  • Before:
    nlu.docker_registry: custom-charts-repo.com
    
  • After:
    nlu.dockerRegistry:
      host: custom-charts-repo.com
      path:
        application: /nlu
    

3. Webchat is now using Redis

Redis is used for delivering websocket messages across different instances of webchat application. Webchat connects to Redis using host and port defined in chatbots.concurrency secion of config. It's the same config that is already used by gateway and dialog manager applications.

Default config:

chatbots.concurrency {
  redis {
    host: "redis"
    port: 6379
  }
}

You can override default config by adding this section to chatbots.config.commonConf key in customValues.yaml

4. Webchat is now using postgres database

Database has to be created manually by executing script:

CREATE DATABASE "chatbots-web-chat";

Default config:

chatbots.web-chat.db {
  url: "jdbc:postgresql://db:5432/chatbots-web-chat",
  user: "postgres",
  password: "root"
  max-connections: 20
}

You can override default config by adding this section to chatbots.config.commonConf key in customValues.yaml

202

  • Text to speech integration (optional - does not affect on-premise deployments)
    • There's new experimental feature of integrating with Text To Speech service
    • To set it up please add following section to chatbots.config.commonConf key in customValues.yaml
      chatbots.admin.text-to-speech {
        base-url: "http://text-to-speech-service-host:PORT"
          services {
            pl: "techmo-dev" # Endpoint name for polish language
            en: "techmo-dev-en" # Endpoint name for english language
          }
       }
      
  • Speech to text integration (optional - does not affect on-premise deployments)
    • There's new experimental feature of integrating with Speech To Text service (via GRPC)
    • To set it up please add following section to chatbots.config.commonConf key in customValues.yaml
    chatbots.admin.speech-to-text {
      services {
        pl { # Configuration for ASR service for polish language
            hostname: "HOSTNAME" # Hostname of GRPC service hosting Speech To Text endpoint 
            port: 6881 # Port of GRPC service hosting Speech to Text Endpoint
        }
        
        en { # Configuration for ASR service for english language
             hostname: "HOSTNAME"
             port: 6882
        }
        
        es { # Configuration for ASR service for spanish language
             hostname: "HOSTNAME"
             port: 6883
        }
      }
    }
    

199

  • SentiOne application (web, refinery etc.) is added as optional dependency to automate HELM package
    • On environments where SentiOne React was not needed you'll have to add following section to values.yaml
      sentione:
        enabled: false
      
    • This change was also backported to previous releases:
      • 197.0.9
      • 198.0.3
  • Installation method changes. Instead of installing individual components (nlu, sentione, chatbots) you should install one aggregated package called Automate. More details in INSTALLATION.md

195