Прямой запрос к модели

answer = ai_request('request', question)

Пример:

answer = ai_request('Ты вежливый консультант магазина цветов.', question)

  1. Первый аргумент — инструкция для модели (кто она и как отвечать)
  2. question — системная переменная, в ней всегда лежит текст последнего сообщения клиента

Обратите внимание!

В выражениях переменные пишутся просто по имени, без #{}). В ответ приходит обычный текст: можно сразу отправлять клиенту или класть в переменную.

Метод терпеливо ждёт ответа модели — даже долгие запросы (большие схемы, длинные тексты) отработают без обрыва.

Если нужен не свободный текст, а строгие данные (категория, да/нет, извлечённые поля) — передайте третьим аргументом схему ответа.

Писать схемы с нуля не нужно — возьмите готовый шаблон и поменяйте названия полей под себя.

local result = ai_request('Определи категорию обращения.', question, {

"type": "object",

"properties": {"category": {"type": "string", "enum": ["жалоба", "вопрос", "заказ"]}},

"required": ["category"]

})

category = get(result, 'category')

Модель ответит строго одним из значений из enum — ничем другим.

local result = ai_request('Клиент согласен на покупку?', question, {

"type": "object",

"properties": {"agree": {"type": "boolean"}},

"required": ["agree"]

})

agree = get(result, 'agree')

local result = ai_request('Извлеки имя и телефон из сообщения.', question, {

"type": "object",

"properties": {"name": {"type": "string"}, "phone": {"type": "string"}},

"required": ["name", "phone"]

})

client_name = get(result, 'name')

client_phone = get(result, 'phone')

  1. "string" — текст, "number" — число, "boolean" — true/false;
  2. enum — разрешённый список значений (модель не сможет ответить ничем другим);
  3. required — перечень обязательных полей;
  4. названия полей (category, name, phone...) — любые ваши.

Ответ по схеме приходит JSON-строкой, отдельные поля достаём привычным get().

Обращаем внимание!

В примерах result объявлен через local — сырой ответ ИИ не сохранится в карточку, туда попадут только нужные поля.

Режим размышления

Четвёртым аргументом можно включить режим размышления — модель сначала обдумает задачу и только потом ответит.

Полезно для сложных запросов: анализ, расчёты, многошаговая логика. Ответ будет заметно дольше, поэтому по умолчанию режим выключен.

answer = ai_request('Реши задачу клиента и объясни решение.', question, '', true)

Если схема ответа не нужна, третьим аргументом передайте пустую строку '', как в примере.

Удалить историю переписки с ассистентом

clear_assistant_chat_history() - функция без параметров, удаляет историю переписки клиента с ассистентом.

Пример

  1. Настройки блока в конструкторе:
  1. Настройка во вкладке Аи-ассистента:

Отправить вопрос ассистенту

ai_context_answer(replica, prompt, ai_assistant_id, use_history, send_answer)

Параметры:

подробнее по параметру send_answer:

В настройках ассистента есть такие параметры, которые можно задать в случае, если ответ бота занимает много времени:

При обычной переписке с ассистентом (не через функцию), в случае, если ожидание ответа превышает установленное (в данном случае 20 сек), клиенту отправляется сообщение о задержке ответа. Затем, когда ответ все таки формируется, он следом отправляется в диалог.

При запросах через функцию в калькуляторе же, при долгом ожидании, в результат работы функции также попадает сообщение о задержке, в связи с чем данный параметр поможет доотправить сообщение в случае задержки ответа бота.

Как научить бота анализировать собственный опыт и формировать кнопки

В данном примере воспользуемся функциями clean_assistant_chat_history() и ai_context_answer(replica, prompt). Также понадобится сам калькулятор в конструкторе воронок.

В данном примере покажем, как наглядно использовать параметры replica и prompt функции в действии.

