Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
breakoutModewide
если("{http_code} != 200").то(
  комментарий("Данные пользователя не обновлены")+
  завершитьИПеревестиНаОператора 
)+
комментарий("Обовлены данные пользователя. Новые данные отправлены в CRM")+
завершить

Шаги

...

сообщениеПользователю.сШаблоном(*сообщение)  

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

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

Пример вывода простого текстового сообщения:

установки переменных

установитьПеременную(*переменная, *значение)

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

Code Block
breakoutModewide
сообщениеПользователю.сШаблономустановитьПеременную("Спасибо и всего хорошего") +	
...

Пример вывода текстового сообщения с переменой:

Code Block
breakoutModewide
сообщениеПользователю.сШаблоном("Сообщение от {userFullName}") +
...

Пример вывода текстового сообщения с HTML форматированием ссылки:

Code Block
breakoutModewide
сообщениеПользователю.сШаблоном("Пройдите по <a href='https://yandex.ru'>ссылке</a>") +
...

.сФайлами(*файлы)

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

Code Block
breakoutModewide
сообщениеПользователю.сФайлами(523).сШаблоном("Высылаю файл") - отправка файла с идентификатором 523 пользователю вместе с сопровождающим текстом
сообщениеПользователю.сФайлами(523, 524, 525).сШаблоном("Высылаю файл") - отправка нескольких файлов пользователю
сообщениеПользователю.сФайлами(523).сШаблоном("") - отправка файла пользователю без сопровождающего текста

Идентификатор файла копируется из формы прикладывания файла к документу.

...

Info

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

задатьПользователюВопрос(*сообщение).сохранитьРезультат(*переменная)  

Шаг отправки пользователю вопроса пользователю и ожидания ответа.

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

В качестве аргумента для сохранитьРезультат принимается название переменной, в которую сценарий поместит ответ пользователя. Если указанная переменная ранее не была определена в сценарии - сценарий создаст её.

Пример простого вопроса пользователю:

Code Block
breakoutModewide
задатьПользователюВопрос("На какую дату нужен пропуск ?").сохранитьРезультат("whatDay") +
...

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

Code Block
breakoutModewide
задатьПользователюВопрос("Как дела?").сохранитьРезультат("what") +
если("{what} != Хорошо").то(
  комментарий("А дела то не хорошо") +
  завершитьИПеревестиНаОператора 
) +
комментарий("Все отлично") +
завершить

Время ожидания ответа от пользователя устанавливается таймером сценариев, значение которого можно указать в разделе Настройки - Сценарии. Если ответ от пользователя не поступит в указанное время, сценарий будет завершен. После завершения сценарий по таймеру система отправит пользователю соотвествующее служебное сообщение, текст которого можно указать в разделе Настройки - Сценарии.

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

.сВариантамиОтвета(*варианты) 

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

Code Block
breakoutModewide
задатьПользователюВопрос("На какую дату нужен пропуск ?").сВариантамиОтвета("Сегодня", "Завтра").сохранитьРезультат("whatDay") +
...

.проверитьФормат(*формат, *сообщение)

Модификатор шага проверяет полученные от пользователя данные на соответствие шаблону. Шаблон задается регулярным выражением. В случае соответствия ответной реплики пользователя шаблону шаг передает данные далее, в обратном случае - выводит текст сообщения и ожидает получения корректной информации без ограничений по количеству попыток ввода.

Code Block
breakoutModewide
//  выражение для проверки, что введенная строка соотвествует формату даты вида 02.12.2021
задатьПользователюВопрос("Укажите дату").проверитьФормат("(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\\d\\d", "Не понял вас, повторите пожалуйста.").сохранитьРезультат("day")+

//  выражение для проверки, что введенная строка содержит адрес электронной почты
задатьПользователюВопрос("Напишите email").проверитьФормат("^\\S+@\\S+\\.[a-z]{2,}$", "Пожалуйста, введите корректный email").сохранитьРезультат("_email")+

запроситьФайл(*сообщение).сохранитьРезультат(*переменная)

Шаг запроса файла  у пользователя и записи его в переменную. В качестве аргумента шаг принимает текст просьбы или переменную с таким текстом. Файл будет сохранен в хранилище файлов диалога и будет доступен в указанной переменной.

