Versions Compared

Key

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

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

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

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

Table of Contents

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

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

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

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

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

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

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

Expand
titleБазовые параметры (ivr)

Имя

Тип

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

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

Описание

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)

Expand
titleКонтекст (context)

Имя

Тип

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

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

Описание

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"

Expand
titleОпция контекста (context_option)

Имя

Тип

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

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

Описание

digits

string

нет


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

Expand
titleПравило опции контекста (context_option_rule)

Имя

Тип

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

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

Описание

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

Expand
titleПредустановленные переменные в IVR

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

Описание

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:

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"В разделе "},{"type":"text","text":"authentication","marks":[{"type":"strong"}]},{"type":"text","text":" в поля "},{"type":"text","text":"client_id","marks":[{"type":"strong"}]},{"type":"text","text":" и "},{"type":"text","text":"client_secret","marks":[{"type":"strong"}]},{"type":"text","text":"  требуется ввести полученные при регистрации приложения значения "},{"type":"text","text":"Application_ID","marks":[{"type":"strong"}]},{"type":"text","text":" и "},{"type":"text","text":"Application_Secret","marks":[{"type":"strong"}]},{"type":"text","text":", затем нажать на кнопку \""},{"type":"text","text":"Try it out!","marks":[{"type":"strong"}]},{"type":"text","text":"\". Если данные приложения верны, в ответ вернётся токен доступа ("},{"type":"text","text":"access_token","marks":[{"type":"strong"}]},{"type":"text","text":"). Полученный токен доступа следует ввести в поле \""},{"type":"text","text":"Access Token Field","marks":[{"type":"strong"}]},{"type":"text","text":"\" вверху страницы и сохранить его нажатием кнопки \""},{"type":"text","text":"Set Token","marks":[{"type":"strong"}]},{"type":"text","text":"\"."}]},{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/client/@me/sound/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"”file”: ”hello.wav“,"},{"type":"hardBreak"},{"type":"text","text":"”title”: “мой файл приветствия“"},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/client/@me/sound/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"”file”: “advertising.wav“,"},{"type":"hardBreak"},{"type":"text","text":"”title”: “мой файл рекламы“"},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"f42b5457-6dc8-41c4-9ba9-b0514c21d2f7","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Для отправки запросов с помощью программы cURL установим значения переменных "},{"type":"text","text":"url ","marks":[{"type":"strong"}]},{"type":"text","text":"и "},{"type":"text","text":"access_token","marks":[{"type":"strong"}]},{"type":"text","text":":"}]},{"type":"paragraph","content":[{"type":"text","text":"export url=\"https://<hostname>/api/ver1.0\"","marks":[{"type":"code"}]},{"type":"text","text":" "},{"type":"hardBreak"},{"type":"text","text":"(где hostname — hostname API-сервера провайдера IP-телефонии),"}]},{"type":"paragraph","content":[{"type":"text","text":"export access_token=\"8SNsrS0jV35vfmKqKeKtRrHfpbg4UX\"","marks":[{"type":"code"}]},{"type":"text","text":" "},{"type":"hardBreak"},{"type":"text","text":"(полученный токен доступа)."}]},{"type":"paragraph","content":[{"type":"text","text":"Отправим запросы:"}]},{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-F file=@hello.wav \\\n-F \"title=мой файл приветствия\" \\\n-X POST ${url}/client/@me/sound/"}]},{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-F file=@advertising.wav \\\n-F \"title=мой файл рекламы\" \\\n-X POST ${url}/client/@me/sound/"}]}]},"id":"c869fd43-37f9-4cbb-a330-d6d0fe373494","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"paragraph","content":[{"type":"text","text":"Для отправки запросов на языке Python установим значения переменных URL и ACCESS_TOKEN:"}]},{"type":"paragraph","content":[{"type":"text","text":"URL = \"https://<hostname>/api/ver1.0\"","marks":[{"type":"code"}]},{"type":"hardBreak"},{"type":"text","text":"(где hostname — hostname API-сервера провайдера IP-телефонии),"}]},{"type":"paragraph","content":[{"type":"text","text":"ACCESS_TOKEN = \"8SNsrS0jV35vfmKqKeKtRrHfpbg4UX\"","marks":[{"type":"code"}]},{"type":"hardBreak"},{"type":"text","text":"(полученный токен доступа)."}]},{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\n\nimport requests\nimport json\n\nurl = f'{URL}/client/@me/sound/'\nheaders = {\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'content-type': 'application/json'\n}\nfiles = {'file': open('hello.wav', 'rb')}\r\ndata = {'title': 'мой файл приветствия'}\nresponse = requests.post(url, headers=headers, files=files, data=json.dumps(data))\nprint(response.text)"}]},{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\n\nimport requests\nimport json\n\nurl = f'{URL}/client/@me/sound/'\nheaders = {\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'content-type': 'application/json'\n}\nfiles = {'file': open('advertising.wav', 'rb')}\r\ndata = {'title': 'мой файл рекламы'}\nresponse = requests.post(url, headers=headers, files=files, data=json.dumps(data))\nprint(response.text)"}]}]},"id":"9d7d29e3-b36e-42f6-b9ca-226e291013a4","label":"На языке Python3   ","type":"tab"}]

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

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

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

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

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/"},{"type":"text","text":"client/@me/extension/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"\"status\": \"active\","},{"type":"hardBreak"},{"type":"text","text":"\"name\": \"071\","},{"type":"hardBreak"},{"type":"text","text":"\"label\": \"тестовый IVR\","},{"type":"hardBreak"},{"type":"text","text":"\"type\": \"ivr\""},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"2e675a83-bd74-4180-8274-a44e7f5faf5e","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n    \"status\": \"active\",\n    \"name\": \"071\",\n    \"label\": \"тестовый IVR\",\n    \"type\": \"ivr\"\n}' \\\n-X POST ${url}/client/@me/extension/"}]}]},"id":"ad5d6a43-c54b-430f-a9fb-c4ce319d6b76","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\n\nimport requests\n\nurl = f'{URL}/client/@me/extension/'\r\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'Content-Type': 'application/json'\r\n}\r\ndata = '''{\r\n    \"status\": \"active\",\n    \"name\": \"071\",\n    \"label\": \"тестовый IVR\",\n    \"type\": \"ivr\"\n}'''\r\nresponse = requests.post(url, headers=headers, data=data)\nprint(response.text)"}]}]},"id":"e6ff5fab-11f9-4c94-945c-b61f9c13b69c","label":"На языке Python3    ","type":"tab"}]

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