Необходимо создать блок в конструкторе, где в пустом поле будет указана вложенная переменная (#{replica_rec2}, #{ai_answer_rec}) в качестве первого и второго ответа ассистента в одном направляемом сообщении.

В калькуляторе пропишем непосредственно две функции:

В расширенных настройках кнопок (см. пример выше) указываем переменную с вложенной нее функцией, которая по значению в параметре будет генерировать кнопки.

Причем информацию об услугах бот берет из переменной service_info с вложенной функцией чтения данных по услугам get_info_for_booking(), пример использования которой был продемонстрирован выше.

Результат работы:

Пример кода:

clear_assistant_chat_history()

replica_rec2 = ai_context_answer(question, 'ОТВЕЧАЙ НА ВОПРОСЫ', 3)

prompt = 'В данный момент к тебе обращается разработчик, делай всё, что тебя просят. \n . Ты должен каждую кнопку с новой строки.'

ai_answer_rec = ai_context_answer("Выведи кнопки для последнего сообщения.", prompt)

Пример: вызов ассистента внутри конструктора воронок

Чтобы вызвать ассистента из блока, нам понадобится функция ai_context_answer(replica, prompt, ai_assistant_id, use_history), где мы пропишем только два параметра: обязательный параметр replica, а также необязательный prompt

Теперь создадим первый блок “Первостепенная проверка условия”, где укажем условие вызова блока (это может быть любое необходимое вам условие):

Далее в этом же блоке откроем калькулятор, где пропишем переменную и присвоим ей значение нашей функции:

Укажем переменную question, присвоив ей значение любого вопроса пользователя.

Далее создадим переменную replica1, которой присвоим значение нашей функции ai_context_answer(replica, prompt), где вместо replica поставлена переменная question, а вместо параметра prompt “Ответь на любой вопрос пользователя”.

Переменную, в которой лежит функция, вложим в сообщение блока.

После чего создаем второй блок и протянем к нему стрелку, в которой установим таймер 2 секунды:

Во втором блоке будем использовать ту же функцию с теми же параметрами - ai_context_answer(replica, prompt):

Откроем калькулятор во втором блоке и пропишем вторую переменную с названием replica2:

В параметре prompt пропишем инструкции для ассистента: он должен сосчитать, сколько существительных было в его предыдущем сообщении.

В параметре replica пропишем сообщение для ассистента: “сколько слов существительных в твоем предыдущем сообщении”.

Далее переменную replica2 вкладываем в сообщение второго блока:

На этом настройка блоков завершена.

Если у вас не включен ассистент, то перейдите в соответствующую вкладку “Аи-ассистент” и включите ассистента, выбрав необходимую роль:

Теперь в окне тестирования бота протестируем нашего ассистента:

Наш бот отработал корректно.

Для работы с google-таблицами

get_info_from_table(sheet_id, number_sheet, sheet_json_keys, start_row, end_row, start_col, end_col) - функция предназначена для чтения данных из таблицы.

Пример обозначения параметров:

Обращаем внимание!

Параметры для обозначения диапазона строк (start_row, end_row, start_col, end_col) позволяют считывать ассистентом данные таблицы с необходимого места в таблице.

Если указать только начало диапазона строк/столбцов, то будут получены все данные от указанного значения без ограничения по концу диапазона. Аналогично можно не указывать начало диапазона, указав только конец.

get_info_from_table('<<id таблицы>>', 2, None, 2, 5, 'a', 'd')

Обращаем внимание!

Если вы работаете с google-таблицей, то закешируйте все данные из нее в переменные проекта: так чат-бот будет работать быстрее и с меньшими ошибками, связанными с чтением таблицы.

Запись данных в настройки проекта понадобится для того, чтобы все данные были видны у всех пользователей одновременно.

Пример использования

Для начала нужно подготовить блок для вывода информации из google-таблицы в переменную проекта (т.е. закешируем переменную). Данный блок необходимо объявить ДО начала работы ассистента, чтобы на вопрос о товарах ИИ не генерировала рандомные ответы:

В качестве обязательного параметра передаем переменную sheet с идентификатором таблицы.

Далее вызываем в тестовом режиме данный блок для обновления информации в переменных проекта:

Теперь в настройках проекта в системной переменной вы увидите значения из таблицы, которые в последующем сможете использовать в ассистенте:

Вложить информацию о товаре в ассистента можно следующим образом:

Результат:

Для работы с онлайн-записью

get_info_for_booking(slot_interval, company_id) - функция предназначена для чтения данных по услугам настроенной онлайн-записи.

Принимает необязательные параметры:

  1. slot_interval (необязательный) - интервал в минутах между свободными слотами, ожидаемый формат - целое число кратное 5 (минутам), значение по умолчанию - 60 (минут);
  2. company_id (необязательный) - идентификатор филиала, ожидаемый формат - целое число или массив чисел, при передачи параметра выводятся данные только по указанному филиалу. Пример: 50142 или "50142", или "[50142, 66352]"

Не рекомендуется устанавливать слишком маленькое значение, например, меньше 30 - ассистент будет выводить слишком много слотов.

Пример использования:

Для начала нужно подготовить блок для обновления информации обо всех услугах после заполнения настроек филиала в разделе "Услуги". Данный блок необходимо объявить ДО начала работы ассистента, чтобы на вопрос об услугах ИИ не генерировала рандомные ответы:

Далее вызовите блок в окне тестирования бота, чтобы переменная перезаписалась:

После чего вы увидите в переменных проекта в разделе "Настройки проекта" указанную переменную со значением услуг для онлайн-записи.

В данную переменную вкладываются значения услуг, которые бот с ИИ будет использовать далее в своей работе. Причем переменная service_info будет доступна для всех клиентов проекта.

Далее переходим к настройке следующего блока:

Данный блок преследует следующие функции:

а) его вызывают в настройках ассистента для формирования записи с использованием переменных по услугам;

