Инструменты пользователя

Инструменты сайта


asterisk:holidays

Различия

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

Ссылка на это сравнение

asterisk:holidays [2016-09-30 16:52] (текущий)
Строка 1: Строка 1:
 +====== Asterisk: Распределение входящих вызовов в зависимости от времени и праздничности дня ======
 +FIXME
  
 +Решение для распределения звонков по времени суток встроено в asterisk и называется GotoIfTime
 +
 +Пример
 +<​code>​
 +exten => s,​1,​GotoIfTime(09:​00-18:​00|mon-fri|*|*?​menu-work,​s,​1)
 +same => n,​Goto(menu-closed,​s,​1)
 +</​code>​
 +В данном примере если вызов приходит с 9 утра до 6 вечера в будни, то вызов уходит в ivr с названием menu-work. В остальных случаях вызов уходит в ivr menu-closed.
 +
 +Теперь добавим немного изюминки.
 +
 +Начнём издалека.\\
 +Находим расписание государственных праздников на сайте ЦБ РФ. Для 2015 года -> http://​www.cbr.ru/​other/​print.asp?​file=holidays_2015.htm \\
 +В адресе ссылки меняется только год, так что можно потом сделать парсер странички и руками вообще ничего не делать =)
 +
 +Переходим к составлению таблицы праздников. Использовать будем внутренную базу данных asterisk, она простая,​ но нам хватит. Для начала напишу скрипт,​ потом опишу что и как.
 +
 +
 +<code bash/​etc/​asterisk/​scripts/​holidays.sh>​
 +#!/bin/bash
 +asterisk -rx '​database put holiday 20140101 1'
 +asterisk -rx '​database put holiday 20140102 1'
 +asterisk -rx '​database put holiday 20140103 1'
 +asterisk -rx '​database put holiday 20140104 1'
 +asterisk -rx '​database put holiday 20140105 1'
 +asterisk -rx '​database put holiday 20140106 1'
 +asterisk -rx '​database put holiday 20140107 1'
 +asterisk -rx '​database put holiday 20140108 1'
 +asterisk -rx '​database put holiday 20140223 1'
 +asterisk -rx '​database put holiday 20140308 1'
 +asterisk -rx '​database put holiday 20140310 1'
 +asterisk -rx '​database put holiday 20140501 1'
 +asterisk -rx '​database put holiday 20140502 1'
 +asterisk -rx '​database put holiday 20140509 1'
 +asterisk -rx '​database put holiday 20140612 1'
 +asterisk -rx '​database put holiday 20140613 1'
 +asterisk -rx '​database put holiday 20141103 1'
 +asterisk -rx '​database put holiday 20141103 1'
 +exit
 +</​code>​
 +
 +**asterisk -rx '​команда'​** - выполнение команды в cli asterisk и выход\\
 +**database put holiday** - добавление ветки holiday в базу данных asterisk\\
 +**20140101** - дата в формате ГодМесяцДень\\
 +**1** - вкл\\
 +
 +Теперь надо встроить обработку всей этой байды в наш диалплан
 +
 +Пример
 +<​code>​
 +[incoming]
 +exten => s,​1,​Answer()
 + same => n,​Set(HOLIDAY=${DB_EXISTS(holiday/​${STRFTIME(${EPOCH},,​%Y%m%d)})})
 + same => n,​GotoIf($["​${HOLIDAY}"​ == "​1"​]?​holidays;​worktime)
 + same => n(worktime),​GotoIfTime(09:​00-18:​00|mon-fri|*|*?​menu-work,​s,​1)
 + same => n,​Goto(menu-closed,​s,​1)
 + same => n(holidays),​Goto(menu-holidays,​s,​1)
 +</​code>​
 +
 +Описание
 +
 +  - строка - поднятие трубки
 +  - строка - проверка в базе данных ветки holiday за дату звонка (ГодМесяцДень)
 +  - строка - если значение 1, переход на 6 строку и переход в menu-holidays,​ если значение 0, переход на 4 строку и проверка времени
 +  - строка - проверка рабочее/​нерабочее время, если попадает по описанные условия,​ то рабочее и переход на строку 5 в menu-work
 +  - строка - переход в menu-closed
 +  - строка - переход в menu-holidays
 +
 +Если где-то накосячили и надо удалить ветку в базе, выполняем
 +<​code>​
 +database deltree holiday
 +</​code>​
 +
 +Если надо удалить только одну запись,​ то
 +<​code>​
 +database del holiday 20140101
 +</​code>​
 +
 +
 +{{tag>​Asterisk}}
asterisk/holidays.txt · Последние изменения: 2016-09-30 16:52 (внешнее изменение)