Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 20, 2015 11:37:52

Yana
От: Мурманск
Зарегистрирован: 2015-03-07
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyst3

Всем добрый день.
Только начала разбираться с Asterisk и совсем он мне не дается.
Но работу выполнить обязана.

Такая ситуация. через MySQLdb делаю выборку звонков. Получаю их в виде кортежа кортежей.
Если номер начинается на “7”, меняю её на “8”.
Потом нужно осуществить звонок на каждый из полученных номеров.
Звонок осуществляется с целью оценки работы операторов, которые общались как раз с теми, чьи номера я получила.

Получается так: я звоню, человек, номер которого я получила в выборке, берет трубку и ему играет Background с “Оцените работу специалиста бла бла бла…”.
Шкала оценки - 5 бальная.
В зависимости от того, какую кнопку нажал абонент, его мнение в виде цифры нужно сохранить в новой базе для собранных мнений.

Очень прошу помочь.

from django.http import HttpResponse
from django.template import Context, loader, Template
import MySQLdb
import re
import asterisk.manager
#---------------------------------------------------------------
def Mysql(request):
    db = MySQLdb.connect('<host базы,где хранятся входящие звонки>','root','<пароль>','<название базы>')
    cursor = db.cursor() # указвыаю курсор
    sql = "SELECT DISTINCT src FROM cdr WHERE calldate > NOW() - INTERVAL 1 HOUR AND dcontext LIKE '%<дконтекст>%'"
    cursor.execute(sql) # выполнение запроса, записанного в sql
    result = cursor.fetchall() # Вывод ВСЕХ запрошенных данных сразу
    db.close() # Завершаю соединение с базой данных
    replacement = [re.sub(r'^7', r'8',x[0])for x in result] # Замена начала номера "7" на "8" для осуществления звонка
    C = Context(dict(sql_data=replacement))
    T = loader.get_template('numbers.html')
    return HttpResponse(T.render(C)) # Вывожу все входящие номера
    manager = asterisk.manager.Manager()
    try:
        try:
            manager.connect('localhost') # Подключение к Астериску, указываю хост
            manager.login('yana','passwd') # Указываю пользователя и пароль из manager.conf
           call_for_numbers = manager.originate(channel='SIP/[должны быть номера из выборки]@multifon',exten= '',context='opinion-ivr',priority='1') # Ответом будет являться звонок
            
            calls = [(call_for_numbers, x[0]) for x in result] # Осуществление звонка на каждый из полученнх путем выборки номеров
        except: print('Error')
    except: pass

—–
Для выполнения этой работы заглядывала сюда: http://habrahabr.ru/post/147122/
Такая же таблица opinion есть.
сделала extension как в самой последней записи статьи.
Где идёт звонок, а выбор сразу заносится в базу данных.

Но как это всё связать с моим скриптом, не знаю.
Очень прощу помощи.

Офлайн

#2 Июнь 20, 2015 12:09:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Pyst3

Yana
    return HttpResponse(T.render(C)) # Вывожу все входящие номера
    manager = asterisk.manager.Manager()
После оператора return ничего не может стоять.



Офлайн

#3 Июнь 20, 2015 12:16:45

Yana
От: Мурманск
Зарегистрирован: 2015-03-07
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyst3

Я тогда просто перенесу блок кода с шаблоном и контекстом в самый конец. Это я просто для наглядности делала.
По сути код сейчас выглядит так:

from django.http import HttpResponse
from django.template import Context, loader, Template
import MySQLdb
import re
import asterisk.manager
#---------------------------------------------------------------
def Mysql(request):
    db = MySQLdb.connect('<host базы,где хранятся входящие звонки>','root','<пароль>','<название базы>')
    cursor = db.cursor() # указвыаю курсор
    sql = "SELECT DISTINCT src FROM cdr WHERE calldate > NOW() - INTERVAL 1 HOUR AND dcontext LIKE '%<дконтекст>%'"
    cursor.execute(sql) # выполнение запроса, записанного в sql
    result = cursor.fetchall() # Вывод ВСЕХ запрошенных данных сразу
    db.close() # Завершаю соединение с базой данных
    replacement = [re.sub(r'^7', r'8',x[0])for x in result] # Замена начала номера "7" на "8" для осуществления звонка
    manager = asterisk.manager.Manager()
    try:
        try:
            manager.connect('localhost') # Подключение к Астериску, указываю хост
            manager.login('yana','passwd') # Указываю пользователя и пароль из manager.conf
           call_for_numbers = manager.originate(channel='SIP/[должны быть номера из выборки]@multifon',exten= '',context='opinion-ivr',priority='1') # Ответом будет являться звонок
            
            calls = [(call_for_numbers, x[0]) for x in result] # Осуществление звонка на каждый из полученнх путем выборки номеров
        except: print('Error')
    except: pass

Офлайн

#4 Июнь 20, 2015 13:30:33

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9890
Репутация: +  854  -
Профиль   Отправить e-mail  

Pyst3

А зачем там внешний try ?

Yana
except: print('Error')
Отлавливать любое исключение не рекомендуется, так как неожиданная ошибка будет неправильно воспринята. (Например, деление на ноль может быть воспринято как ошибка базы данных.)
Нужно выяснить, какое порождается, и отлавливать его.

Yana
call_for_numbers = manager.originate(channel='SIP/[должны быть номера из выборки]@multifon'
Пример с какими-нибудь номерами приведи.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version