Форум сайта python.su
Всем добрый день.
Только начала разбираться с 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
Офлайн
YanaПосле оператора return ничего не может стоять.return HttpResponse(T.render(C)) # Вывожу все входящие номера manager = asterisk.manager.Manager()
Офлайн
Я тогда просто перенесу блок кода с шаблоном и контекстом в самый конец. Это я просто для наглядности делала.
По сути код сейчас выглядит так:
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
Офлайн
А зачем там внешний try ?
YanaОтлавливать любое исключение не рекомендуется, так как неожиданная ошибка будет неправильно воспринята. (Например, деление на ноль может быть воспринято как ошибка базы данных.)except: print('Error')
YanaПример с какими-нибудь номерами приведи.call_for_numbers = manager.originate(channel='SIP/[должны быть номера из выборки]@multifon'
Офлайн