Нужно написать маршрутизатор звонков для asterisk, который будет переключать звонящего на сотрудника, с которым тот общался в последний раз.
Программа должна состоять из двух частей.
Демон, слушающий через AMI события и записывающий в БД последнего собеседника абонента. При этом записываются и входящие, и исходящие звонки, и учитываются трансферы.
Программа, в ответ на переданный номер звонящего сообщающая номер последнего абонента, либо сообщающая об ошибке поиска. Будет вызываться в диалплане Asterisk'а. Правила определения абонента таковы:
Если для номера нет ни одной записи в БД, возвращается ошибка.
Если для номера есть одна запись, возвращается абонент из этой записи.
Если для номера несколько записей, то анализируем три (или сколько есть) последних звонка:
Если все звонки - одному абоненту, возвращается этот абонент.
Если звонки совершены разным абонентам, то:
Если звонков два, возвращается последний абонент.
Если звонков три, и все совершены разным абонентам, возвращается ошибка.
Если звонков три, и два последних совершены одному абоненту, возвращается этот абонент.
Демон должен поддерживать механизм его мониторинга и перезапуска (pid-файл, например)
Время работы программы по определению абонента не должно превышать 200 мс при объеме тестовой базы в 20 000 абонентов, из которых 50% звонков - повторные. Эта программа должна спокойно относиться к тому, что одновременно будут запускаться несколько ее экземпляров.
Asterisk: 1.8
Язык: Python3.
Модули Python: те, которые можно поставить через официальный pip. При этом обязателен requirements.txt.
БД: MongoDB/MySQL на выбор
ОС: Ubuntu Linux
Готовы сделать тестовый сервер с реальными данными.
Предпочтение отдадим кандидатам, нашедшим логический изъян в алгоритме определения абонента.
Ждем вопросов и предложений по цене и срокам.