Голосовое меню (/ivr/)

Протестировать методы API можно на странице интерактивного обозревателя API и без написания кода
Некоторые ресурсы, описанные на странице, по умолчанию могут быть не доступны из-за типа приложения (см. Создание и авторизация приложений)

Внутренние номера типа IVR (интерактивное голосовое меню) служат для настройки маршрутизации звонков внутри АТС с использованием информации, вводимой клиентом на клавиатуре телефона с помощью тонального набора.

Для конфигурации голосового меню необходимо создать внутренний номер, указав в качестве типа (type) значение ivr. После этого становится возможным конфигурация голосового меню через API-интерфейс. Звуковые файлы, которые необходимы для настройки голосового приветствия, загружаются в ресурс “Звуковые файлы (/sound/)”.

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

  • start – описывает действия при вхождении в контекст;

  • timeout – описывает действия при наступлении тайм-аута (клиент не сделал никакого выбора в течении заданного промежутка времени);

  • invalid  действия, наступающие при выборе клиентом опции, которая не сконфигурирована.

В дополнение к обязательным опциям контекста могут быть добавлены дополнительные (например, что происходит при наборе последовательности "100"). Все опции по умолчанию выполняют действие hangup (повесить трубку), и это действие должно быть переопределено для задания необходимой логики.
За IVR закреплен так называемый "entry_context" – в него попадает вызов после прихода в голосовое меню. Его еще можно назвать главным контекстом.

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

Описание структур данных

Имя

Тип

Обяза-тельный

Значение по умолчанию

Описание

Имя

Тип

Обяза-тельный

Значение по умолчанию

Описание

entry_context

long

нет

0

Идентификатор главного контекста

lifetime

long

нет

0

Время (в секундах), по истечении которого происходит принудительный выход из IVR

lifetime_exp_action

string

нет



Действия при выходе из IVR по наступлению lifetime:

  • 'transfer' – перевод звонка (параметр lifetime_exp_transfer_dst);

  • 'hangup' – повесить трубку

lifetime_exp_transfer_dst

string

нет

 

Переадресация на указанный номер при истечении lifetime и lifetime_exp_action='transfer'

sleep_time

long

нет

0

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

vm_enabled 

boolean

нет

true

Параметр, активирующий голосовую почту

vm_greeting 

long

нет

0

Идентификатор звукового файла, звучащего в качестве приветствия голосовой почты (актуально для vm_enabled)

vm_attach_file 

boolean

нет

true

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

vm_mailto 

string

нет

 

Адрес e-mail для получения оповещений о новом голосовом сообщении (возможны несколько адресов через запятую; актуально для vm_enabled)

Имя

Тип

Обяза-тельный

Значение по умолчанию

Описание

Имя

Тип

Обяза-тельный

Значение по умолчанию

Описание

timeout

long

нет

0

Время (в миллисекундах) ожидания начала набора после выполнения последнего правила в опции контекста. По истечении уход в опцию timeout

allow_any_dial

boolean

нет

true

Параметр определяет, позволен ли донабор любого внутреннего номера клиента

inter_digit_timeout

long

нет

0

Время (в миллисекундах) ожидания набора следующей цифры. По истечении набор считается завершенным.  Например, при "digit_len": 3 набор "30" будет принят по прошествии inter_digit_timeout

name

string

нет

 

Имя контекста

digit_len

long

нет



0

Длина внутреннего номера клиента: после набора указанного количества цифр ввод считается завершенным (без необходимости ожидания "inter_digit_timeout"). Также определяет максимальную длину возможного набора клиентом. Например, "digit_len": 3 позволяет набрать "7", "22", "300", но не дает возможности выбора "4000"

Имя

Тип

Обяза-тельный

Значение по умолчанию

Описание

Имя

Тип

Обяза-тельный

Значение по умолчанию

Описание

digits

string

нет



Добавляет к стандартным опциям контекста (start, timeout, invalid), пользовательскую опцию. Например, значение "2" задаст возможность обработки ввода цифры "2" после попадания в контекст