Code Block
breakoutModewide
запроситьФайл("Приложите файл").сохранитьРезультат("file")+ +

Модификатор шага добавляет пользователю опцию пропуска отправки файла.

.можноПропустить(*сообщение)

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

Code Block
breakoutModewide
запроситьФайл("Приложите файл").можноПропустить("Пропустить") +
...

Шаги работы с внешними сервисами  

Шаги обращения к внешним сервисам и разбора полученных данных. В настоящее время поддерживается API вызовы REST и SOAP сервисов, планируется подключение к почтовым, FTP и прочим сервисам.

Функции операции:

вызвать.внешнийСервис(*адрес, *тип).сохранитьРезультат(*args)

Шаг вызова REST API сервисов. Данный шаг ожидает получение ответа в формате плоского JSON. Для работы с SOAP сервисами используется данный шаг с модификаторам, которые будут указаны ниже.

В качестве аргументов для вызвать.внешнийСервис принимаются адрес ендпонта и тип вызова. Поддерживаются основные типы вызовов - GET, POST, PUT, DELETE. В качестве адреса ендпойнта принимается строка с адресом или переменная, которая содержит данную строку.

В качестве аргументов для сохранитьРезультат принимается список пар из названия поля в полученном JSON и названия переменной, в которую сценарий сохранит полученное значение.

Пример GET запроса, из ответа которого будет выбрано 1 поле result

Code Block
breakoutModewide
вызвать.внешнийСервис("https://api.autofaq.ai/v1/ping","GET").сохранитьРезультат(("result", "answer_code")) +

Пример POST запроса с указанием адреса вызова из переменной, телом запроса и разбором двух полей из ответа - message и code

Code Block
breakoutModewide
установитьПеременную("post_url", "https://api.autofaq.ai/v1/ping") +
...
вызвать.внешнийСервис("{post_url}", "POST").сТеломСообщения("{query}").сохранитьРезультат(("message", "response_message"),("code", "response_code")) +
...

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

.сПараметрами(*args)

Модификатор шага вызова сервиса для передачи URL параметров запроса. Параметры передаются парами в формате название параметра - значение параметра. Значение параметра может быть указано текстом или переменной, которая содержит данный текст.

Code Block
breakoutModewide
установитьПеременную("user_token", "1234567890abcd") +
...
вызвать.внешнийСервис("{url}","GET").сПараметрами(("query","order"),("token","{user_token}")).сохранитьРезультат(("result", "answer_code")) +
...

.сЗаголовками(*args)

Модификатор шага вызова сервиса для передачи заголовков запроса. Заголовки передаются парами в формате название заголовка - значение заголовка. Значение заголовка может быть указано текстом или переменной, которая содержит данный текст.

Code Block
breakoutModewide
установитьПеременную("user_token", "1234567890abcd") +
...
вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8"),("Authorization","Bearer {user_token}")).сохранитьРезультат(("result", "answer_code")) +
...

.сТеломСообщения(*args)

Модификатор шага вызова сервиса для передачи тела запроса.

Поддерживаются форматы x-www-form-urlencoded и json. JSON передается кодированный в строку. Названия и значения параметров принимаются строкой или переменной, которая содержит эту строку.

Code Block
breakoutModewide
// передача JSON 
вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("Content-Type", "application/json")).сТеломСообщения("{\"name\":\"new document\", \"question\":\"new question\"}").сохранитьРезультат(("result", "answer_code")) +
// передача x-www-form-urlencoded
вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("Content-Type", "application/x-www-form-urlencoded")).сТеломСообщения("name=new document, question=new question").сохранитьРезультат(("result", "answer_code")) +

.сСоставнымТеломСообщения(*args)

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

Code Block
breakoutModewide
// передача файла через указание пути
вызвать.внешнийСервис("{url}", "POST").сСоставнымТеломСообщения(("content" -> "C:/docker.yml")).сохранитьРезультат(("result", "answer_code")) +
// передача файла через идентификатор файла в хранилище
вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("apikey","{apikey_var}")).сСоставнымТеломСообщения(("content" -> "{fileId}"),("type" -> "addAttach")).сохранитьРезультат(("result", "answer_code")) +

