Запрос к таблице с номерами на SQL сервере. HowTo?

Ответы на вопросы "А может ли он сделать такое..?" или "Как сделать вот это..?"
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение sannx »

Про главное. Зачем вам поля "Count", "DialWasTimes" и "Active"? Как я понял, Active вы просто скопировали с моего примера, а реально не используете. А "Count" и "DialWasTimes" дублируют друг друга.
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение sannx »

Код: Выделить всё

;Общие настройки
[General]
SrcName="SQLex"
Version=1
;Для MS SQL скорее всего надо указать такой формат даты-времени:
DateTimeFormat="yyyy-mm-dd h:mm:ss"

;Необработанные номера
[Unprocessed]
Priority=0
Query="select ID, Phone from Obzvon where Active=1 and Processing='False' and Status=0 and CAST(NextCallDate AS DATE)=CAST(GetDate() AS DATE) order by ID"
ID="ID"
Number="Phone"

;Номера со статусом "Занято"
[Busy]
Priority=1
Query="select ID, Phone, DialLastEnd from Obzvon where Status=2 and Processing='False' and Count<~RepeatBusy~ order by DialLastEnd"
ID="ID"
Number="Phone"
EndTime="DialLastEnd"

;Номера со статусом "Не отвечает"
[NotAnswered]
Priority=2
Query="select ID, Phone, DialLastEnd from Obzvon where Status=3 and Processing='False' and Count<~RepeatNoAnswer~ order by DialLastEnd, ID"
ID="ID"
Number="Phone"
EndTime="DialLastEnd"

;Номера со статусом "Другое или неверный код"
[Other]
Priority=3
Query="select ID, Phone, DialLastEnd from Obzvon where Status=3 and Processing='False' and Count<~RepeatOther~ order by DialLastEnd, ID"
ID="ID"
Number="Phone"
EndTime="DialLastEnd"

;Перед обзвоном очередного номера
[BeforeDialNumber]
Query="update Obzvon set Processing='True', Count=Count+1 where ID=~NumID~"

;После обзвона очередного номера
;Статус: 0 - не обработан, 1 - успех, 2 - занято, 3 - не отвечает, 4 - другое или неверный код"
[AfterDialNumber]
Query="if ~Status~=1 update Obzvon set Processing='False', Status=0, DialLastEnd=GetDate() NextCallDate=DateAdd(day, 15, NextCallDate) where ID=~NumID~ else update Obzvon set Processing='False', Status=~Status~, DialLastEnd=GetDate() where ID=~NumID~; "

;Если обзвон был прерван
[DialBreak]
Query="update Obzvon set Processing='False', DialLastEnd=GetDate(), Status=4 where ID=~NumID~"
В настройках дозвона укажите звонить 10 раз через 1 час. А также укажите считать успехом, если абонент прослушал не до конца.

К сожалению, в Автообзвоне нельзя посмотреть состояние номеров из вашей БД при обзвоне. Можно лишь видеть информацию по номерам, которые обрабатываются в данный момент.
iStan
Сообщения: 37
Зарегистрирован: 02 апр 2013, 18:24

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение iStan »

Спасибо! Но есть вопросы...

Секция необработанных

Код: Выделить всё

;Необработанные номера
[Unprocessed]
Priority=0
Query="select ID, Phone from Obzvon where Processing='False' and Status=0 and CAST(NextCallDate AS DATE)=CAST(GetDate() AS DATE) order by ID"
ID="ID"
Number="Phone"
1. Здесь Active тоже наверно не нужен? Вроде нигде больше в апдейтах не используется.
2. Я забыл добавить, что кол-во успешных дозвонов д.б. ДВА. После этого номер можно убрать из необработанных. Наверно, это реализуется в следующем коде (ниже). Поправьте, если не прав.

Код: Выделить всё

;Необработанные номера
[Unprocessed]
Priority=0
Query="select ID, Phone from Obzvon where Active=1 and Processing='False' and Status=0 and CAST(NextCallDate AS DATE)=CAST(GetDate() AS DATE)  And DialWasTimes<2 order by ID"
ID="ID"
Number="Phone"
Секция после обзвона

Код: Выделить всё

