Использование SQL запросов
В рамках любого сценария АФ возможно использование 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("""
// тело запроса: строка подключения в формате RFC DB URI, SQL запрос, таймаут на ожидание ответа
var query = {
db_url: "pgsql://userName:secretPassword@autofaq.ai:5432/databaseName",
sql_query: "SELECT * FROM \"USER\" WHERE SERVICE_ID = '1234' AND LOGIN = 'userLogin'",
timeout: 3
};
// на выходе строковое представление тела запроса
var exit = {query: JSON.stringify(query)}
exit;
""") +
// запрос в СУБД коннектор
вызвать.внешнийСервис("http://db-adapter:80/api/v1/query", "POST").сЗаголовками(("Content-Type", "application/json")).сТеломСообщения("{query}").сохранитьРезультатКакСтроку("answer")+
// обработка ошибок
если("{http_code} > 200").то(
комментарий("Ошибка SQL запроса: {http_code}, {answer}")+
сообщениеПользователю.сШаблоном("Произошла ошибка. Попробуйте спросить позже.")+
завершить
)+
// разбор ответа
выполнитьJs("""
var exit = {error: 0}
try {
var response = JSON.parse(answer);
if (response.status != 'ok') {
throw Error(JSON.stringify(response))
}
var rows = response.result
exit.ballance = rows[0]['Баланс']
exit.client_id = rows[0]['УЗ']
} catch(e) {
exit.error = JSON.stringify({message: e.message, stack: e.stack});
}
exit;
""")+
если("{error} != 0).то(
сообщениеПользователю.сШаблоном("Простите, ошибка {error}")+
завершить
)+
сообщениеПользователю.сШаблоном("Балланс клиента {client_id}: {ballance}")+
завершить