Имя

Тип

Обяза-тельный

Значение по умолчанию

Описание

Имя

Тип

Обяза-тельный

Значение по умолчанию

Описание

action

string

нет

 

Непосредственно определяет, что нужно сделать в этом правиле:

  • 'transfer' – выполнить перевод вызова (сделать переадресацию) на номер(а) из transfer_dst. Максимально возможное количество номеров переадресации – 10, для одновременной переадресации на большее количество номеров следует использовать действие simple_transfer;

  • 'simple_transfer' – перевод звонка (сделать переадресацию) на номер(а) из параметра transfer_dst. При данном типе переадресации правила входящего вызова для перечисленных в transfer_dst внутренних номеров не выполняются;

  • 'hangup' – повесить трубку;

  • 'play_sound' – проиграть приветствие (параметры sound и sound_type);

  • 'play_silence' – тишина в background формате (параметр silence_time);

  • 'jump_to_context' – перейти в другой контекст (параметры context и context_option);

  • 'play_digits' – проиграть цифры (параметры digits и play_digits_method);

  • 'play_digits_from_variable' – проиграть цифры, содержащиеся в переменной (параметры play_digits_variable и play_digits_method);

  • 'record_digits' – записать набор цифр в переменную (параметры record_digits_variable, record_digits_max и record_digits_sound);

  • 'set_variable' – установить переменную в канале (параметры set_variable_name и set_variable_value);

  • 'transfer_from_variable' – перевод звонка на номер, содержащийся в переменной (параметр transfer_variable);

  • 'call_interactive' – функция Call Interactive: осуществить HTTP-запрос на определенный URL (параметры call_interactive_url и call_interactive_method);

  • 'set_caller_id_number' – установить номер вызывающего абонента для дальнейших переадресаций из IVR (параметр caller_id_number);

  • 'set_caller_id_name' – установить имя вызывающего абонента для дальнейших переадресаций из IVR (параметр caller_id_name);

  • 'quality_rate' – установить правило оценки качества разговора (основные параметры для работы этого действия: sound и max_rate);

  • 'voice_helper' – установить правило голосовой навигации (основные параметры для работы этого действия: sound, voice_helper_digits_max, voice_helper_rules, voice_helper_timeout). Описание правила и параметров, а также примеры использования доступны на отдельной странице “Преобразование речи в текст

  • 'start_record' – начать запись звонящего. Запись остановится при включении записи на любом другом добавочном.

digits

string

нет

 

Проговорить указанные цифры (методом play_digits_method), обязателен при action='play_digits'

sound

long

нет

0

Идентификатор звукового файла, который необходимо проиграть, обязателен при action='play_sound'

sound_type

string

нет



Обязателен при наличии идентификатора sound. Может принимать значения:

  • 'background' – пользователь может сделать донабор, пока звучит приветствие;

  • 'foreground' – пользователь должен прослушать приветствие до конца

play_digits_method

string

нет



Обязателен при установленной опции digits. Может быть:

  • 'pronounced' – проговорить цифры как одно число;

  • 'iterated' – проговорить цифры последовательно одна за другой

interval

long

нет

0

Правило выполняется только в этом временном интервале

caller_id_action

string

нет



Определяет метод анализа источника вызова caller_id:

  • 'matches' – должен совпадать (caller_id должен быть задан);

  • 'not_matches' – должен не совпадать (caller_id должен быть задан);

  • 'anonymous' – источник скрыт;

  • 'any' – любой источник

caller_id

string

нет



Правило будет работать только для вызовов, источник которых определяется этим полем. Поле заполняется в виде регулярного выражения PCRE. Например: "^(\+|)7812" будет соответствовать всем источникам, начинающимся на "+7812" или "7812"

context_option

string

нет

 

Определяет опцию контекста, в которую нужно перейти, при action='jump_to_context'

silence_time

long

нет

0

