Встроенные функции сценариев

Обзор

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

Функции делятся на:

  • чистые – возвращаемое значение зависит только от параметров.

  • с сайт-эффектами – возвращаемое значение может изменяться в зависимости от состояния системы.

  • модификаторы – производит изменения в системе.

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

Категории функций

Категория Описание

Математические

Чистые математические функции.

Строковые

Чистые функции по работе со строками.

Дата/время

Чистые функции по работе с датами и временем и сайд-эффектные функции доступа к текущему времени.

Преобразования

Чистые функции преобразования значений, кодирования, упаковки, представления.

Хеш-суммы

Чистые хеш-функции.

Файлы и пути

Чистые функции по работе с файловыми путями и категориями каталогов.

Служебные функции

Различные функции для двунаправленного доступа к контексту и состоянию.

Доступ

Сайд-эффектные функции специального доступа к переменным.

Конфигурация

Сайд-эффектные функции получения данных из конфигурации системы.

Константы

Чистые функции подстановки констант.

Символы

Чистые функции подстановки символов.

IVR

Сайд-эффектные функции доступа к данным о звонке и модификаторы состояний очереди.

Каталог функций

Table 1. Математические функции
Функция Параметры Описание

sin

num

Синус числа

cos

num

Косинус числа

tan

num

Тангенс числа

asin

num

Арксинус числа

acos

num

Арккосинус числа

atan

num

Арктангенс числа

atan2

num, num

Арктангенс частного двух чисел

sinh

num

Гиперболический синус числа

cosh

num

Гиперболический косинус числа

tanh

num

Гиперболический тангенс числа

exp

num

Экспонента числа

log

num

Натуральный логарифм числа

log2

num

Двоичный логарифм числа

log10

num

Десятичный логарифм числа

pow

num, num

Результат возведения одного числа в степень другого

sqrt

num

Квадратный корень числа

erf

num

Функция ошибки:

2/sqrt(pi)*integral from 0 to X of exp(-t*t) dt

Не доступно на Windows

erfc

num

1.0 - erf(X)

Не доступно на Windows

max

num, num

Максимальное из двух чисел

min

num, num

Минимальное из двух чисел

trunc

num

Результат отбрасывания дробной части числа

round

num

Результат округления числа до целого

abs

num

Абсолютное значение числа

floor

num

Ближайшее снизу целое число

ceil

num

Ближайшее сверху целое число

lg

num

Десятичный логарифм числа

ln

num

Натуральный логарифм числа

log

num, num

Логарифм одного числа по основанию другого

sqr

num

Квадрат числа

random

Случайное десятичное число от 0 до 1

random

int

Случайное целое число от 0 до указанного целого числа

random

int, int

Cлучайное целое число в диапазоне между двумя целыми числами

Table 2. Строковые функции
Функция Параметры Описание

newid

Возвращает сгенерированный UUID-идентификатор.

len

str

Возвращает длину строки в символах.

concat

str,str

Возвращает результат сцепления двух строк.

equal

str,str

Результат сравнения двух строк: 0 или 1

str

str,str

Возвращает индекс позиции первого вхождения подстроки (п2) в строку (п1). Возвращает 0, если вхождений не обнаружено.

rstr

str,str

Возвращает индекс позиции последнего вхождения подстроки (п2) в строку (п1). Возвращает 0, если вхождений не обнаружено.

substr

str,int

Возвращает подстроку с указанной позиции (п2) до конца.

substr

str,int,int

Возвращает подстроку с указанной позиции (п2) не более чем указанной длины (п3).

replace

str,str,str

Возвращает результат замены в строке (п1) вхождения (п2) на значение (п3).

lower

str

Возвращает строку в нижнем регистре.

upper

str

Возвращает строку в верхнем регистре.

remove

str,int

Возвращает строку после удаления из нее подстроки с указанной позиции (п2) до конца.

remove

str,int,int

Возвращает строку после удаления из нее подстроки с указанной позиции (п2) указанной длины (п3).

indexof

str,str

