В рамках любого сценария АФ возможно использование SQL запросов. В настоящее время поддерживаются следующие СУБД:
MySQL
MS SQL Server
PostgreSQL
SQL запросы поддерживаются во всех облачных установках AutoFAQ. Если вы используете AutoFAQ, развернутый не в облаке, пожалуйста, уточните у администратора наличие необходимой компоненты.
Для подключения к СУБД используется шаг вызова внешнего сервиса bot-platform-db-adapter
c телом запроса, состоящим из 3-х обязательных полей:
db_url
- строка подключения к СУБД в форматеdriver://user:password@host:port/database
sql_query
- текст SQL запросаtimeout
- количество секунд ожидания ответа от СУБД
Возможные драйвера для подключения к СУБД (поле driver
):
mysql
- подключение к MySQLmssql
- подключение к MS SQL Serverpgsql
- подключение к PostgreSQL (начиная с релиза 4.3.0)при необходимости подключения к прочим СУБД соощите, пожалуйста, по адресу support@autofaq.ai
Сервис возвращает матрицу ответа СУБД построчно - каждая строка матрицы содержит строку ответа СУБД. Для разбора ответа можно использовать шаг выполнитьJs
с JavaScript кодом.
Пример сценария с использованием подключения к PostgreSQL для поиска отметки пользователя по его логину:
// Пример сценария с использованием SQL запроса на получение данных о пользователе в СУБД PostgreSQL // // Подготовка SQL запроса в JS коде для простоты редактирования выполнитьJs(""" // строка подключения в формате var db_url = "pgsql://userName:secretPassword@autofaq.ai:5432/databaseName"; // строка SQL запроса с использованием логина пользователя из системной переменной {userLogin} var sql_query = "SELECT * FROM \"bot-platform\".\"CHANNEL_USER\" WHERE \"SERVICE_ID\" = 'ХХХХХХ-ХХХХ' AND \"LOGIN\" = '{userLogin}'" // время ожидания ответа СУБД var timeout = 3; // тело запроса var query = { 'db_url': db_url, 'sql_query': sql_query, 'timeout': timeout }; // на выходе строковое представление тела запроса var exit = {'query':JSON.stringify(query)}; exit; """) + // запрос в СУБД коннектор вызвать.внешнийСервис("http://bot-platform-db-adapter:80/api/v1/query", "POST").сЗаголовками(("Content-Type", "application/json")).сТеломСообщения("{query}").сохранитьРезультатКакСтроку("answer")+ // обработка ошибок если("{http_code} > 200").то( комментарий("Ошибка SQL запроса: {http_code}, {answer}")+ сообщениеПользователю.сШаблоном("Произошла ошибка. Попробуйте спросить немного позже.")+ завершить )+ // разбор ответа выполнитьJs(""" var answer_parsed = JSON.parse(answer); if (answer_parsed.length > 0) { var state = answer_parsed[0][9] == Undefined ? true : answer_parsed[0][9]; } else { var state = false; } var exit = {'state':state}; exit; """) + если("state == false").то( сообщениеПользователю.сШаблоном("Простите, но вы не прошли проверку")+ завершить )+ сообщениеПользователю.сШаблоном("Вы прошли проверку.")+ завершить