.сохранитьРезультатКакСтроку(*переменная)

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

Ответ может быть разобран далее по ходу сценария.

Code Block
breakoutModewide
// запрос и сохранение результата в строку
вызвать.внешнийСервис("{url}", "POST").сТеломСообщения("{query}").сохранитьРезультатКакСтроку("answer")+
// разбор ответа в JS коде (рассмотрено ниже)
выполнитьJs("""
  try {
    var answerParsed = JSON.parse(answer);
  } catch(err) {
    var answerParsed = {'results':[]};
  }
   
  var resultsLength = answerParsed.results.length;
  var exit = {'resultsLength ':resultsLength};
  exit;
""") +
...

Шаги установки переменных

установитьПеременную(*переменная, *значение)

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

Code Block
breakoutModewide
установитьПеременную("date", "Сегодня {new_date}")+

установитьПеременнуюВДиалог(*args)

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

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

Code Block
breakoutModewide
установитьПеременнуюВДиалог(
    ключ = "priority",                  - системное название задаваемой переменной, любой текст
    значение = "[\"v1\", \"v2\"]",      - значение, может быть пустым 
    название = "Выберите критичность",  - название, которое будет отображаться в интерфейсе, строка
    редактируемое = true,               - является ли поле редактируемым или нет, true/false
    показыватьОператору = true,         - показывать ли оператору в боковой панели, true/false
    обязательное = true,                - является ли обязательным для заполнения при закрытии диалога, true/false
    множественныйВыбор = true,          - можно ли выбрать несколько вариантов, применимо только для выпадающего списка, true/false
    тип = "Выпадающий список",          - тип задаваемой переменной, возможные значения в таблице ниже
    варианты = "{\"v1\": \"High\", \"v2\": \"Medium\"}" - список возможных значений, применимо только для выпадающего списка, можно задать как с помощью другой переменной, так и напрямую
)+

Список возможных типов с примерами использования:

...

Тип

...

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

...

Текст

...

Code Block
установитьПеременнуюВДиалог(
	ключ = "NonEditabletext",
    значение = "Нередактируемый текст",
    название = "Примечание",
    показыватьОператору = true,
    редактируемое = false,
    обязательное = false,
    тип = "Текст"
)
Code Block
установитьПеременнуюВДиалог(
    ключ = "textField",
    значение = "г.Москва Ул.Тверская",
    название = "Адрес",
    показыватьОператору = true,
    редактируемое = true,
    обязательное = true,
    тип = "Текст"
)

...

Число

...

Code Block
установитьПеременнуюВДиалог(
	ключ = "number",
    значение = "",
    название = "Возраст",
    показыватьОператору = true,
    редактируемое = true,
    обязательное = true,
    тип = "Число"
)

...

Выпадающий список

...

Code Block
установитьПеременную("priority", "{\"v1\": \"Blocker\", \"v2\": \"Critical\", \"v3\": \"Major\", \"v4\": \"Minor\"}")+
установитьПеременнуюВДиалог(
    ключ = "priority",
    значение = "[\"v1\", \"v2\"]",
    название = "Выберите критичность",
    редактируемое = true,
    показыватьОператору = true,
    обязательное = true,
    множественныйВыбор = true,
    тип = "Выпадающий список",
    варианты = "{priority}"
)
Code Block
установитьПеременнуюВДиалог(
    ключ = "severity",
    значение = "",
    название = "Выберите важность",
    редактируемое = true,
    показыватьОператору = true,
    обязательное = true,
    тип = "Выпадающий список",
    варианты = "{\"v1\": \"High\", \"v2\": \"Medium\", \"v3\": \"Low\"}"
)

...

Переключатель

...

Code Block
установитьПеременнуюВДиалог(
	ключ = "switcher",
    значение = "true",
    название = "Активный?",
    показыватьОператору = true,
    редактируемое = true,
    обязательное = true,
    тип = "Переключатель"
)

установитьПеременнуюПользователю(*переменная, *значение)

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

Можно установить значение одной из фиксированных переменных пользователя или произвольной переменной в составе payload. Сохранение данных пользователя позволит передавать данные между разными диалогами.