Code Block
languagejson
{
  "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):

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/extension/204/ivr/context/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":" {"},{"type":"hardBreak"},{"type":"text","text":"\"digit_len\": 3,"},{"type":"hardBreak"},{"type":"text","text":"\"allow_any_dial\": true,"},{"type":"hardBreak"},{"type":"text","text":"\"inter_digit_timeout\": 2000,"},{"type":"hardBreak"},{"type":"text","text":"\"name\": \"Основной контекст\","},{"type":"hardBreak"},{"type":"text","text":"\"timeout\": 5000"},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"digit_len\": 3,\n  \"allow_any_dial\": true,\n  \"inter_digit_timeout\": 2000,\n  \"name\": \"Основной контекст\",\n  \"timeout\": 5000\n}' \\\n-X POST ${url}/extension/204/ivr/context/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\n\r\nurl = f'{URL}/extension/204/ivr/context/'\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'Content-Type': 'application/json'\r\n}\r\ndata = '''{\r\n    \"digit_len\": 3,\n    \"allow_any_dial\": true,\n    \"inter_digit_timeout\": 2000,\n    \"name\": \"Основной контекст\",\n    \"timeout\": 5000\n}'''\r\nresponse = requests.post(url, headers=headers, data=data)\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]

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

Code Block
languagejson
{
  "name": "Основной контекст",
  "inter_digit_timeout": 2000,
  "timeout": 5000,
  "extra_params": null,
  "allow_any_dial": true,
  "id": 1,
  "digit_len": 3,
  "description": null
}

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

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

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"PUT"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/extension/204/ivr/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"\"sleep_time\": 5000,"},{"type":"hardBreak"},{"type":"text","text":"\"entry_context\": 1"},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"sleep_time\": 5000,\n  \"entry_context\": 1\n}' \\\n-X PUT ${url}/extension/204/ivr/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\n\r\nurl = f'{URL}/extension/204/ivr/'\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'Content-Type': 'application/json'\r\n}\r\ndata = '''{\n    \"sleep_time\": 5000,\n    \"entry_context\": 1\n}'''\nresponse = requests.put(url, headers=headers, data=data)\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]

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