Возвращает индекс позиции первого вхождения подстроки (п2) в строку (п1). Возвращает 0, если вхождений не обнаружено.

indexof

str,str,int

Возвращает индекс позиции первого вхождения подстроки (п2) в строку (п1), начиная с указанной позиции (п3). Возвращает 0, если вхождений не обнаружено.

trim

str

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

ltrim

str

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

rtrim

str

Возвращает строку, избавленную от пустых символов в конце (пробел, табуляция и т.д.).

trimstart

str

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

trimend

str

Возвращает строку, избавленную от пустых символов в конце (пробел, табуляция и т.д.).

left

str,int

Возвращает левую часть строки не более чем указанной длины.

right

str,int

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

reverse

str

Возвращает перевернутую строку.

regexreplace

str,str,str

Возвращает результат замены с помощью регулярного выражения. п1 - значение, п2 - паттерн, п3 - замена.

regexreplaceg

str,str,str

Возвращает результат замены с помощью регулярного выражения с опцией global. п1 - значение, п2 - паттерн, п3 - замена.

modify_json

str,json,json

Возвращает измененную json-структуру. Применяет поисковый запрос (п1) к значению (п2), обнаруженный элемент подвергает модификации согласно опциям (п3) и возвращает общий результат.

Пример:
modify_json(
  "chat/0/msgs",
  '{"chat":[{"msgs":[{"txt":"abc"}]}]}',
  '{"action":"append","value":{"txt":"zcv"}}'
)

Опции представлены в виде json-объекта с обязательным ключом action. Возможные варианты:

  • append - для массива. Добавляет новый элемент в конец. В опциях значение элемента по ключу value.

  • prepend - для массива. Добавляет новый элемент в начало. В опциях значение элемента по ключу value

  • insert - для массива. Добавляет новый элемент в указанную позицию. В опциях значение элемента по ключу value, позиция по ключу index.

  • replace - для массива. Заменяет элемент в указанной позиции на новый. В опциях значение нового элемента по ключу value, позиция по ключу index.

  • replace_auto - для массива. Заменяет все элементы массива на указанное значение. В опциях значение по ключу value.

  • delete - для массива. Удаляет элемент из указанной позиции. В опциях значение позиции по ключу index.

  • keystore - для объекта. Сохраняет элемент по указанному ключу, в зависимости от наличия ключа добавляет или изменяет значение. В опциях значение элемента по ключу value, значение ключа по ключу key.

  • keyreplace - для объекта. Заменяет элемент по указанному ключу, а если ключ отсутствует, то оставляет без изменений. В опциях значение элемента по ключу value, значение ключа по ключу key.

  • keyinsert - для объекта. Сохраняет элемент по указанному ключу, если он отсутствует, а иначе завершается с ошибкой. В опциях значение элемента по ключу value, значение ключа по ключу key.

  • keydelete - для объекта. Удаляет элемент по указанному ключу. В опциях значение ключа по ключу key.

Table 3. Функции по работе с датами/временем
Функция Параметры Описание

nowtick

Возвращает число, представляющее абсолютное значение в миллисекундах с 1970 года.

now

Возвращает текущую дату и время в локальном часовом поясе сервера в формате RFC3339. Например, 2019-10-06T16:43:30.46+03:00.

nowutc

Возвращает текущую дату и время в UTC в формате RFC3339.

nowgregsecond

Возвращает количество секунд по грегорианскому календарю, с 0 года н.э.

ticktolocal

int

Возвращает дату в локальном часовом поясе сервера по абсолютному значению tick.

ticktoutc

int

Возвращает дату в UTC по абсолютному значению tick.

dateformat

str, dt

Возвращает строку с представление даты (п2) по указанному формату (п1). Например: yyyy-MM-dd.

Возможные плейсхолдеры форматирующей строки: yyyy, yy, MM, d, dd, h, HH, MMM, mm, ss, ffff, fff, ff, f, zzz.

date

Возвращает текущую дату в локальном часовом поясе сервера без указания часового пояса. Формат YYYY-MM-DD.

date

dt

Возвращает дату из указанной даты/времени.