Время (в миллисекундах) отсутствия каких-либо звуков со стороны АТС, обязателен при action='play_silence'

context

long

нет

0

Определяет идентификатор другого контекста, в который нужно перейти, обязателен при action='jump_to_context'

transfer_dst

string

нет



Переадресация на указанный номер. Если нужна переадресация на несколько номеров одновременно (одновременный вызов), то эти номера перечисляются через пробел (обязателен для action='transfer')

set_variable_name

string

нет



Имя переменной, которая должна быть установлена. Должно начинаться с латинской буквы, может содержать латинские буквы, цифры, а также символы подчеркивания. Обязателен для action='set_variable

set_variable_value

string

нет

 

Значение переменной, которая должна быть установлена. Обязателен для action='set_variable'

match_variable_name

string

нет



Имя переменной IVR, значение которой будет сравниваться со значением, заданным параметром match_variable_value. Если значения совпадут, то правило выполнится. Сравниваемая переменная может быть установлена системой (см. подраздел "Предустановленные переменные в IVR"), либо задана правилом опции контекста типа set_variable

match_variable_value

string

нет



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

transfer_variable

string

нет



Имя переменной, значение которой будет использовано в качестве номера для переадресации. Если переменная не установлена, то действие не выполняется. Переменная может быть установлена с помощью действия set_variable, record_digits, либо с помощью функции Call Interactive. Обязателен при action='transfer_from_variable'

play_digits_variable

string

нет



Имя переменной, значение которой будет использовано для проигрывания цифр. Если переменная не установлена, то действие не выполняется. Переменная может быть установлена с помощью действия set_variable, record_digits, либо с помощью функции Call Interactive. Обязателен при action= 'play_digits_from_variable'

record_digits_variable

string

нет

 

Имя переменной, в которую будут записаны введённые цифры. Обязателен при action= 'record_digits'

record_digits_max

string

нет



Максимальное количество введённых цифр, которые будут записаны в переменную. Обязателен при action= 'record_digits'

max_rate

long

нет

5

Максимальная оценка разговора (параметр используется только для действия quality_rate)

record_digits_sound

long

нет

0

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

call_interactive_url

string

нет



URL, на который будет осуществляться HTTP-запрос функцией Call Interactive. Должен начинаться с http:// или c https://. Обязателен для action='call_interactive'

call_interactive_method

string

нет



Метод, которым будет осуществляться HTTP-запрос функцией Call Interactive. Может принимать значение 'GET' или 'POST'. Обязателен для action='call_interactive'

call_interactive_timeout

long

нет

0

Время в секундах, в течение которого система будет ожидать ответ на HTTP-запрос функции Call Interactive. Если вызываемый URL не вернул ответ по истечении этого времени, то выполняется следующее правило. Система ждет по умолчанию 5 сек

caller_id_number

string

нет



Номер вызывающего абонента для дальнейших переадресаций. Данный параметр может содержать в себе имена переменных, установленных в других действиях ранее, а также предустановленных переменных IVR (см. соответствующий подраздел). Имена переменных указываются в формате ${имя_переменной}. Обязателен при action= 'set_caller_id_number'

caller_id_name

string

нет



Имя вызывающего абонента для дальнейших переадресаций. Данный параметр может содержать в себе имена переменных, установленных в других действиях ранее, а также предустановленных переменных IVR (см. соответствующий подраздел). Имена переменных указываются в формате ${имя_переменной}. Обязателен при action='set_caller_id_name'

id

long

нет

0

Уникальный идентификатор правила (в пределах внутреннего номера)

name

string

нет

 

Имя правила, не обязательно уникальное

final

boolean

нет

true

Это правило является последним, и последующие обрабатывать не нужно

hangup_cause

string

нет

normal

Причина окончания вызова (поле можно игнорировать; присутствует для обратной совместимости)

record_digits_timeout

long

нет

0

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

transfer_timeout

long

нет

0

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

call_status

string

нет

any