Code Block
languagejson
{
  "lifetime_exp_action": "hangup",
  "entry_context": 1,
  "lifetime_exp_transfer_dst": null,
  "vm_enabled": false,
  "vm_greeting": null, 
  "lifetime": 1800,
  "vm_attach_file": true,
  "sleep_time": 5000,
  "vm_mailto": null
}

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

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/"},{"type":"text","text":"extension/204/ivr/context/1/options/start/rules/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"\"sound\": 52,"},{"type":"hardBreak"},{"type":"text","text":"\"sound_type\": \"foreground\","},{"type":"hardBreak"},{"type":"text","text":"\"action\": \"play_sound\""},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"sound\": 52,\n  \"sound_type\": \"foreground\",\n  \"action\": \"play_sound\"\n}' \\\n-X POST ${url}/extension/204/ivr/context/1/options/start/rules/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\n\r\nurl = f'{URL}/extension/204/ivr/context/1/options/start/rules/'\r\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'Content-Type': 'application/json'\r\n}\r\ndata = '''{\r\n    \"sound\": 52,\n    \"sound_type\": \"foreground\",\n    \"action\": \"play_sound\"\n}'''\nresponse = requests.post(url, headers=headers, data=data)\r\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]
Expand
titleОтвет системы:
Code Block
languagejson
[
  {
    "transfer_variable": null,
    "call_status": "any",
    "play_digits_method": null,
    "voice_helper_classic_term": true,
    "caller_id": null,
    "voice_helper_final_count": null,
    "match_variable_value": null,
    "play_digits_variable": null,
    "call_interactive_method": null,
    "voice_helper_timeout": null,
    "id": 1,
    "record_digits_max": null,
    "voice_helper_digits_max": null,
    "match_variable_name": null,
    "caller_id_action": "any",
    "context_option": null,
    "silence_time": null,
    "set_variable_name": null,
    "caller_id_number": null,
    "hangup_cause": "normal",
    "record_digits_timeout": null,
    "sound": 52,
    "sound_type": "foreground",
    "call_interactive_url": null,
    "max_rate": 5,
    "caller_id_name": null,
    "voice_helper_rules": null,
    "transfer_timeout": null,
    "digits": null,
    "name": null,
    "record_digits_variable": null,
    "interval": null,
    "final": true,
    "transfer_dst": null,
    "context": null,
    "action": "play_sound",
    "set_variable_value": null,
    "call_interactive_timeout": null,
    "record_digits_sound": null
  }
]

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

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/"},{"type":"text","text":"extension/204/ivr/context/1/options/start/rules/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"\"sound\": 51,"},{"type":"hardBreak"},{"type":"text","text":"\"sound_type\": \"background\","},{"type":"hardBreak"},{"type":"text","text":"\"action\": \"play_sound\""},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"sound\": 51,\n  \"sound_type\": \"background\",\n  \"action\": \"play_sound\"\n}' \\\n-X POST ${url}/extension/204/ivr/context/1/options/start/rules/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\n\r\nurl = f'{URL}/extension/204/ivr/context/1/options/start/rules/'\r\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'Content-Type': 'application/json'\r\n}\r\ndata = '''{\r\n    \"sound\": 51,\r\n    \"sound_type\": \"background\",\r\n    \"action\": \"play_sound\"\r\n}'''\r\nresponse = requests.post(url, headers=headers, data=data)\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]
Expand
titleОтвет системы:
Code Block
languagejson
[
  {
    "transfer_variable": null,
    "call_status": "any",
    "play_digits_method": null,
    "voice_helper_classic_term": true,
    "caller_id": null,
    "voice_helper_final_count": null,
    "match_variable_value": null,
    "play_digits_variable": null,
    "call_interactive_method": null,
    "voice_helper_timeout": null,
    "id": 2,
    "record_digits_max": null,
    "voice_helper_digits_max": null,
    "match_variable_name": null,
    "caller_id_action": "any",
    "context_option": null,
    "silence_time": null,
    "set_variable_name": null,
    "caller_id_number": null,
    "hangup_cause": "normal",
    "record_digits_timeout": null,
    "sound": 51,
    "sound_type": "background",
    "call_interactive_url": null,
    "max_rate": 5,
    "caller_id_name": null,
    "voice_helper_rules": null,
    "transfer_timeout": null,
    "digits": null,
    "name": null,
    "record_digits_variable": null,
    "interval": null,
    "final": true,
    "transfer_dst": null,
    "context": null,
    "action": "play_sound",
    "set_variable_value": null,
    "call_interactive_timeout": null,
    "record_digits_sound": null
  }
]

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

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/"},{"type":"text","text":"extension/204/ivr/context/1/options/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"\"digits\": \"1\""},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{digits\": \"1\"}' \\\n-X POST ${url}/extension/204/ivr/context/1/options/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\nimport json\n\r\nurl = f'{URL}/extension/204/ivr/context/1/options/'\r\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'content-type': 'application/json'\r\n}\r\ndata = {\"digits\": \"1\"}\r\nresponse = requests.post(url, headers=headers, data=json.dumps(data))\r\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]

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

Code Block
languagejson
{
  "digits": "1"
}

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

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/"},{"type":"text","text":"extension/204/ivr/context/1/options/1/rules/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"\"transfer_dst\": \"+7987654321\","},{"type":"hardBreak"},{"type":"text","text":"\"action\": \"transfer\""},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"transfer_dst\": \"+7987654321\",\n  \"action\": \"transfer\"\n}' \\\n-X POST ${url}/extension/204/ivr/context/1/options/1/rules/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\n\r\nurl = f'{URL}/extension/204/ivr/context/1/options/1/rules/'\r\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'Content-Type': 'application/json'\r\n}\r\ndata = '''{\r\n    \"transfer_dst\": \"+7987654321\",\n    \"action\": \"transfer\"\n}'''\r\nresponse = requests.post(url, headers=headers, data=data)\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]
Expand
titleОтвет системы:
Code Block
languagejson
[
  {
    "transfer_variable": null,
    "call_status": "any",
    "play_digits_method": null,
    "voice_helper_classic_term": true,
    "caller_id": null,
    "voice_helper_final_count": null,
    "match_variable_value": null,
    "play_digits_variable": null,
    "call_interactive_method": null,
    "voice_helper_timeout": null,
    "id": 3,
    "record_digits_max": null,
    "voice_helper_digits_max": null,
    "match_variable_name": null,
    "caller_id_action": "any",
    "context_option": null,
    "silence_time": null,
    "set_variable_name": null,
    "caller_id_number": null,
    "hangup_cause": "normal",
    "record_digits_timeout": null,
    "sound": null,
    "sound_type": null,
    "call_interactive_url": null,
    "max_rate": 5,
    "caller_id_name": null,
    "voice_helper_rules": null,
    "transfer_timeout": null,
    "digits": null,
    "name": null,
    "record_digits_variable": null,
    "interval": null,
    "final": true,
    "transfer_dst": "+7987654321",
    "context": null,
    "action": "transfer",
    "set_variable_value": null,
    "call_interactive_timeout": null,
    "record_digits_sound": null
  }
]

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

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/"},{"type":"text","text":"extension/204/ivr/context/1/options/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"\"digits\": \"2\""},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{digits\": \"2\"}' \\\n-X POST ${url}/extension/204/ivr/context/1/options/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\nimport json\r\n\r\nurl = f'{URL}/extension/204/ivr/context/1/options/'\r\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'content-type': 'application/json'\r\n}\r\ndata = {\"digits\": \"2\"}\r\nresponse = requests.post(url, headers=headers, data=json.dumps(data))\r\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]

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

Code Block
languagejson
{
  "digits": "2"
}
Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/"},{"type":"text","text":"extension/204/ivr/context/1/options/2/rules/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"\"transfer_dst\": \"002\","},{"type":"hardBreak"},{"type":"text","text":"\"action\": \"transfer\""},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"transfer_dst\": \"002\",\n  \"action\": \"transfer\"\n}' \\\n-X POST ${url}/extension/204/ivr/context/1/options/2/rules/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\n\r\nurl = f'{URL}/extension/204/ivr/context/1/options/2/rules/'\r\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'Content-Type': 'application/json'\r\n}\r\ndata = '''{\r\n    \"transfer_dst\": \"002\",\r\n    \"action\": \"transfer\"\r\n}'''\r\nresponse = requests.post(url, headers=headers, data=data)\r\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]
Expand
titleОтвет системы:
Code Block
languagejson
[
  {
    "transfer_variable": null,
    "call_status": "any",
    "play_digits_method": null,
    "voice_helper_classic_term": true,
    "caller_id": null,
    "voice_helper_final_count": null,
    "match_variable_value": null,
    "play_digits_variable": null,
    "call_interactive_method": null,
    "voice_helper_timeout": null,
    "id": 4,
    "record_digits_max": null,
    "voice_helper_digits_max": null,
    "match_variable_name": null,
    "caller_id_action": "any",
    "context_option": null,
    "silence_time": null,
    "set_variable_name": null,
    "caller_id_number": null,
    "hangup_cause": "normal",
    "record_digits_timeout": null,
    "sound": null,
    "sound_type": null,
    "call_interactive_url": null,
    "max_rate": 5,
    "caller_id_name": null,
    "voice_helper_rules": null,
    "transfer_timeout": null,
    "digits": null,
    "name": null,
    "record_digits_variable": null,
    "interval": null,
    "final": true,
    "transfer_dst": "002",
    "context": null,
    "action": "transfer",
    "set_variable_value": null,
    "call_interactive_timeout": null,
    "record_digits_sound": null
  }
]

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

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"POST"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/ivr/144/context/2/options/timeout/rules/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"{"},{"type":"hardBreak"},{"type":"text","text":"\"transfer_dst\": \"050\","},{"type":"hardBreak"},{"type":"text","text":"\"action\": \"transfer\""},{"type":"hardBreak"},{"type":"text","text":"}"}]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n  \"transfer_dst\": \"050\",\n  \"action\": \"transfer\"\n}' \\\n-X POST ${url}/ivr/144/context/2/options/timeout/rules/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\n\r\nurl = f'{URL}/ivr/144/context/2/options/timeout/rules/'\r\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}',\r\n    'Content-Type': 'application/json'\r\n}\r\ndata = '''{\r\n    \"transfer_dst\": \"050\",\r\n    \"action\": \"transfer\"\r\n}'''\nresponse = requests.post(url, headers=headers, data=data)\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]
Expand
titleОтвет системы:
Code Block
languagejson
[
  {
    "transfer_variable": null,
    "call_status": "any",
    "play_digits_method": null,
    "voice_helper_classic_term": true,
    "caller_id": null,
    "voice_helper_final_count": null,
    "match_variable_value": null,
    "play_digits_variable": null,
    "call_interactive_method": null,
    "voice_helper_timeout": null,
    "id": 5,
    "record_digits_max": null,
    "voice_helper_digits_max": null,
    "match_variable_name": null,
    "caller_id_action": "any",
    "context_option": null,
    "silence_time": null,
    "set_variable_name": null,
    "caller_id_number": null,
    "hangup_cause": "normal",
    "record_digits_timeout": null,
    "sound": null,
    "sound_type": null,
    "call_interactive_url": null,
    "max_rate": 5,
    "caller_id_name": null,
    "voice_helper_rules": null,
    "transfer_timeout": null,
    "digits": null,
    "name": null,
    "record_digits_variable": null,
    "interval": null,
    "final": true,
    "transfer_dst": "050",
    "context": null,
    "action": "transfer",
    "set_variable_value": null,
    "call_interactive_timeout": null,
    "record_digits_sound": null
  }
]

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