Code Block
// установка фиксированной переменной
установитьПеременнуюПользователю("userEmail", "vasya@mail.ru")+
// установка переменной из payload
установитьПеременнуюПользователю("userPayload.lastLoginTS", "{nowTimeStamp}")+date", "Сегодня {new_date}")+

...

установитьПеременнуюВДиалог(*args)

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

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

Code Block
breakoutModewide
установитьПеременнуюВДиалог(
    ключ = "priority",                  - системное название задаваемой переменной, любой текст
    значение = "[\"v1\", \"v2\"]",      - значение, может быть пустым 
    название = "Выберите критичность",  - название, которое будет отображаться в интерфейсе, строка
    редактируемое = true,               - является ли поле редактируемым или нет, true/false
    показыватьОператору = true,         - показывать ли оператору в боковой панели, true/false
    обязательное = true,                - является ли обязательным для заполнения при закрытии диалога, true/false
    множественныйВыбор = true,          - можно ли выбрать несколько вариантов, применимо только для выпадающего списка, true/false
    тип = "Выпадающий список",          - тип задаваемой переменной, возможные значения в таблице ниже
    варианты = "{\"v1\": \"High\", \"v2\": \"Medium\"}" - список возможных значений, применимо только для выпадающего списка, можно задать как с помощью другой переменной, так и напрямую
)+

Список возможных типов с примерами использования:

Тип

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

Текст

Code Block
установитьПеременнуюВДиалог(
	ключ = "NonEditabletext",
    значение = "Нередактируемый текст",
    название = "Примечание",
    показыватьОператору = true,
    редактируемое = false,
    обязательное = false,
    тип = "Текст"
)
Code Block
установитьПеременнуюВДиалог(
    ключ = "textField",
    значение = "г.Москва Ул.Тверская",
    название = "Адрес",
    показыватьОператору = true,
    редактируемое = true,
    обязательное = true,
    тип = "Текст"
)

Число

Code Block
установитьПеременнуюВДиалог(
	ключ = "number",
    значение = "",
    название = "Возраст",
    показыватьОператору = true,
    редактируемое = true,
    обязательное = true,
    тип = "Число"
)

Выпадающий список

Code Block
установитьПеременную("priority", "{\"v1\": \"Blocker\", \"v2\": \"Critical\", \"v3\": \"Major\", \"v4\": \"Minor\"}")+
установитьПеременнуюВДиалог(
    ключ = "priority",
    значение = "[\"v1\", \"v2\"]",
    название = "Выберите критичность",
    редактируемое = true,
    показыватьОператору = true,
    обязательное = true,
    множественныйВыбор = true,
    тип = "Выпадающий список",
    варианты = "{priority}"
)
Code Block
установитьПеременнуюВДиалог(
    ключ = "severity",
    значение = "",
    название = "Выберите важность",
    редактируемое = true,
    показыватьОператору = true,
    обязательное = true,
    тип = "Выпадающий список",
    варианты = "{\"v1\": \"High\", \"v2\": \"Medium\", \"v3\": \"Low\"}"
)

Переключатель

Code Block
установитьПеременнуюВДиалог(
	ключ = "switcher",
    значение = "true",
    название = "Активный?",
    показыватьОператору = true,
    редактируемое = true,
    обязательное = true,
    тип = "Переключатель"
)

...

установитьПеременнуюПользователю(*переменная, *значение)

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

Можно установить значение одной из фиксированных переменных пользователя или произвольной переменной в составе payload. Сохранение данных пользователя позволит передавать данные между разными диалогами.

Code Block
// установка фиксированной переменной
установитьПеременнуюПользователю("userEmail", "vasya@mail.ru")+
// установка переменной из payload
установитьПеременнуюПользователю("userPayload.lastLoginTS", "{nowTimeStamp}")+

...

Шаги переписки с пользователями 

сообщениеПользователю.сШаблоном(*сообщение)  

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

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

Пример вывода простого текстового сообщения:

Code Block
breakoutModewide
сообщениеПользователю.сШаблоном("Спасибо и всего хорошего") +	
...

Пример вывода текстового сообщения с переменой:

Code Block
breakoutModewide
сообщениеПользователю.сШаблоном("Сообщение от {userFullName}") +
...

Пример вывода текстового сообщения с HTML форматированием ссылки:

Code Block
breakoutModewide
сообщениеПользователю.сШаблоном("Пройдите по <a href='https://yandex.ru'>ссылке</a>") +
...

.сФайлами(*файлы)

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

Code Block
breakoutModewide
сообщениеПользователю.сФайлами(523).сШаблоном("Высылаю файл") - отправка файла с идентификатором 523 пользователю вместе с сопровождающим текстом
сообщениеПользователю.сФайлами(523, 524, 525).сШаблоном("Высылаю файл") - отправка нескольких файлов пользователю
сообщениеПользователю.сФайлами(523).сШаблоном("") - отправка файла пользователю без сопровождающего текста

Идентификатор файла копируется из формы прикладывания файла к документу.

...

Info

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

...

задатьПользователюВопрос(*сообщение).сохранитьРезультат(*переменная)  

Шаг отправки пользователю вопроса пользователю и ожидания ответа.

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

В качестве аргумента для сохранитьРезультат принимается название переменной, в которую сценарий поместит ответ пользователя. Если указанная переменная ранее не была определена в сценарии - сценарий создаст её.

Пример простого вопроса пользователю:

Code Block
breakoutModewide
задатьПользователюВопрос("На какую дату нужен пропуск ?").сохранитьРезультат("whatDay") +
...

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

Code Block
breakoutModewide
задатьПользователюВопрос("Как дела?").сохранитьРезультат("what") +
если("{what} != Хорошо").то(
  комментарий("А дела то не хорошо") +
  завершитьИПеревестиНаОператора 
) +
комментарий("Все отлично") +
завершить

Время ожидания ответа от пользователя устанавливается таймером сценариев, значение которого можно указать в разделе Настройки - Сценарии. Если ответ от пользователя не поступит в указанное время, сценарий будет завершен. После завершения сценарий по таймеру система отправит пользователю соотвествующее служебное сообщение, текст которого можно указать в разделе Настройки - Сценарии.

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

.сВариантамиОтвета(*варианты) 

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

Code Block
breakoutModewide
задатьПользователюВопрос("На какую дату нужен пропуск ?").сВариантамиОтвета("Сегодня", "Завтра").сохранитьРезультат("whatDay") +
...

.проверитьФормат(*формат, *сообщение)

Модификатор шага проверяет полученные от пользователя данные на соответствие шаблону. Шаблон задается регулярным выражением. В случае соответствия ответной реплики пользователя шаблону шаг передает данные далее, в обратном случае - выводит текст сообщения и ожидает получения корректной информации без ограничений по количеству попыток ввода.

Code Block
breakoutModewide
//  выражение для проверки, что введенная строка соотвествует формату даты вида 02.12.2021
задатьПользователюВопрос("Укажите дату").проверитьФормат("(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\\d\\d", "Не понял вас, повторите пожалуйста.").сохранитьРезультат("day")+

//  выражение для проверки, что введенная строка содержит адрес электронной почты
задатьПользователюВопрос("Напишите email").проверитьФормат("^\\S+@\\S+\\.[a-z]{2,}$", "Пожалуйста, введите корректный email").сохранитьРезультат("_email")+

запроситьФайл(*сообщение).сохранитьРезультат(*переменная)

Шаг запроса файла  у пользователя и записи его в переменную. В качестве аргумента шаг принимает текст просьбы или переменную с таким текстом. Файл будет сохранен в хранилище файлов диалога и будет доступен в указанной переменной.

Code Block
breakoutModewide
запроситьФайл("Приложите файл").сохранитьРезультат("file")+ +

Модификатор шага добавляет пользователю опцию пропуска отправки файла.

.можноПропустить(*сообщение)

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

Code Block
breakoutModewide
запроситьФайл("Приложите файл").можноПропустить("Пропустить") +
...

Шаги работы с внешними сервисами  

Шаги обращения к внешним сервисам и разбора полученных данных. В настоящее время поддерживается API вызовы REST и SOAP сервисов, планируется подключение к почтовым, FTP и прочим сервисам.

Функции операции:

вызвать.внешнийСервис(*адрес, *тип).сохранитьРезультат(*args)

Шаг вызова REST API сервисов. Данный шаг ожидает получение ответа в формате плоского JSON. Для работы с SOAP сервисами используется данный шаг с модификаторам, которые будут указаны ниже.

