# Express - Платформа BotX (Общее описание)
## Бот
### Создание
Бот создается через интерфейс в панели администратора корпоративного сервера
### Описание полей
* **id** [UUID] - уникальный идентификатор в системе BotX. Используется для идентификации в BotX и приложение бота.
* **app_id** [String] - уникальный текстовый идентификатор бота
* **url** [String] - ссылка на API бота
* **name** [String] - имя бота
* **description** [String] - описание
* **enabled** [Boolean] - включен/выключен бот
* **status_message** [String] - статус сообщение
* **secret_key** [String] - секретный ключ, генерируется в момент создания бота
* **proto_version** [Integer] - используемая версия протокола (BotX -> Bot)
### Пример бота
* **id**: "dcfa5a7c-7cc4-4c89-b6c0-80325604f9a4"
* **app_id**: "trello"
* **url**: "https://bot.com/api/v1/botx_trello"
* **name**: "Trello Bot"
* **description**: "Бот для работы с Trello досками"
* **enabled**: true
* **status_message**: "It works!"
* **secret_key**: "secret"
* **proto_version**: 4
## Свойства бота
### Редактирование
Перейти в интерфейс редактирования бота можно через страницу бота в панели администратора
### Доступные свойства:
* **allowed_data** (all|commands|none) (по умолчанию - commands) - определяет, какие типы данных может принимать бот.
* **all** - бот принимает все сообщения отправленные в чат
* **commands** - бот принимает сообщение только если его упомянули/заменшили.
* **none** - бот не принимает сообщений
* **allow_chat_creating** (true|false) (по умолчанию - false) - позволить боту создавать чаты
* **show_in_catalog** (true|false) (по умолчанию - true) - отображать бота в каталоге ботов
* **communication_availability** (corporate|trust|local|all) (по умолчанию - corporate) - определяет, какой тип юзеров может взаимодействовать с ботом
* **corporate** - корп. юзер с любого CTS
* **trust** - корп. юзер с трастового CTS
* **local** - корп. юзер с локального CTS
* **all** - любой юзер (в том числе с RTS)
* **use_botx_ca_cert** (true|false) (по умолчанию - false) - использовать SSL CA сертификат BotX при отправке запроса к боту
* для использования BotX SSL CA сертификата необходимо загрузить его в панели администратора на странице настроек сервера (/settings/server).
Примечание: должна быть загружена полная цепочка выдающих серверов, т.е. сертификат следующего вида
```
-----BEGIN CERTIFICATE-----
Intermediate CA
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Root CA
-----END CERTIFICATE-----
```
* для использования Botx SSL CA сертификата необходимо установить у бота аттрибут "Версия протокола" в значение 3 или выше
* после смены сертификата требуется перезагрузка контейнера
* после отключения свойства (если бот раннее использовал его) требуется перезагрузка контейнера
* **use_pds_token** (true|false) (по умолчанию - false) - если true, то при каждом обращение к боту генерируется JWT токен, который подписывается ПДС ключом. Полученный JWT токен передается при каждой отправке команды/запроса боту в HTTP заголовке `pds_token`
* **pds_key** (string) - ключ, которым будет подписываться PDS JWT токен. Ключ представляет из себя валидный Private RSA ключ. Подпись выполняется с использованием RS256 алгоритма
* **use_open_id_access_token** (true|false) (по умолчанию - false) - если true, то при обращение к боту юзером передается open_id токен юзера в заголовке `open_id_access_token`
## Разработка ботов
### Как приступить к разработке ботов, используя наши инструменты
1. Ознакомьтесь с документацией [BotX API](/s/E9MPeOxjP)
2. Ознакомьтесь с документацией [Bot API v4](/s/4IHk-iFDR)
3. Ознакомьтесь с документацией официального SDK [pybotx](https://github.com/ExpressApp/pybotx) и [async-box](https://github.com/ExpressApp/async-box) (шаблон бота)
4. Ознакомьтесь с примером простого бота на основе `async-box` - [todo-bot](https://github.com/ExpressApp/todo-bot)
При разработке бота вам могут понадобиться виджеты (многие из них уже реализованы в библиотеке [pybotx-widgets](https://github.com/ExpressApp/pybotx-widgets)). А для удобной работы с состоянием пользователя используйте библиотеку [pybotx-fsm](https://github.com/ExpressApp/pybotx-fsm).
---
#### Статьи
- [Что такое чат-боты и SmartApp](https://docs.express.ms/chatbot-and-smartapp/developer-guide/getting-started/what-is-chatbot-and-smartapp/)
#### Библиотеки
- [pybotx](https://github.com/ExpressApp/pybotx)
- [async-box](https://github.com/ExpressApp/async-box)
- [pybotx-fsm](https://github.com/ExpressApp/pybotx-fsm)
- [pybotx-smartapp-rpc](https://github.com/ExpressApp/pybotx-smartapp-rpc)
- [pybotx-smart-logger](https://github.com/ExpressApp/pybotx-smart-logger)
- [pybotx-smartapp-smart-logger](https://github.com/ExpressApp/pybotx-smartapp-smart-logger)
- [smartapp-bridge](https://github.com/ExpressApp/smartapp-bridge)
- [smartapp-sdk](https://github.com/ExpressApp/smartapp-sdk)
#### Примеры ботов
- [next-feature-bot](https://github.com/ExpressApp/next-feature-bot)
- [todo-bot](https://github.com/ExpressApp/todo-bot)
- [weather-smartapp](https://github.com/ExpressApp/weather-smartapp)
- [next-feature-smartapp](https://github.com/ExpressApp/next-feature-smartapp)
- [next-feature-smartapp-frontend](https://github.com/ExpressApp/next-feature-smartapp-frontend)