time

Возвращает текущее время в локальном часовом поясе сервера без указания часового пояса. Формат YYYY-MM-DD.. Формат HH:mm:ss.fff.

time

dt

Возвращает время из указанной даты/времени.

datetime

str

Возвращает дату/время, сформированную по строке. Строка может содержать различные представления даты/времени, в том числе и RFC3339.

datetime

int,int,int

Возвращает дату/время на основе переданных п1 - года, п2 - месяца, п3 - дня.

datetime

int,int,int,int,int

Возвращает дату/время на основе переданных п1 - года, п2 - месяца, п3 - дня, п4 - часа, п5 - минуты.

datetime

int,int,int,int,int,int

Возвращает дату/время на основе переданных п1 - года, п2 - месяца, п3 - дня, п4 - часа, п5 - минуты, п6 - секунды.

datetime

int,int,int,int,int,int,int

Возвращает дату/время на основе переданных п1 - года, п2 - месяца, п3 - дня, п4 - часа, п5 - минуты, п6 - секунды, п7 - миллисекунды.

datediff

atom,dt,dt

Возвращает число указанных единиц времени между двумя датами.

Параметр указывается в виде атома (не строки), например datediff('dd',"2019-10-06","2019-10-05")

Возможные виды единиц по убыванию: yy, yyyy, q, qq, m, mm, ww, wk, d, dd, h, hh, mi, n, s, ss, ms

dateadd

atom,int,dt

Возвращает дату после добавления указанного количества (п2) указанных единиц времени (п1) к указанной дате/времени (п3).

Параметр указывается в виде атома (не строки), например dateadd('mi',120,"2019-10-06T13:05:28")

Возможные виды единиц по убыванию: yy, yyyy, q, qq, m, mm, ww, wk, d, dd, h, hh, mi, n, s, ss, ms

year

dt

Возвращает текущий год указанной даты/времени.

month

dt

Возвращает текущий месяц (1-12) указанной даты/времени.

day

dt

Возвращает текущий день (1-31) указанной даты/времени.

hour

dt

Возвращает текущий час (0-23) указанной даты/времени.

minute

dt

Возвращает текущую минуту (0-59) указанной даты/времени.

second

dt

Возвращает текущую секунду (0-59) указанной даты/времени.

millisecond

dt

Возвращает текущую миллисекунду (0-999) указанной даты/времени.

dayofyear

dt

Возвращает номер дня в году для указанной даты/времени.

dayofweek

dt

Возвращает номер дня недели (1-7) для указанной даты/времени.

weekofyear

dt

Возвращает номер недели в году для указанной даты/времени.

isleapyear

int

Возвращает true, если указанная дата/время представляет високосный год.

datetimelocal

dt

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

datetimeutc

dt

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

localtoutc

dt

Возвращает UTC дату/время для указанной даты/времени, рассматриваемой в локальном часовом поясе сервера.

utctolocal

dt

Возвращает локальную дату/время для указанной даты/времени, рассматриваемой как UTC.

valid_date

dt

Возвращает true, если указанная строка содержит корректную дату/время, иначе false.

Table 4. Функции преобразования
Функция Параметры Описание

char

str

Возвращает строку с одним символом по его числовому коду.

str

int

Преобразует числовое значение к строке.

num

str

Преобразует строку к числу. При неудаче завершается с ошибкой.

numval

str

Преобразует строку к числу, отрезая с конца неподходящие символы. В пределе возвращает 0.

dechex

int

Возвращает строку с HEX-представлением числа.

hexdec

str

Возвращает число на основе его HEX-представления.

base64encode

str

Возвращает строку, полученную в результате упаковки в Base64 представление.

base64decode

str

Возвращает строку, полученную в результате распаковки из Base-64 представления.

urlencode

str

Возвращает строку, закодированную с помощью UrlEncode.

urldecode

str

Возвращает строку, раскодированную с помощью UrlEncode.

htmlencode

str

Возвращает строку, закодированную c помощью Unicode Hex Character Code.

htmldecode

str

