4 Commits bd96bd087a ... d1510c1b33

Autor SHA1 Mensagem Data
  Dev Server d1510c1b33 status handler added há 1 ano atrás
  Dev Server 04fc78a5fd open_negrequest_pending added há 1 ano atrás
  Dev Server 1b89441b89 unneccessary lines from config template removed há 1 ano atrás
  Dev Server f05143d5f6 open_negrequest_pending template added há 1 ano atrás
3 ficheiros alterados com 166 adições e 9 exclusões
  1. 0 9
      config_template.py
  2. 111 0
      open_negrequest_pending.py
  3. 55 0
      status_handlers.py

+ 0 - 9
config_template.py

@@ -1,17 +1,8 @@
 #rename this file to config.py
-#JID="example@msg.sharix-app.org"
 BOTLIST=["open_template_bot","open_strequest_assigned","open_strequest_inprocess","open_strequest_new","open_strequest_reopened","open_strequest_wontfix","open_strequest_done","open_strequest_duplicate","open_strequest_closed","open_accessrequest_pending","open_accessrequest_accepted","open_accessrequest_declined","open_negrequest_pending","open_negrequest_accepted","open_negrequest_declined","open_servicerequest_template","open_servicerequest_booked","open_servicerequest_assigned","open_servicerequest_accepted","open_servicerequest_pending","open_servicerequest_declined","open_servicerequest_prestart","open_servicerequest_process","open_servicerequest_forcemajeure","open_servicerequest_forcemajeurecancelled","open_servicerequest_done","open_servicerequest_cancelled","open_servicerequest_closed"]
 JSERVER="ej.sharix-app.org"
 PASSWORD="12345"
 PORT=349
 API_URL = "https://testbase.sharix-app.org"
-#AUTH_API_URL = "https://testbase.sharix-app.org/auth/token/login/"
-#REG_API_URL = "https://testbase.sharix-app.org/v1/auth/users/"
-#тут надо указывать еще порт сервера
 
-#первое время пусть пароль будет у всех обработчиков одинаковый, далее надо будет генерировать уникальные связки на основе логина и ключа, указанного в файле.
 
-# бот в конверс
-
-# JID="bottickets@msg.sharix-app.org"
-# PASSWORD="12345!"

+ 111 - 0
open_negrequest_pending.py