В качестве аргументов для вызвать.внешнийСервис принимаются адрес ендпонта и тип вызова. Поддерживаются основные типы вызовов - GET, POST, PUT, DELETE. В качестве адреса ендпойнта принимается строка с адресом или переменная, которая содержит данную строку.

В качестве аргументов для сохранитьРезультат принимается список пар из названия поля в полученном JSON и названия переменной, в которую сценарий сохранит полученное значение.

Пример GET запроса, из ответа которого будет выбрано 1 поле result

Code Block
breakoutModewide
вызвать.внешнийСервис("https://api.autofaq.ai/v1/ping","GET").сохранитьРезультат(("result", "answer_code")) +

Пример POST запроса с указанием адреса вызова из переменной, телом запроса и разбором двух полей из ответа - message и code

Code Block
breakoutModewide
установитьПеременную("post_url", "https://api.autofaq.ai/v1/ping") +
...
вызвать.внешнийСервис("{post_url}", "POST").сТеломСообщения("{query}").сохранитьРезультат(("message", "response_message"),("code", "response_code")) +
...

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

.сПараметрами(*args)

Модификатор шага вызова сервиса для передачи URL параметров запроса. Параметры передаются парами в формате название параметра - значение параметра. Значение параметра может быть указано текстом или переменной, которая содержит данный текст.

Code Block
breakoutModewide
установитьПеременную("user_token", "1234567890abcd") +
...
вызвать.внешнийСервис("{url}","GET").сПараметрами(("query","order"),("token","{user_token}")).сохранитьРезультат(("result", "answer_code")) +
...

.сЗаголовками(*args)

Модификатор шага вызова сервиса для передачи заголовков запроса. Заголовки передаются парами в формате название заголовка - значение заголовка. Значение заголовка может быть указано текстом или переменной, которая содержит данный текст.

Code Block
breakoutModewide
установитьПеременную("user_token", "1234567890abcd") +
...
вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("Content-Type", "application/json"),("charset", "utf-8"),("Authorization","Bearer {user_token}")).сохранитьРезультат(("result", "answer_code")) +
...

.сТеломСообщения(*args)

Модификатор шага вызова сервиса для передачи тела запроса.

Поддерживаются форматы x-www-form-urlencoded и json. JSON передается кодированный в строку. Названия и значения параметров принимаются строкой или переменной, которая содержит эту строку.

Code Block
breakoutModewide
// передача JSON 
вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("Content-Type", "application/json")).сТеломСообщения("{\"name\":\"new document\", \"question\":\"new question\"}").сохранитьРезультат(("result", "answer_code")) +
// передача x-www-form-urlencoded
вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("Content-Type", "application/x-www-form-urlencoded")).сТеломСообщения("name=new document, question=new question").сохранитьРезультат(("result", "answer_code")) +

.сСоставнымТеломСообщения(*args)

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

Code Block
breakoutModewide
// передача файла через указание пути
вызвать.внешнийСервис("{url}", "POST").сСоставнымТеломСообщения(("content" -> "C:/docker.yml")).сохранитьРезультат(("result", "answer_code")) +
// передача файла через идентификатор файла в хранилище
вызвать.внешнийСервис("{url}", "POST").сЗаголовками(("apikey","{apikey_var}")).сСоставнымТеломСообщения(("content" -> "{fileId}"),("type" -> "addAttach")).сохранитьРезультат(("result", "answer_code")) +

.сохранитьРезультатКакСтроку(*переменная)

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

Ответ может быть разобран далее по ходу сценария.

Code Block
breakoutModewide
// запрос и сохранение результата в строку
вызвать.внешнийСервис("{url}", "POST").сТеломСообщения("{query}").сохранитьРезультатКакСтроку("answer")+
// разбор ответа в JS коде (рассмотрено ниже)
выполнитьJs("""
  try {
    var answerParsed = JSON.parse(answer);
  } catch(err) {
    var answerParsed = {'results':[]};
  }
   
  var resultsLength = answerParsed.results.length;
  var exit = {'resultsLength ':resultsLength};
  exit;
""") +
...

...

Сервисные шаги

если(*условие).то(*операции) 

...