;После обзвона очередного номера
;Статус: 0 - не обработан, 1 - успех, 2 - занято, 3 - не отвечает, 4 - другое или неверный код"
[AfterDialNumber]
Query="if ~Status~=1 update Obzvon set Processing='False', Status=0, DialWasTimes=DialWasTimes+1, DialLastEnd=GetDate(), NextCallDate=DateAdd(day, 15, NextCallDate)   where ID=~NumID~ else update Obzvon set Processing='False', Status=~Status~, DialLastEnd=GetDate() where ID=~NumID~; "
3. Добавил поле DialWasTimes для выполнения 2-го пункта. Начальное значение =0;

Секция брэйк

Код: Выделить всё

;Если обзвон был прерван
[DialBreak]
Query="update Obzvon set Processing='False', DialLastEnd=GetDate(), Status=4 where ID=~NumID~"
4. Статус 4 будет установлен только на одном номере, в момент которого прервали обзвон?

Вопрос по алгоритму. Ниже Алгоритм из хелпа.

Код: Выделить всё

[b]Стандартный механизм автообзвона[/b]
Команда «Начать автообзвон» будет содержать следующие действия: 
1. Выбрать номер из БД SpRobot 
  выбрать номер со статусом «Не обработан» 
если номер есть, то перейти к шагу 2
   выбрать номер со статусом «Занят» 
если номер есть и с момента, когда завершился обзвон этого номера в предыдущий раз, прошло указанное в       настройках время, то перейти к шагу 2
выбрать номер со статусом «Не отвечает» 
если номер есть и с момента, когда завершился обзвон этого номера в предыдущий раз, прошло указанное в настройках время, то перейти к шагу 2
выбрать номер со статусом «Другое или неверный код» 
если номер есть и с момента, когда завершился обзвон этого номера в предыдущий раз, прошло указанное в настройках время, то перейти к шагу 2
если номер есть 
если время для очередного обзвона не наступило, то выйти из этой команды и подождать 5 сек.
иначе завершить весь автообзвон 
2. получить данные об абоненте (числа, суммы, дата/время) 
3. указать в БД для выбранного номера, что он обрабатывается (поле Processing='True'), записать время начала обзвона и увеличить счетчик количества звонков на этот номер на 1
 
5. Насколько я понял, номера СО ВСЕМИ статусами обрабатываются "равномерно". Т.е. сначала 0, потом 2, 3, 4?
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение sannx »

А зачем кол-во успешных дозвонов должно быть 2?
iStan
Сообщения: 37
Зарегистрирован: 02 апр 2013, 18:24

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение iStan »

А зачем кол-во успешных дозвонов должно быть 2?

- Затем, что через автообзвон идет уведомление клиентов о том, что им пора сделать профилактику. Первый раз - за 30 дней, а второй раз - за 15 дней. На этом все.
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение sannx »

Можно так:

Код: Выделить всё

;Необработанные номера
[Unprocessed]
Priority=0
Query="select ID, Phone from Obzvon where Processing='False' and Status=0 and (CAST(NextCallDate30 AS DATE)=CAST(GetDate() AS DATE) or CAST(NextCallDate15 AS DATE)=CAST(GetDate() AS DATE) order by ID"
ID="ID"
Number="Phone"
Можно добавить еще поля NextCallDate30 и NextCallDate15 - звонить за 30 и за 15 дней до профилактики.
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение sannx »

5. Сначала обрабатываются все номера с со статусом 0, потом все со статусом 2, потом 3, потом 4. Причем приоритет статусов вы задаете в соотв-щей секции.

Осталось только секцию [AfterDialNumber] изменить так, чтобы он обнулял только ту дату, по которой идет обзвон: NextCallDate30 = null или NextCallDate15 = null.
iStan
Сообщения: 37
Зарегистрирован: 02 апр 2013, 18:24

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение iStan »

Сделал так, все работает!
Единственное, жаль что SPROBOT НЕ УМЕЕТ ДЕКОМПИЛИТЬ сохраненные программы дозвона, т.е. нельзя посмотреть, а чего же там понастроено...

Ниже рабочие настройки для моего алгоритма. Больше ничего не надо. Сам Алгоритм создается на соответствующей вкладке, и если надо, модифицируется в конструкторе. Дальше устанавливаем параметры (кол-во попыток, и паузы между ними) и добавляем расписание. READY? GO!

Код: Выделить всё

;Общие настройки
[General]
SrcName="SQLex"
Version=1
DateTimeFormat="dd.mm.yyyy h:mm:ss"

