Запрос к таблице с номерами на SQL сервере. HowTo?
- sannx
- Администратор
- Сообщения: 2306
- Зарегистрирован: 02 ноя 2011, 14:00
- Skype: sann-x
- Контактная информация:
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
Про главное. Зачем вам поля "Count", "DialWasTimes" и "Active"? Как я понял, Active вы просто скопировали с моего примера, а реально не используете. А "Count" и "DialWasTimes" дублируют друг друга.
- sannx
- Администратор
- Сообщения: 2306
- Зарегистрирован: 02 ноя 2011, 14:00
- Skype: sann-x
- Контактная информация:
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
Код: Выделить всё
;Общие настройки
[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~"
К сожалению, в Автообзвоне нельзя посмотреть состояние номеров из вашей БД при обзвоне. Можно лишь видеть информацию по номерам, которые обрабатываются в данный момент.
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
Спасибо! Но есть вопросы...
Секция необработанных
1. Здесь Active тоже наверно не нужен? Вроде нигде больше в апдейтах не используется.
2. Я забыл добавить, что кол-во успешных дозвонов д.б. ДВА. После этого номер можно убрать из необработанных. Наверно, это реализуется в следующем коде (ниже). Поправьте, если не прав.
Секция после обзвона
3. Добавил поле DialWasTimes для выполнения 2-го пункта. Начальное значение =0;
Секция брэйк
4. Статус 4 будет установлен только на одном номере, в момент которого прервали обзвон?
Вопрос по алгоритму. Ниже Алгоритм из хелпа.
5. Насколько я понял, номера СО ВСЕМИ статусами обрабатываются "равномерно". Т.е. сначала 0, потом 2, 3, 4?
Секция необработанных
Код: Выделить всё
;Необработанные номера
[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"
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~; "
Секция брэйк
Код: Выделить всё
;Если обзвон был прерван
[DialBreak]
Query="update Obzvon set Processing='False', DialLastEnd=GetDate(), Status=4 where ID=~NumID~"
Вопрос по алгоритму. Ниже Алгоритм из хелпа.
Код: Выделить всё
[b]Стандартный механизм автообзвона[/b]
Команда «Начать автообзвон» будет содержать следующие действия:
1. Выбрать номер из БД SpRobot
выбрать номер со статусом «Не обработан»
если номер есть, то перейти к шагу 2
выбрать номер со статусом «Занят»
если номер есть и с момента, когда завершился обзвон этого номера в предыдущий раз, прошло указанное в настройках время, то перейти к шагу 2
выбрать номер со статусом «Не отвечает»
если номер есть и с момента, когда завершился обзвон этого номера в предыдущий раз, прошло указанное в настройках время, то перейти к шагу 2
выбрать номер со статусом «Другое или неверный код»
если номер есть и с момента, когда завершился обзвон этого номера в предыдущий раз, прошло указанное в настройках время, то перейти к шагу 2
если номер есть
если время для очередного обзвона не наступило, то выйти из этой команды и подождать 5 сек.
иначе завершить весь автообзвон
2. получить данные об абоненте (числа, суммы, дата/время)
3. указать в БД для выбранного номера, что он обрабатывается (поле Processing='True'), записать время начала обзвона и увеличить счетчик количества звонков на этот номер на 1
- sannx
- Администратор
- Сообщения: 2306
- Зарегистрирован: 02 ноя 2011, 14:00
- Skype: sann-x
- Контактная информация:
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
А зачем кол-во успешных дозвонов должно быть 2?
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
А зачем кол-во успешных дозвонов должно быть 2?
- Затем, что через автообзвон идет уведомление клиентов о том, что им пора сделать профилактику. Первый раз - за 30 дней, а второй раз - за 15 дней. На этом все.
- Затем, что через автообзвон идет уведомление клиентов о том, что им пора сделать профилактику. Первый раз - за 30 дней, а второй раз - за 15 дней. На этом все.
- sannx
- Администратор
- Сообщения: 2306
- Зарегистрирован: 02 ноя 2011, 14:00
- Skype: sann-x
- Контактная информация:
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
Можно так:
Можно добавить еще поля NextCallDate30 и NextCallDate15 - звонить за 30 и за 15 дней до профилактики.
Код: Выделить всё
;Необработанные номера
[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"
- sannx
- Администратор
- Сообщения: 2306
- Зарегистрирован: 02 ноя 2011, 14:00
- Skype: sann-x
- Контактная информация:
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
5. Сначала обрабатываются все номера с со статусом 0, потом все со статусом 2, потом 3, потом 4. Причем приоритет статусов вы задаете в соотв-щей секции.
Осталось только секцию [AfterDialNumber] изменить так, чтобы он обнулял только ту дату, по которой идет обзвон: NextCallDate30 = null или NextCallDate15 = null.
Осталось только секцию [AfterDialNumber] изменить так, чтобы он обнулял только ту дату, по которой идет обзвон: NextCallDate30 = null или NextCallDate15 = null.
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
Сделал так, все работает!
Единственное, жаль что SPROBOT НЕ УМЕЕТ ДЕКОМПИЛИТЬ сохраненные программы дозвона, т.е. нельзя посмотреть, а чего же там понастроено...
Ниже рабочие настройки для моего алгоритма. Больше ничего не надо. Сам Алгоритм создается на соответствующей вкладке, и если надо, модифицируется в конструкторе. Дальше устанавливаем параметры (кол-во попыток, и паузы между ними) и добавляем расписание. READY? GO!
sannx - спасибо за оперативную помощь!
Единственное, жаль что 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
- Администратор
- Сообщения: 2306
- Зарегистрирован: 02 ноя 2011, 14:00
- Skype: sann-x
- Контактная информация:
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
Хм.. Работать норм не будет. Вот ситуация: 1й дозвон - результат "занято". 2й дозвон - успешно обработан. В результате DialWasTimes будет равен 2. А значит этот номер не попадет для обвона через 15 дней. Вот думайте.
- sannx
- Администратор
- Сообщения: 2306
- Зарегистрирован: 02 ноя 2011, 14:00
- Skype: sann-x
- Контактная информация:
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
И не понял, что за декомпиляция? Зачем она вам? И как вы это видите?
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
1. DialWasTimes инкрементируется только в случае УСПЕШНОГО дозвона.
2. Я назвал ДЕКОМПИЛЯЦИЕЙ (т.к. при сохранение программы - написано, что идет компиляция) просмотр "содержимого" сохраненной программы дозвона, т.е ее настройки, ее алгоритм...
2. Я назвал ДЕКОМПИЛЯЦИЕЙ (т.к. при сохранение программы - написано, что идет компиляция) просмотр "содержимого" сохраненной программы дозвона, т.е ее настройки, ее алгоритм...
- sannx
- Администратор
- Сообщения: 2306
- Зарегистрирован: 02 ноя 2011, 14:00
- Skype: sann-x
- Контактная информация:
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
1. Ага. Дозвоны в моем примере - это обзвон номера для данного числа, например, за 30 дней до часа Х. Т.е. первый звонок - занято, через 10 мин снова звонок - успешно. И тогда DialWasTimes будет равен 2. А значит этот номер не попадет для обзвона через 15 дней.
2. Почему нельзя? Загрузите соотв-щую программу дозвона, и все ее настройки вы увидите в разделах "Список номеров, Настройки дозвона, Алгоритм, Расписание".
2. Почему нельзя? Загрузите соотв-щую программу дозвона, и все ее настройки вы увидите в разделах "Список номеров, Настройки дозвона, Алгоритм, Расписание".
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
2. Как это, загрузить? Я могу только даб-кликом запустить ее, к примеру. Но загрузить... Можно поподробней?
- sannx
- Администратор
- Сообщения: 2306
- Зарегистрирован: 02 ноя 2011, 14:00
- Skype: sann-x
- Контактная информация:
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
см. в Справке: Автообзвон - Программа автообзвона.
Re: Запрос к таблице с номерами на SQL сервере. HowTo?
см. в Справке: Автообзвон - Программа автообзвона.
Нашел!
Спасибо!))