Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

В рамках любого сценария АФ возможно использование 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 - подключение к MySQL

  • mssql - подключение к MS SQL Server

  • pgsql - подключение к PostgreSQL (начиная с релиза 4.3.0)

  • при необходимости подключения к прочим СУБД соощите, пожалуйста, по адресу support@autofaq.ai

Сервис возвращает матрицу ответа СУБД построчно - каждая строка матрицы содержит строку ответа СУБД. Для разбора ответа можно использовать шаг выполнитьJs с JavaScript кодом.

Пример сценария с использованием подключения к PostgreSQL для поиска отметки пользователя по его логину:

// Пример сценария с использованием SQL запроса на получение данных о пользователе в СУБД PostgreSQL
// 
// Подготовка SQL запроса в JS коде для простоты редактирования
выполнитьJs("""

// строка подключения в формате RFC DB URI
var db_url = "pgsql://userName:secretPassword@autofaq.ai:5432/databaseName"

// строка SQL запроса с использованием логина пользователя из системной переменной {userLogin}
var sql_query = "SELECT * FROM \"USER\" WHERE SERVICE_ID = '1234' 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 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]['УЗ']
  exit.rows = JSON.stringify(rows)

} catch(e) {
  exit.error = 'error' + JSON.stringify({message: e.message, stack: e.stack});
}
exit;
""")+
если("error != 0).то(
	сообщениеПользователю.сШаблоном("Простите, ошибка сервиса {error}")+
	завершить
)+
сообщениеПользователю.сШаблоном("Балланс клиента {client_id}: {ballance}")+
завершить

  • No labels