Возвращает строку, раскодированную c помощью Unicode Hex Character Code

escape

str

Возвращает строку, полученную в результате преобразования к escape-последовательности. Применяется для вставки в JSON.

unescape

str

Возвращает строку, полученную в результате распаковки из escape-последовательности. Применяется для очистки после JSON.

translit

str

Возвращает результат транслитерации строки.

ifelse

bool,any,any

Если значение первого параметра true, то возвращает п2, иначе возвращает п3.

Table 5. Хеш-суммы
Функция Параметры Описание

md5

str

Возвращает хеш от строки по алгоритму MD5.

crc32

any

Возвращает хеш от любого значения по алгоритму CRC32 (IEEE 802.3).

crc32

num,any

Возвращает новое значение хеша от предыдущего значения, скомбинированного с новой порцией. п1 - предыдущее значение хеша, п2 - новая порция данных. По алгоритму CRC32 (IEEE 802.3).

adler32

any

Возвращает хеш от любого значения по алгоритму Adler-32.

adler32

num,any

Возвращает новое значение хеша от предыдущего значения, скомбинированного с новой порцией. п1 - предыдущее значение хеша, п2 - новая порция данных. По алгоритму Adler-32.

phash2

any

Возвращает хеш-сумму от любого значения по внутреннему алгоритму.

Table 6. Функции по работе с файловыми путями
Функция Параметры Описание

pathtype

str

Возвращает тип пути (префикс категории из указанного пути).

relpath

str

Возвращает относительный путь (указанный путь без префикса категории).

filename

str

Возвращает имя файла, выделенное из указанного пути.

fileext

str

Возвращает расширение файла, выделенное из указанного пути.

filedir

str

Возвращает название каталога. Для пути к файлу - это имя каталога, для пути к каталогу - это название родительского каталога.

makepath

str,str

Возвращает путь, сформированный в результате сцепки двух частей.

makepath

str,str,str

Возвращает путь, сформированный в результате сцепки трех частей.

temp

Возвращает :TEMP - префикс временного локального каталога сценария.

syn_media

Возвращает :SYNC_COMMON - префикс категории синхронизирующегося каталога общего назначения.

syn_dom_media

syn_domain

Возвращает :SYNC_DOMAIN_DATA префикс категории синхронизирующегося каталога данных домена.

syn_script

Возвращает :SYNC_SCRIPT_DATA префикс категории синхронизирующегося каталога данных текущего сценария (по коду).

syn_script_media

Возвращает :SYNC_SCRIPT_STATIC префикс категории синхронизирующегося каталога статических файлов сценария (по коду).

ss_public

Возвращает :SITESHARE_PUBLIC - префикс категории сетевого внутрисайтового каталога общего назначения.

ss_domain

Возвращает :SITESHARE_DOMAIN_DATA - префикс категории сетевого внутрисайтового каталога текущего домена.

ss_script

Возвращает :SITESHARE_SCRIPT_DATA - префикс категории сетевого внутрисайтового каталога текущего сценария (по коду).

gs_public

Возвращает :GLOBALSHARE_PUBLIC - префикс категории сетевого межсайтового каталога общего назначения.

gs_domain

Возвращает :GLOBALSHARE_DOMAIN_DATA - префикс категории сетевого межсайтового каталога текущего домена.

gs_script

Возвращает :GLOBALSHARE_SCRIPT_DATA - префикс категории сетевого межсайтового каталога текущего сценария (по коду).

Table 7. Служебные функции
Функция Параметры Описание

startparam

int

Возвращает значение входного параметра с указанным индексом. Сценарии могут принимать до 20 входных парамтеров.

getscriptref

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

get_project_id

Возвращает строку с идентификатором проекта текущего выполняемого сценария.

cmd

str,str,str,str

cmd

str,str,str,str,str

component

int

atom

binary,map

proplist

