CallBack сценарий для Октелл или как удаленно пользоваться офисной телефонией

CallBack сценарий для Октелл или как удаленно пользоваться офисной телефонией

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

И так начнем с постановки задачи:

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

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

Итак начнем с подготовки таблиц в базе данных (БД):

создаю таблицу с зарегистрированными номерами следующего вида:

id- идентификатор (практически номер по-порядку)

aon- аон вызывающего абонента

num- набираемый номер со всеми префиксами (в моем случае 08+номер, т.к. префикс выхода на город-"0", 8-ка- для вызова федерального мобильного номера)

outaun- аон, который должен "уходить" в ТфОП

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

SQL-запрос на создание таблицы urg_callback:

CREATE TABLE [dbo].[urg_callback]( [id] [int] NOT NULL, [aon] [varchar](50) NULL, [num] [varchar](50) NULL, [outaon] [varchar](50) NULL, CONSTRAINT [PK_urg_callback] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

мне захотелось сохранить следы всех дозвонов в отдельной таблице и я сделал отдельную таблицу для лога:

id- идентификатор (практически номер по-порядку)

date- дата и времы вызова

aon- номер телефона звонящего

SQL-запрос на создание таблицы urg_callback_logs:

CREATE TABLE [dbo].[urg_callback_logs]( [id] [int] NOT NULL, [date] [varchar](max) NULL, [aon] [varchar](50) NULL, CONSTRAINT [PK_urg_callback_logs] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

Логика работы сценария по приему вызова:

Поступает вызов. (определяется АОН вызывающего абонента)

Происходит запрос в БД и проверка на наличие АОНА в БД

аон есть в БД аона нет в БД

ищется максимальное значение id (последняя запись) в таблице urg_callback_logs

делается запись в таблицу лога urg_callback_logs

|

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

вызывающему абоненту воспроизводится звуковой сигнал (файл ding.wav)

В течение 20-ти секунд абонент должен ввести "Пароль". В выложенном сценарии для примера я переделал под проверку текущей даты. В моем сценарии Вы должны ввести день, месяц, год и номер АОНа, который будет "уходить" в ТфОП при исходящем вызове с сервера.. Например: 140920124951234567

Происходит проверка на корректность введения пароля. В случае неправильного введенного пароля происходит "отбой" абонента. Если пароль введен правильно, то в таблицу urg_callback нашей БД вноситься новая запись с id на единицу больше, чем id последней записи. В таблицу добавляется: аон абонента (aon), формируется в зависимости от того городской или междугородний номер значение набираемого номера со всеми префиксами (num) и аон, отдаваемый в ТфОП (outaon)- то значение, которое мы вместе с паролем ввели.

Таким образов мы автоматически внесли в БД новый номер. Теперь при вызове нашего сценария с этого номера обработка вызова будет осуществляться по соседней ветке: " аон есть в БД "

Служебный Сценарий "Перезвон":

Здесь, я думаю, особо объяснять нет смысла. Происходит запрос в БД и поиск строки по параметру запуска, которым является аон абонента. Осуществляется набор номера (таблицf urg_callback) из столбца num с аоном outaon. У меня происходит одиночный набор номера. Можно сделать по типу автодозвона: повторение наборов в случае занятости или неответа абонента. Коку как нравится, мне этого не надо было.

После ответа абонента управление передается в IVR-сценарий однофамилец "Перезвон" с параметром запуска aon.

ИВР-сценарий "Перезвон":

В этом сценарии происходит запрос в БД для определения исходящего аона, передаваемого в ТфОП ( outaon ), затем абоненту дается возможность донабрать любой внешний номер. У меня сделано так, что необходимо вводить номер со всеми префиксами (0-выход на город, 8-для выхода на межгород). Конец набора номера- "#". После этого происходит набор номера во внешнюю сеть.

Еще маленькая доработка: если я ввожу 1 и #, то происходит удаление из БД записи с моим аоном.

📎📎📎📎📎📎📎📎📎📎