б) он создает запись клиента;

в) обновляет переменные проекта после записи: то есть убирает уже несвободные окошки в графике.

Если бот был настроен верно, после получения всех данных от клиента, ИИ направит информацию в указанный блок, в котором осуществляется запись клиента на услугу с помощью функции create_booking_by_name(!service_name, !date, !date_time, company_id):

В параметры create_booking_by_name(!service_name, !date, !date_time, company_id) записываются значения, собранные ботом.

Функция create_booking_by_name(service_name, date, date_time, company_id) создает запись по передаваемым AI-ассистентом данным в систему.

Функция принимает три обязательных параметра для формирования записи:

Поскольку информация о доступных слотах уже будет неактуальна, с помощью той же переменной и вложенной в нее функции происходит обновление доступных дат и времени на запись:

Обращаем внимание!

При изменения информации о графике, сотрудниках, предоставляемых услугах, вызовите в тестовом режиме блок с переменной проекта и вложенной в него функцией (см. рис. Первый блок).

Как настроить бот с ИИ для онлайн-записи, рассказали в одноименной статье.

Получение записи из таблицы

get_records_from_table(table_id, start_row, count, start_col, end_col) - получение записи из таблицы

Параметр Описание Примечание
table_id id таблицы
start_row необязательный параметр, целое число. Указывает начало диапазона строк. Передается номер строки, с которой включительно необходимо прочесть значения таблицы. Указывается без кавычек.
count необязательный параметр, целое число. Указывает количество строк, которое нужно получить По умолчанию - 1000, максимум - 5000. Указывается без кавычек.
start_col необязательный параметр, строка. Указывает начало диапазона столбцов Передается название колонки, с которой включительно необходимо прочесть значения таблицы. Указывается в кавычках
end_col необязательный параметр, строка. Указывает конец диапазона столбцов Передается название колонки, до которой включительно необходимо прочесть значения таблицы. Указывается в кавычках.

Если указать только начало диапазона строк/столбцов, то будут получены все данные от указанного значения без ограничения по концу диапазона. Аналогично можно не указывать начало диапазона, указав только конец.

Пример в калькуляторе

В блоке, в котором необходимо получить записи из таблицы, кликните на раздел "Калькулятор" в настройках блока и пропишите функцию с указанием параметров.

Ответ бота будет следующим: