1452
правки
Изменения
Нет описания правки
Так же обязательно нужно в карточках пользователей "Настройка" - "Пользователи" ввести внутренние номера абонентов. У пользователя может быть несколько номеров, перечисленных через запятую. При нажатии кнопки "Позвонить", программа будет соединять первый телефон из списка. При входящих звонках - будет показывать сообщение при звонке на любой из номеров в списке.
== Обратные запросы от Asterisk ==
Иногда возникает необходимость серверу телефонии получить данные из БД при входящем звонке. Для этого он напрямую подключается к MySQL, база данных courier. Приведем наиболее популярные задачи их решения:
*Звонит получатель, нужно его соединить с курьером, у которого находится его заказ. Такое особенно актуально, если мобильное приложение курьера звонит через офисную телефонию, у получателя определяется номер телефона офиса, и он перезванивает. Запрос ниже выдает сразу номер телефона курьера, с которым нужно соединить.
SELECT k.code, k.name, k.`phonem`, k.`phonek`
FROM contacts c JOIN givn g ON g.address=c.Source JOIN kurier k ON k.code=g.`kurier`
WHERE c.SourceCodeType=3 /*Контакты именно получателей*/
AND g.State=1 /*Статус "На руках у курьера"*/
AND c.VALUE='79161234567' /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
*Звонит курьер, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера курьера:
SELECT k.code, k.name, u.extPhone AS managerext
FROM contacts c JOIN kurier k ON k.code=c.Source JOIN users u ON u.`user`=k.`manager`
WHERE c.SourceCodeType=1 /*Контакты именно курьеров*/
AND c.VALUE='79161234567' /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
*Звонит клиент, нужно его соединить с менеджером. Запрос вернет внутренний номер менеджера клиента, а так же статус клиента. Запрос очень упрощен. По-хорошему надо в первую очередь смотреть контакты не столько привязанные к клиентам, сколько к их контактным лицам (таблица fio, код 39).
SELECT k.code, k.company, u.extPhone AS managerext, c.State
FROM contacts c JOIN clients k ON k.code=c.Source LEFT JOIN users u ON u.`user`=k.`manager`
WHERE c.SourceCodeType=2 /*Контакты именно клиентов*/
AND c.VALUE='79161234567' /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
* Определить просто отправление из тех, что в работе. Возвращает данные отправления, заказа и клиента
SELECT *
FROM contacts c JOIN address a on a.code=c.Source join zakaz b on a.zakaz=b.code join clients k on k.code=b.source
WHERE c.SourceCodeType=3 /*Контакты именно получателей*/
AND a.date_put is null /*Заказ в работе, не закрытый*/
AND c.VALUE='79161234567' /*Вот тут нормированный телефон звонящего ИМЕННО в таком формате*/
Конечно, при желании можно все это объединить в один запрос, и гораздо быстрее за одно действие получить информацию о том, кто это звонит, и что с ним надо делать. Здесь приведены только шаблонные запросы. В общих словах - таблица contacts содержит все индексированными контактные данные из всех таблиц системы (ну, из большинства). И все обращения за поиском по телефону должны заходить именно с нее. Коды таблиц для поля SourceCodeType можно посмотреть в таблице schema.table_list.