Tabs
[{"content":{"version":1,"type":"doc","content":[{"type":"table","attrs":{"isNumberColumnEnabled":false,"layout":"default"},"content":[{"type":"tableRow","content":[{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"метод","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"ресурс","marks":[{"type":"strong"}]}]}]},{"type":"tableHeader","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"данные","marks":[{"type":"strong"}]}]}]}]},{"type":"tableRow","content":[{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"GET"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[{"type":"text","text":"/extension/204/ivr/context/1/options/"}]}]},{"type":"tableCell","attrs":{},"content":[{"type":"paragraph","content":[]}]}]}]},{"type":"paragraph","content":[]}]},"id":"e433425a-80c0-4654-9c26-ae8438200283","label":"Интерактивный обозреватель API    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"shell"},"content":[{"type":"text","text":"curl \\\n-H \"Authorization: Bearer ${access_token}\" \\\n-X GET ${url}/extension/204/ivr/context/1/options/"}]}]},"id":"76da8a13-12b5-4502-9a84-17e2419648f4","label":"Программа cURL    ","type":"tab"},{"content":{"version":1,"type":"doc","content":[{"type":"codeBlock","attrs":{"language":"python"},"content":[{"type":"text","text":"#!/usr/bin/python\r\n\r\nimport requests\r\n\r\nurl = f'{URL}/extension/204/ivr/context/1/options/'\r\nheaders = {\r\n    'Authorization': f'Bearer {ACCESS_TOKEN}'\r\n}\r\nresponse = requests.get(url, headers=headers)\r\nprint(response.text)"}]}]},"id":"0ad01272-b463-4325-8f20-50f3d878abd3","label":"На языке Python3    ","type":"tab"}]

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