Выполняет компонент указанного типа из группы компонентов служебных сценариев. Первый параметр - тип компонента (числовой номер или ключ из названия модуля, например 103 или pause), второй параметр - свойства компонента из документации за исключением веток перехода и переменных для выходных значений (может быть erlang:map() или erlang:proplist() или binary() с JSON). Возвращает объект с ключами полей выходных переменных и дополнительно "transferKey", формат возвращаемого значения совпадает с форматом второго параметра.

component

int(atom,binary),binary(map,proplist),atom

Выполняет компонент указанного типа из группы компонентов служебных сценариев. Первый параметр - тип компонента (числовой номер или ключ из названия модуля, например 103 или pause), второй параметр - свойства компонента из документации за исключением веток перехода и переменных для выходных значений (может быть erlang:map() или erlang:proplist() или binary() с JSON). Третий параметр устанавливает формат возвращаемого значения (map, proplist, json). Возвращает объект с ключами полей выходных переменных и дополнительно "transferKey".

lock

any,int

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

lock

any,int,any,int

Ожидает и блокирует критическую секцию (аналог компонента Мьютекс). Первый параметр - уникальное имя критической секции. Второй параметр - время ожидания в миллисекундах до таймаута. Третий параметр - тип операции под блокировкой (1 или read - чтение, 2 или write - запись). Четвертый параметр - время в миллисекундах, после которого критическая секция автоматически освободится. Возвращает "ok", "timeout", "error".

unlock

any

Освобождает критическую секцию (аналог компонента Мьютекс). Возвращает "ok" или "error".

dc_read_types

str

dc_read_fields

str,str

dc_read

str,str

dc_read

str,str,str

dc_find

str,str

dc_find

str,str,str

dc_select

str,str

dc_select

str,str,str

Table 8. Функции обеспечения доступа
Функция Параметры Описание

check_variable

str

Возвращает true, если переменная c указанным именем существует и содержит значение.

get_variable_value

str

Возвращает значение переменной по её имени.

get_variable_value

str, any

Возвращает значение переменной по её имени, а если значение не установлено, то дефолтное значение из второго параметра.

get_variable_id

str

Возвращает строку с идентификатором переменной по её имени.

get_variable_orig

str

Возвращает значение переменной по её имени, причем, если значение строковое, то оно возвращается в исходной кодировке без преобразования.

set_variable_value_if_undefined

str, any

Устанавливает знчение переменной по ее имени, если ее значение не задано. Возвращает значение переменной в результате операции.

var

str

Возвращает значение переменной по её имени.

storage_put

str, any

Продляет или размещает в хранилище данных на сайте значение (2 параметр) по ключу (1 параметр) на 2 суток. Возвращает "ok". При недоступности хранилища возвращает "error".

storage_put

str, any, int

Продляет или размещает в хранилище данных на сайте значение (2 параметр) по ключу (1 параметр) на указанное количество секунд (3 параметр). Возвращает "ok". При недоступности хранилища возвращает "error".

storage_get

str, any

Возвращает из хранилища данных на сайте значение по ключу, либо значение по умолчанию, если таковое отсутствует. При недоступности хранилища возвращает "error".

storage_del

str

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

Чтение и модификацию имеющегося значения в хранилище при работе в параллельном режиме следует проводить в критической секции, например, построенной компонентом "Мьютекс" или функциями выражений lock/unlock.
Table 9. Функции конфигурации
Функция Параметры Описание

wsurl

Возвращает URL ближайшего доступного сервера с логической ролью ws.

site

Возвращает сайт, на котором исполняется сценарий.

domain

Возвращает домен, в котором исполняется сценарий.

parentdomain

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

isworktime

Возвращает true, если текущее время рабочее, false иначе. Расписание берется из настроек домена и применяется к локальному часовому поясу сайта (сервера с ролью mdc/sdc).

isworktime

int

Возвращает true, если текущее время рабочее, false иначе. Расписание берется из настроек домена и применяется к указанному в минутах часовому поясу, например, 0 - UTC, 10800 - Москва.

В формате proto://ip-address:port.

Table 10. Константы
Функция Параметры Описание

e

Возвращает число e (2.718281828459045).

pi

Возвращает число pi (3.141592653589793).

phi

Возвращает число phi (1.618033988749895).