Правило отработает только в случае, если статус предыдущего вызова (самого внутреннего номера либо предыдущего правила переадресации) соответствует значению, переданному в этом параметре:

  • no_answer' – не было ответа (по тайм-ауту или произошла какая-либо ошибка, кроме "SIP/2.0 486 Busy Here");

  • 'busy' – номер занят (получен SIP/2.0 486 Busy Here);

  • 'any' – любой результат

play_sound_from_variable

boolean

нет

false

Для правил play_sound, quality_rate, voice_helper доступен параметр play_sound_from_variable. В этой системной переменной может хранится приветствие, синтезированное с помощью действия text_to_speech в функции “Call interactive”. В случае, если синтезированного приветствия нет, а параметр play_sound_from_variable активен, будет проигран звуковой файл по умолчанию, указанный в параметре sound

Имя переменной

Описание

Имя переменной

Описание

called_did

Публичный номер (DID), на который пришел вызов в систему. Если вызов локальный, переменная содержит номер IVR без префикса клиента

caller_id_name

Имя вызывающего абонента

caller_id_number

Номер вызывающего абонента

Примеры

Для клиента с уникальным идентификатором 12 нужно создать голосовое меню (IVR) с номером "071", при попадании в которое действуют следующие правила:

  • Проиграть foreground музыкальный файл "advertising.wav" 1 раз;

  • Проиграть background музыкальный файл "hello.wav" и в случае отсутствия выбора клиента автоматически переводить на внутренний номер 050;

  • При наборе "1" происходит перевод вызова на мобильный +7(987)6543210;

  • При наборе "2" происходит перевод вызова на внутренний номер 002;

  • Позволять прямой набор трехзначных внутренних номеров.

1. Используя ресурс Звуковые файлы (/sound/), необходимо загрузить файлы hello.wav и advertising.wav:

Ответ системы:

{ "id": 51, "client_id": 12, "title": "мой файл приветствия", "dealer_id": null, "filename": "hello.wav" }
{ "id": 52, "client_id": 12, "title": "мой файл рекламы", "dealer_id": null, "filename": "advertising.wav" }

Идентификаторы новых файлов: hello.wav "id": 51; advertising.wav "id": 52

2. Используя ресурс  Внутренний номер (/extension/), создать внутренний номер типа "IVR":

Ответ системы:

{ "status": "active", "domain": "sip.ringme.ru", "create_date": "2020-03-20 17:11:10", "name": "000*071", "dial_rule_limit": null, "extension_group_id": null, "label": "тестовый IVR", "caller_id_name": null, "client_id": 12, "extra_params": null, "message_did": null, "dial_rule_id": null, "ani_rfc3325": false, "type": "ivr", "id": 204, "did_as_transfer_caller_id": null }

Идентификатор нового внутреннего номера "id": 204

3. Создаем контекст, который будет являться главным (entry_context):

Ответ системы:

Идентификатор контекста "id": 1

4. Теперь можно привязать этот контекст как главный к нашему IVR, заодно указываем "sleep-time", позволяющее задать паузу от прихода вызова в IVR до начала каких-либо действий контекста "entry_context":

Ответ системы:

5. Как отмечалось ранее, каждый контекст уже имеет опцию “start”.  Сконфигурируем его для проигрывания foreground музыкального файла "advertising.wav"

6. Далее по аналогии укажем воспроизвести файл hello.wav в background:

7. Теперь в контексте "Основной контекст" добавим возможность обработки выбора "1":

Ответ системы:

8. И укажем, какое действие необходимо производить при выборе "1" — перевод на мобильный +7(987)6543210:

9. По аналогии добавим вызов внутреннего номера "002" по набору "2":

Ответ системы:

10. В случае отсутствия выбора вызов должен автоматически переводиться на внутренний номер “050”. Как уже отмечалось, в контексте есть опция "timeout", с помощью которой можно задать это действие:

11. В результате можно посмотреть все доступные опции контекста:

Ответ системы:

Ресурсы раздела "Голосовое меню (ivr)"