Code Block
languagejson
[
  {
    "digits": "start"
  },
  {
    "digits": "timeout"
  },
  {
    "digits": "invalid"
  },
  {
    "digits": "2"
  },
  {
    "digits": "1"
  }
]

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

Expand
titlePUT /extension/{extension_id}/ivr/

PUT /extension/{extension_id}/ivr/

Обновить конфигурацию голосового меню

Параметры URL

Имя

Тип

extension_id

string

Параметры JSON

Имя

Тип

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

entry_context

long

нет

lifetime

long

нет

lifetime_exp_action

string

нет

lifetime_exp_transfer_dst

string

нет

sleep_time

long

нет

vm_attach_file

boolean

нет

vm_enabled

boolean

нет

vm_greeting

long

нет

vm_mailto

string

нет

Поля ответа

Имя

Тип

entry_context

long

lifetime

long

lifetime_exp_action

string

lifetime_exp_transfer_dst

string

sleep_time

long

vm_enabled

boolean

vm_greeting

long

vm_attach_file

boolean

vm_mailto

string

Expand
titleGET /extension/{extension_id}/ivr/

GET /extension/{extension_id}/ivr/

Получить конфигурацию голосового меню

Параметры URL

Имя

Тип

extension_id

string

Поля ответа

Имя

Тип