Table 11. Символы
Функция Параметры Описание

tab

Возвращает строку с символом табуляции.

endline

Возвращает строку с символом конца строки.

quot

Возвращает строку с символом кавычки.

dblquot

Возвращает строку с символом двойной кавычки.

Table 12. Функции сценариев IVR (issue RP-1468)
Функция Параметры Описание

ivrparam

str

Возвращает значение указанного параметра из заголовка X-Era-Ivr, который формируется ролью b2b. Например, from, to, by.

Доступно только для вызовов, поступивших в IVR.

callednum

Возвращает строку с набранным абонентом номером.

Доступно только для вызовов, поступивших в IVR.

calledext

Возвращает строку с расширением КАФ, по которому звонок поступил в IVR.

Доступно только для вызовов, поступивших в IVR.

remotenum

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

callid

Возвращает строку со значением заголовка CallId плеча b2b - ivr SIP-диалога с абонентом.

huntid

Возвращает строку с идентификатором сущности hunt-группы, на которую направлен вызов.

Доступно только для вызовов, поступивших в IVR через featurecode с типом hunt, в сценариях qivrscript и preivrscript. Во всех остальных случаях возвращает invalid_mode.

huntobjid

Возвращает строку с идентификатором runtime-объекта очереди hunt-группы.

Доступно только для вызовов, поступивших в IVR через featurecode с типом hunt, в сценариях qivrscript и preivrscript. Во всех остальных случаях возвращает invalid_mode.

queuepriority

Возвращает текущее числовое значение приоритета в очереди.

Доступно только для вызовов, поступивших в IVR через featurecode с типом hunt, в сценариях qivrscript. Во всех остальных случаях возвращает invalid_mode.

queuepriority

int

Устанавливает новое числовое значение приоритета в очереди, автоматически производится перемещение.

Доступно только для вызовов, поступивших в IVR через featurecode с типом hunt, в сценариях qivrscript. Во всех остальных случаях возвращает invalid_mode

queueposition

Возвращает текущую позицию в очереди.

Доступно только для вызовов, поступивших в IVR через featurecode с типом hunt, в сценариях qivrscript. Во всех остальных случаях возвращает invalid_mode

queueestimatedsec

Доступно только для вызовов, поступивших в IVR через featurecode с типом hunt, в сценариях qivrscript. Во всех остальных случаях возвращает invalid_mode

queuerescount

Возвращает количество операторов в хант-группе.

Доступно только для вызовов, поступивших в IVR через featurecode с типом hunt, в сценариях qivrscript. Во всех остальных случаях возвращает invalid_mode

queuerescount

str

Возвращает количество операторов в хант-группе, находящихся в состоянии (online или free, указывается параметром).

Доступно только для вызовов, поступивших в IVR через featurecode с типом hunt, в сценариях qivrscript. Во всех остальных случаях возвращает invalid_mode

queuestate

Возвращает строку с названием состояния ожидания в очереди.

Доступно только для вызовов, поступивших в IVR через featurecode с типом hunt, в сценариях qivrscript. Во всех остальных случаях возвращает invalid_mode

q_displayname

Возвращает displayname из URI заголовка From SIP-запроса INVITE, ожидающего в очереди hunt-группы с типом sipuser.

Доступно только для сценариев preivrscript. Во всех остальных случаях возвращает invalid_mode.

q_username

Возвращает username из URI заголовка From SIP-запроса INVITE, ожидающего в очереди hunt-группы с типом sipuser.

Доступно только для сценариев preivrscript. Во всех остальных случаях возвращает invalid_mode.

q_domain

Возвращает domain из URI заголовка From SIP-запроса INVITE, ожидающего в очереди hunt-группы с типом sipuser.

Доступно только для сценариев preivrscript. Во всех остальных случаях возвращает invalid_mode.

r_number

Возвращает строку с номером вызова оператора (username из URI заголовка To SIP-запроса INVITE, отправленного для вызова оператора).

Доступно только для сценариев preivrscript. Во всех остальных случаях возвращает invalid_mode.