@@ -0,0 +1,111 @@
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+import hashlib
+from datetime import datetime
+
+import time
+import threading
+
+#test
+import jsonAndRequest as jsreq
+
+global tasklist
+
+#В этом файле содержится только то, что запускает конкретный обработчик
+
+# botname="open_strequest_assigned"
+botname="open_negrequest_pending"
+operating_status=420
+JID=botname+"@"+config.JSERVER
+PORT=config.PORT
+
+#раскомментировать, когда перейдем на разные пароли
+PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()
+
+print(JID, PASSWORD)
+
+#таким образом хранится список jid, от которых можно получать сообщения этому боту
+listen_to=["open_negrequest_pending@ej.sharix-app.org"]
+
+#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
+proceed_to=["open_negrequest_pending@ej.sharix-app.org", "open_negrequest_declined@ej.sharix-app.org"]
+
+#максимальное значение попыток обработать заказ
+idle_value=10
+
+# обработчик входящих сообщений
+def message_handler(conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+    #user = mess.getNode()#только jid 
+   
+   #нужна проверка, данный обработчик вообще должен от данного отправителя получать сообщения или нет. Подсказка ниже
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+#TODO - для обработчиков Ticket скорее надо будет функции вынести в отдельную библиотеку, они типовые же
+def pending_wait(period,localtask):
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает пользовательской реакции\n")
+    time.sleep(period)
+    
+    #ВАЖНО! НАДО ВСТАВИТЬ ИЗМЕНЕНИЕ СТАТУСА ЧЕРЕЗ API
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    bot.proceed_status(proceed_to[1],localtask)
+    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отклонен\n")
+
+def open_negrequest_pending():
+    #print("Тут описывается работа со списком задач в данном статусе")
+    while (len(tasklist)):
+        localtask=tasklist.pop(0)
+        bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Заказ в очереди на обработке\n")
+        
+        #если боту почему-то пришла не его заявка - это явно ошибка движения процессов и отдаем в форсмажор - этот обработчик указывать стоит всегда последним
+        #if (localtask.status!=operating_status):
+        #    bot.proceed_status(proceed_to[-1],localtask)
+        #    bot.bot_log(botname+" "+str(datetime.now())+" "+"Заказ не по адресу, перенаправляем на форсмажор\n")
+        #    continue
+
+        #TODO: send_notifications - изучить как в комнату
+
+        #ЖДАТЬ НАДО ПОДОЛЬШЕ
+        t1=threading.Thread(target=pending_wait, args=(100,localtask))
+        t1.start()
+
+        #если никакие обработчики не подошли - отправляем обратно в очередь
+        #bot.proceed_status(proceed_to[0],localtask)
+        #print("Заказ возвращен в очередь\n")
+        #print (tasklist)
+
+#Авторизация и запуск бота
+
+#пустой список заказов
+tasklist = []
+
+#надо инициализировать tasklist при запуске из API
+token = jsreq.requestGetToken(botname, PASSWORD, config.API_URL+"/auth/token/login/")
+
+#ВАЖНО! Надо понять, по такому ли запросу разумно делать фильтр - или поменять порядок
+tasklist=jsreq.requestGetList(token, config.API_URL+"/tickets/api/tickets/?status=210&list_id=10")
+print (len(tasklist))
+
+
+bot = JabberBot(JID, PASSWORD, PORT)
+
+bot.register_handler('message', message_handler)
+bot.start(open_negrequest_pending)
+
+
+

+ 55 - 0
status_handlers.py

@@ -0,0 +1,55 @@
+import xmpp
+from xmpp import cli
+import config
+from BotClass import JabberBot
+import json
+#раскомментировать, когда перейдем на разные пароли
+from datetime import datetime
+
+import time
+
+#test
+import jsonAndRequest as jsreq
+
+
+
+def proceed_status(self, recipient, ticket):
+        #тут могут быть различные проверки дополнительные, а так вообще эта функция нужна для передачи заявки на обработку следующему
+        jsonTicket = json.dumps(ticket.__dict__)
+        self.conn.send(xmpp.Message(recipient, jsonTicket))
+        self.bot_log("Message sent successfully"+" "+recipient+" "+jsonTicket)
+
+# обработчик входящих сообщений
+def message_handler(self, conn, mess):
+    text = mess.getBody()#текст сообщения боту
+    user = mess.getFrom()#отправитель сообщения
+   
+    #проверка на возможность получения сообщений от данного обработчика
+    print (str(user).split("/")[0])
+    if (str(user).split("/")[0]) in listen_to:
+        print(text)
+        print(mess)
+
+        if text is not None:
+            orderObj = jsreq.jsonToOrderTicket(text)
+            print (orderObj)
+            tasklist.append(orderObj)
+            self.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")
+
+#TODO - для обработчиков Ticket скорее надо будет функции вынести в отдельную библиотеку, они типовые же
+def pending_wait(self, period, localtask, proceed_to):
+    self.bot_log(botname+" "+str(datetime.now())+" "+"Заказ ожидает пользовательской реакции\n")
+    time.sleep(period)
+    
+    #ВАЖНО! НАДО ВСТАВИТЬ ИЗМЕНЕНИЕ СТАТУСА ЧЕРЕЗ API
+
+    #обязательно данный обработчик должен заканчиваться передачей заказа куда-то на обработку дальше - обратно или другому, иначе оно потеряется
+    self.proceed_status(proceed_to,localtask)
+    self.bot_log(botname+" "+str(datetime.now())+" "+"Заказ отправлен в очередь "+proceed_to+"\n")
+
+def order_close(self, localtask):
+
+    #тут надо вызов API с удалением
+    self.bot_log(botname+" "+str(datetime.now())+" "+"Заказ удален\n")
+
+