entry_context

long

lifetime

long

lifetime_exp_action

string

lifetime_exp_transfer_dst

string

sleep_time

long

vm_attach_file

boolean

vm_enabled

boolean

vm_greeting

long

vm_mailto

string

Expand
titlePOST /extension/{extension_id}/ivr/context/

POST /extension/{extension_id}/ivr/context/

Добавить контекст голосового меню

Параметры URL

Имя

Тип

extension_id

string

Параметры JSON

Имя

Тип

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

timeout

long

нет

allow_any_dial

boolean

нет

inter_digit_timeout

long

нет

name

string

да

digit_len

long

нет

Поля ответа

Имя

Тип

name

string

inter_digit_timeout

long

timeout

long

allow_any_dial

boolean

id

long

digit_len

long

Expand
titleGET /extension/{extension_id}/ivr/context/

GET /extension/{extension_id}/ivr/context/

Получить список контекстов голосового меню

Параметры URL

Имя

Тип

extension_id

string

Поля ответа

Имя

Тип

name

string

inter_digit_timeout

long

timeout

long

allow_any_dial

boolean

id

long

digit_len

long

Expand
titlePUT /extension/{extension_id}/ivr/context/{context_id}

PUT /extension/{extension_id}/ivr/context/{context_id}

Обновить контекст голосового меню

Параметры URL

Имя

Тип

context_id

long