;Необработанные номера
[Unprocessed]
Priority=0
Query="select ID, Phone from Obzvon where Processing='False' and Status=0 and CONVERT(Varchar(10),NextCallDate,104) = CONVERT(Varchar(10),GetDate(),104) And DialWasTimes<2 order by ID"
ID="ID"
Number="Phone"

;Номера со статусом "Занято"
[Busy]
Priority=1
Query="select ID, Phone, DialLastEnd from Obzvon where Status=2 and Processing='False' and Count<~RepeatBusy~ order by DialLastEnd"
ID="ID"
Number="Phone"
EndTime="DialLastEnd"

;Номера со статусом "Не отвечает"
[NotAnswered]
Priority=2
Query="select ID, Phone, DialLastEnd from Obzvon where Status=3 and Processing='False' and Count<~RepeatNoAnswer~ order by DialLastEnd, ID"
ID="ID"
Number="Phone"
EndTime="DialLastEnd"

;Номера со статусом "Другое или неверный код"
[Other]
Priority=3
Query="select ID, Phone, DialLastEnd from Obzvon where Status=4 and Processing='False' and Count<~RepeatOther~ order by DialLastEnd, ID"
ID="ID"
Number="Phone"
EndTime="DialLastEnd"

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Перед обзвоном очередного номера
[BeforeDialNumber]
Query="update Obzvon set Processing='True', Count=Count + 1 where ID=~NumID~"

;После обзвона очередного номера
;Статус: 0 - не обработан, 1 - успех, 2 - занято, 3 - не отвечает, 4 - другое или неверный код"
[AfterDialNumber]
Query="if ~Status~=1 update Obzvon set Processing='False', Status=0, DialWasTimes=DialWasTimes+1, DialLastEnd=GetDate(), NextCallDate=DATEADD(DAY,15,CONVERT(Varchar(10),GetDate(),104)) where ID=~NumID~ else update Obzvon set Processing='False', Status=~Status~, DialLastEnd=GetDate() where ID=~NumID~; "

;Если обзвон был прерван
[DialBreak]
Query="update Obzvon set Processing='False', DialLastEnd=GetDate(), Status=4 where ID=~NumID~"

;Сброс номеров в начальное состояние при запуске программы автообзвона
[ResetNumbers]
Query="update Obzvon set Processing='False', Count=0"
sannx - спасибо за оперативную помощь!
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение sannx »

Хм.. Работать норм не будет. Вот ситуация: 1й дозвон - результат "занято". 2й дозвон - успешно обработан. В результате DialWasTimes будет равен 2. А значит этот номер не попадет для обвона через 15 дней. Вот думайте.
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение sannx »

И не понял, что за декомпиляция? Зачем она вам? И как вы это видите?
iStan
Сообщения: 37
Зарегистрирован: 02 апр 2013, 18:24

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение iStan »

1. DialWasTimes инкрементируется только в случае УСПЕШНОГО дозвона.
2. Я назвал ДЕКОМПИЛЯЦИЕЙ (т.к. при сохранение программы - написано, что идет компиляция) просмотр "содержимого" сохраненной программы дозвона, т.е ее настройки, ее алгоритм...
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение sannx »

1. Ага. Дозвоны в моем примере - это обзвон номера для данного числа, например, за 30 дней до часа Х. Т.е. первый звонок - занято, через 10 мин снова звонок - успешно. И тогда DialWasTimes будет равен 2. А значит этот номер не попадет для обзвона через 15 дней.
2. Почему нельзя? Загрузите соотв-щую программу дозвона, и все ее настройки вы увидите в разделах "Список номеров, Настройки дозвона, Алгоритм, Расписание".
iStan
Сообщения: 37
Зарегистрирован: 02 апр 2013, 18:24

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение iStan »

2. Как это, загрузить? Я могу только даб-кликом запустить ее, к примеру. Но загрузить... Можно поподробней?
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение sannx »

см. в Справке: Автообзвон - Программа автообзвона.
iStan
Сообщения: 37
Зарегистрирован: 02 апр 2013, 18:24

Re: Запрос к таблице с номерами на SQL сервере. HowTo?

Сообщение iStan »

см. в Справке: Автообзвон - Программа автообзвона.
:shock:
Нашел!
Спасибо!))
Ответить