extension_id

string

Параметры JSON

Имя

Тип

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

timeout

long

нет

allow_any_dial

boolean

нет

inter_digit_timeout

long

нет

name

string

нет

digit_len

long

нет

Поля ответа

Имя

Тип

name

string

inter_digit_timeout

long

timeout

long

allow_any_dial

boolean

id

long

digit_len

long

Expand
titleGET /extension/{extension_id}/ivr/context/{context_id}

GET /extension/{extension_id}/ivr/context/{context_id}

Получить контекст голосового меню

Параметры URL

Имя

Тип

context_id

integer

extension_id

string

Поля ответа

Имя

Тип

name

string

inter_digit_timeout

long

timeout

long

allow_any_dial

boolean

id

long

digit_len

long

Expand
titleDELETE /extension/{extension_id}/ivr/context/{context_id}

DELETE /extension/{extension_id}/ivr/context/{context_id}

Удалить контекст голосового меню

Параметры URL

Имя

Тип

context_id

integer

extension_id

string

Expand
titlePOST /extension/{extension_id}/ivr/context/{context_id}/options/

POST /extension/{extension_id}/ivr/context/{context_id}/options/

Добавить опцию контекста голосового меню

Параметры URL

Имя

Тип

context_id

integer

extension_id

string

Параметры JSON

Имя

Тип

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

digits

string

да

Поля ответа

Имя

Тип

digits

string

Expand
titleGET /extension/{extension_id}/ivr/context/{context_id}/options/

GET /extension/{extension_id}/ivr/context/{context_id}/options/

Получить список опций контекста голосового меню

Параметры URL

Имя

Тип

context_id

integer

extension_id

string

Поля ответа

Имя

Тип

digits

string

Expand
titleDELETE /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}

DELETE /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}

Удалить опцию контекста голосового меню

Параметры URL

Имя

Тип

context_id

integer

extension_id

string

option_digits

string

Expand
titlePOST /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/

POST /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/

Добавить правило контекста голосового меню

Параметры URL

Имя

Тип

context_id

integer

extension_id

string

option_digits

string

Параметры JSON

Имя

Тип

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

action

string

да

call_interactive_method

string

нет

call_interactive_timeout

long

нет

call_interactive_url

string

нет

call_status

string

нет

caller_id

string

нет

caller_id_action

string

нет

caller_id_name

string

нет

caller_id_number

string

нет

context

long

нет

context_option

string

нет

digits

string

нет

final

boolean

нет

hangup_cause 

string

нет

interval

long

нет

match_variable_name

string

нет

match_variable_value

string

нет

max_rate

long

нет

name

string

нет

order_position

string

нет

play_digits_method

string

нет

play_digits_variable

string

нет

record_digits_max

long

нет

record_digits_sound

long

нет

record_digits_timeout 

long

нет

record_digits_variable

string

нет

set_variable_name

string

нет

set_variable_value

string

нет

silence_time

long

нет

sound

long

нет

sound_type

string

нет

transfer_dst

string

нет

transfer_variable

string

нет

Поля ответа

Имя

Тип

action

string

call_interactive_method

string

call_interactive_timeout

long

call_interactive_url

string

call_status

string

caller_id

string

caller_id_action

string

caller_id_name

string

caller_id_number

string

context

long

context_option

string

digits

string

final

boolean

hangup_cause 

string

id

long

interval

long

match_variable_name

string

match_variable_value

string

max_rate

long

name

string

play_digits_method

string

play_digits_variable

string

record_digits_max

long

record_digits_sound

long

record_digits_timeout 

long

record_digits_variable

string

set_variable_name

string

set_variable_value

string

silence_time

long

sound

long

sound_type

string

transfer_dst

string

transfer_timeout 

long

transfer_variable

string

Expand
titleGET /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/

GET /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/

Получить список правил контекста голосового меню

Параметры URL

Имя

Тип

context_id

integer

extension_id

string

option_digits

string

Поля ответа

Имя

Тип

action

string

call_interactive_method

string

call_interactive_timeout

long

call_interactive_url

string

call_status

string

caller_id

string

caller_id_action

string

caller_id_name

string

caller_id_number

string

context

long

context_option

string

digits

string

final

boolean

hangup_cause 

string

id

long

interval

long

match_variable_name

string

match_variable_value

string

max_rate

long

name

string

play_digits_method

string

play_digits_variable

string

record_digits_max

long

record_digits_sound

long

record_digits_timeout 

long

record_digits_variable

string

set_variable_name

string

set_variable_value

string

silence_time

long

sound

long

sound_type

string

transfer_dst

string

transfer_timeout 

long

transfer_variable

string

Expand
titlePUT /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/order/

PUT /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/order/

Обновить порядок правил опций контекста голосового меню

Параметры URL

Имя

Тип

context_id

integer

extension_id

string

option_digits

string

Параметры JSON

Имя

Тип

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

rules_ids

long

да

Поля ответа

Имя

Тип

rules_ids

long

Expand
titleGET /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/order/

GET /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/order/

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

Параметры URL

Имя

Тип

context_id

integer

extension_id

string

option_digits

string

Поля ответа

Имя

Тип

rules_ids

long

Expand
titlePUT /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/{rule_id}

PUT /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/{rule_id}

Обновить правило контекста голосового меню

Параметры URL

Имя

Тип

context_id

integer

option_digits

string

rule_id

integer

extension_id

string

Параметры JSON

Имя

Тип

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

action

string

да

call_interactive_method

string

нет

call_interactive_timeout

long

нет

call_interactive_url

string

нет

call_status

string

нет

caller_id

string

нет

caller_id_action

string

нет

caller_id_name

string

нет

caller_id_number

string

нет

context

long

нет

context_option

string

нет

digits

string

нет

final

boolean

нет

hangup_cause 

string

нет

interval

long

нет

match_variable_name

string

нет

match_variable_value

string

нет

max_rate

long

нет

name

string

нет

play_digits_method

string

нет

play_digits_variable

string

нет

record_digits_max

long

нет

record_digits_sound

long

нет

record_digits_timeout 

long

нет

record_digits_variable

string

нет

set_variable_name

string

нет

set_variable_value

string

нет

silence_time

long

нет

sound

long

нет

sound_type

string

нет

transfer_dst

string

нет

transfer_timeout 

long

нет

transfer_variable

string

нет

Поля ответа

Имя

Тип

action

string

call_interactive_method

string

call_interactive_timeout

long

call_interactive_url

string

call_status

string

caller_id

string

caller_id_action

string

caller_id_name

string

caller_id_number

string

context

long

context_option

string

digits

string

final

boolean

hangup_cause 

string

id

long

interval

long

match_variable_name

string

match_variable_value

string

max_rate

long

name

string

play_digits_method

string

play_digits_variable

string

record_digits_max

long

record_digits_sound

long

record_digits_timeout 

long

record_digits_variable

string

set_variable_name

string

set_variable_value

string

silence_time

long

sound

long

sound_type

string

transfer_dst

string

transfer_timeout 

long

transfer_variable

string

Expand
titleGET /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/{rule_id}

GET /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/{rule_id}

Получить правило контекста голосового меню

Параметры URL

Имя

Тип

context_id

integer

option_digits

string

rule_id

integer

extension_id

string

Поля ответа

Имя

Тип

action

string

call_interactive_method

string

call_interactive_timeout

long

call_interactive_url

string

call_status

string

caller_id

string

caller_id_action

string

caller_id_name

string

caller_id_number

string

context

long

context_option

string

digits

string

final

boolean

hangup_cause 

string

id

long

interval

long

match_variable_name

string

match_variable_value

string

max_rate

long

name

string

play_digits_method

string

play_digits_variable

string

record_digits_max

long

record_digits_sound

long

record_digits_timeout 

long

record_digits_variable

string

set_variable_name

string

set_variable_value

string

silence_time

long

sound

long

sound_type

string

transfer_dst

string

transfer_timeout 

long

transfer_variable

string

Expand
titleDELETE /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/{rule_id}

DELETE /extension/{extension_id}/ivr/context/{context_id}/options/{option_digits}/rules/{rule_id}

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

Параметры URL

Имя

Тип

context_id

integer

option_digits

string

rule_id

integer

extension_id

string