@tiledesk/tiledesk-server 2.10.52 → 2.10.54

Sign up to get free protection for your applications and to get access to all the features.
@@ -277,8 +277,6 @@ class RequestService {
277
277
  return that.routeInternal(request, departmentid, id_project, nobot).then( async function (routedRequest) {
278
278
 
279
279
  winston.debug("after routeInternal", routedRequest);
280
- // winston.info("requestBeforeRoute.participants " +requestBeforeRoute.request_id , requestBeforeRoute.participants);
281
- // console.log("routedRequest.participants " +routedRequest.request_id , routedRequest.participants);
282
280
  winston.debug("requestBeforeRoute.status:" + requestBeforeRoute.status);
283
281
  winston.debug("routedRequest.status:" + routedRequest.status);
284
282
 
@@ -650,8 +648,12 @@ class RequestService {
650
648
  isTestConversation = true;
651
649
  }
652
650
  else if (channel && (channel.name === 'voice-vxml')) {
653
- winston.verbose("is a voice conversation --> skip quote availability check")
654
651
  isVoiceConversation = true;
652
+ let available = await qm.checkQuote(project, request, 'voice_duration');
653
+ if (available === false) {
654
+ winston.info("Voice duration limits reached for project " + project._id);
655
+ return reject("Voice duration limits reached for project " + project._id);
656
+ }
655
657
  }
656
658
  else {
657
659
  isStandardConversation = true;
@@ -775,562 +777,562 @@ class RequestService {
775
777
  }
776
778
 
777
779
  // DEPRECATED
778
- async _create(request) {
780
+ // async _create(request) {
779
781
 
780
- var startDate = new Date();
782
+ // var startDate = new Date();
781
783
 
782
- if (!request.createdAt) {
783
- request.createdAt = new Date();
784
- }
784
+ // if (!request.createdAt) {
785
+ // request.createdAt = new Date();
786
+ // }
785
787
 
786
788
 
787
- var request_id = request.request_id;
788
- var project_user_id = request.project_user_id;
789
- var lead_id = request.lead_id;
790
- var id_project = request.id_project;
789
+ // var request_id = request.request_id;
790
+ // var project_user_id = request.project_user_id;
791
+ // var lead_id = request.lead_id;
792
+ // var id_project = request.id_project;
791
793
 
792
- var first_text = request.first_text;
794
+ // var first_text = request.first_text;
793
795
 
794
- //removed for ticket
795
- // // lascia che sia nico a fare il replace...certo tu devi fare il test che tutto sia ok quindi dopo demo
796
- // var first_text;
797
- // if (request.first_text) { //first_text can be empty for type image
798
- // first_text = request.first_text.replace(/[\n\r]+/g, ' '); //replace new line with space
799
- // }
796
+ // //removed for ticket
797
+ // // // lascia che sia nico a fare il replace...certo tu devi fare il test che tutto sia ok quindi dopo demo
798
+ // // var first_text;
799
+ // // if (request.first_text) { //first_text can be empty for type image
800
+ // // first_text = request.first_text.replace(/[\n\r]+/g, ' '); //replace new line with space
801
+ // // }
800
802
 
801
- var departmentid = request.departmentid;
802
- var sourcePage = request.sourcePage;
803
- var language = request.language;
804
- var userAgent = request.userAgent;
805
- var status = request.status;
806
- var createdBy = request.createdBy;
807
- var attributes = request.attributes;
808
- var subject = request.subject;
809
- var preflight = request.preflight;
810
- var channel = request.channel;
811
- var location = request.location;
812
- var participants = request.participants || [];
803
+ // var departmentid = request.departmentid;
804
+ // var sourcePage = request.sourcePage;
805
+ // var language = request.language;
806
+ // var userAgent = request.userAgent;
807
+ // var status = request.status;
808
+ // var createdBy = request.createdBy;
809
+ // var attributes = request.attributes;
810
+ // var subject = request.subject;
811
+ // var preflight = request.preflight;
812
+ // var channel = request.channel;
813
+ // var location = request.location;
814
+ // var participants = request.participants || [];
813
815
 
814
- var tags = request.tags;
815
- var notes = request.notes;
816
- var priority = request.priority;
816
+ // var tags = request.tags;
817
+ // var notes = request.notes;
818
+ // var priority = request.priority;
817
819
 
818
- var auto_close = request.auto_close;
820
+ // var auto_close = request.auto_close;
819
821
 
820
- var followers = request.followers;
821
- let createdAt = request.createdAt;
822
+ // var followers = request.followers;
823
+ // let createdAt = request.createdAt;
822
824
 
823
825
 
824
- if (!departmentid) {
825
- departmentid = 'default';
826
- }
826
+ // if (!departmentid) {
827
+ // departmentid = 'default';
828
+ // }
827
829
 
828
- if (!createdBy) {
829
- if (project_user_id) {
830
- createdBy = project_user_id;
831
- } else {
832
- createdBy = "system";
833
- }
830
+ // if (!createdBy) {
831
+ // if (project_user_id) {
832
+ // createdBy = project_user_id;
833
+ // } else {
834
+ // createdBy = "system";
835
+ // }
834
836
 
835
- }
837
+ // }
836
838
 
837
- let isTestConversation = false;
838
- let isVoiceConversation = false;
839
+ // let isTestConversation = false;
840
+ // let isVoiceConversation = false;
839
841
 
840
- var that = this;
842
+ // var that = this;
841
843
 
842
- return new Promise(async (resolve, reject) => {
844
+ // return new Promise(async (resolve, reject) => {
843
845
 
844
- let q = Project.findOne({ _id: request.id_project, status: 100 });
845
- if (cacheEnabler.project) {
846
- q.cache(cacheUtil.longTTL, "projects:id:" + request.id_project) //project_cache
847
- winston.debug('project cache enabled for /project detail');
848
- }
849
- q.exec(async function (err, p) {
850
- if (err) {
851
- winston.error('Error getting project ', err);
852
- }
853
- if (!p) {
854
- winston.warn('Project not found ');
855
- }
846
+ // let q = Project.findOne({ _id: request.id_project, status: 100 });
847
+ // if (cacheEnabler.project) {
848
+ // q.cache(cacheUtil.longTTL, "projects:id:" + request.id_project) //project_cache
849
+ // winston.debug('project cache enabled for /project detail');
850
+ // }
851
+ // q.exec(async function (err, p) {
852
+ // if (err) {
853
+ // winston.error('Error getting project ', err);
854
+ // }
855
+ // if (!p) {
856
+ // winston.warn('Project not found ');
857
+ // }
856
858
 
857
859
 
858
- let payload = {
859
- project: p,
860
- request: request
861
- }
860
+ // let payload = {
861
+ // project: p,
862
+ // request: request
863
+ // }
862
864
 
863
- if (attributes && attributes.sourcePage && (attributes.sourcePage.indexOf("td_draft=true") > -1)) {
864
- winston.verbose("is a test conversation --> skip quote availability check")
865
- isTestConversation = true;
866
- }
867
- else if (channel && (channel.name === 'voice-vxml')) {
868
- winston.verbose("is a voice conversation --> skip quote availability check")
869
- isVoiceConversation = true;
870
- }
871
- else {
872
- // console.log("! check quota moved")
873
- // let available = await qm.checkQuote(p, request, 'requests');
874
- // if (available === false) {
875
- // winston.info("Requests limits reached for project " + p._id)
876
- // return false;
877
- // }
878
- }
865
+ // if (attributes && attributes.sourcePage && (attributes.sourcePage.indexOf("td_draft=true") > -1)) {
866
+ // winston.verbose("is a test conversation --> skip quote availability check")
867
+ // isTestConversation = true;
868
+ // }
869
+ // else if (channel && (channel.name === 'voice-vxml')) {
870
+ // winston.verbose("is a voice conversation --> skip quote availability check")
871
+ // isVoiceConversation = true;
872
+ // }
873
+ // else {
874
+ // // console.log("! check quota moved")
875
+ // // let available = await qm.checkQuote(p, request, 'requests');
876
+ // // if (available === false) {
877
+ // // winston.info("Requests limits reached for project " + p._id)
878
+ // // return false;
879
+ // // }
880
+ // }
879
881
 
880
882
 
881
- var context = {
882
- request: {
883
- request_id: request_id, project_user_id: project_user_id, lead_id: lead_id, id_project: id_project,
884
- first_text: first_text, departmentid: departmentid, sourcePage: sourcePage, language: language, userAgent: userAgent, status: status,
885
- createdBy: createdBy, attributes: attributes, subject: subject, preflight: preflight, channel: channel, location: location,
886
- participants: participants, tags: tags, notes: notes,
887
- priority: priority, auto_close: auto_close, followers: followers
888
- }
889
- };
890
-
891
- winston.debug("context", context);
892
-
893
- var participantsAgents = [];
894
- var participantsBots = [];
895
- var hasBot = false;
896
-
897
- var dep_id = undefined;
898
-
899
- var assigned_at = undefined;
900
-
901
- var agents = [];
883
+ // var context = {
884
+ // request: {
885
+ // request_id: request_id, project_user_id: project_user_id, lead_id: lead_id, id_project: id_project,
886
+ // first_text: first_text, departmentid: departmentid, sourcePage: sourcePage, language: language, userAgent: userAgent, status: status,
887
+ // createdBy: createdBy, attributes: attributes, subject: subject, preflight: preflight, channel: channel, location: location,
888
+ // participants: participants, tags: tags, notes: notes,
889
+ // priority: priority, auto_close: auto_close, followers: followers
890
+ // }
891
+ // };
902
892
 
903
- var snapshot = {};
893
+ // winston.debug("context", context);
904
894
 
905
- try {
906
- // getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
907
- var result = await departmentService.getOperators(departmentid, id_project, false, undefined, context);
908
- // console.log("************* after get operator: "+new Date().toISOString());
895
+ // var participantsAgents = [];
896
+ // var participantsBots = [];
897
+ // var hasBot = false;
909
898
 
910
- winston.debug("getOperators", result);
911
- } catch (err) {
912
- return reject(err);
913
- }
899
+ // var dep_id = undefined;
914
900
 
901
+ // var assigned_at = undefined;
915
902
 
903
+ // var agents = [];
916
904
 
917
- agents = result.agents;
918
-
919
- if (status == 50) {
920
- // skip assignment
921
- if (participants.length == 0) {
922
- dep_id = result.department._id;
923
- }
924
- } else {
905
+ // var snapshot = {};
925
906
 
926
- if (participants.length == 0) {
927
- if (result.operators && result.operators.length > 0) {
928
- participants.push(result.operators[0].id_user.toString());
929
- }
930
- // for preflight it is important to save agents in req for trigger. try to optimize it
931
- dep_id = result.department._id;
907
+ // try {
908
+ // // getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
909
+ // var result = await departmentService.getOperators(departmentid, id_project, false, undefined, context);
910
+ // // console.log("************* after get operator: "+new Date().toISOString());
932
911
 
933
- }
912
+ // winston.debug("getOperators", result);
913
+ // } catch (err) {
914
+ // return reject(err);
915
+ // }
934
916
 
935
- if (participants.length > 0) {
936
917
 
937
- status = RequestConstants.ASSIGNED;
938
918
 
939
- /**
940
- * QUOTAS - START!!!
941
- */
942
- if (!isTestConversation && !isVoiceConversation) {
943
- requestEvent.emit('request.create.quote', payload);
944
- }
945
- /**
946
- * QUOTAS - END!!!
947
- */
919
+ // agents = result.agents;
948
920
 
921
+ // if (status == 50) {
922
+ // // skip assignment
923
+ // if (participants.length == 0) {
924
+ // dep_id = result.department._id;
925
+ // }
926
+ // } else {
949
927
 
928
+ // if (participants.length == 0) {
929
+ // if (result.operators && result.operators.length > 0) {
930
+ // participants.push(result.operators[0].id_user.toString());
931
+ // }
932
+ // // for preflight it is important to save agents in req for trigger. try to optimize it
933
+ // dep_id = result.department._id;
950
934
 
951
- // botprefix
952
- if (participants[0].startsWith("bot_")) {
953
-
954
- hasBot = true;
955
- winston.debug("hasBot:" + hasBot);
956
-
957
- // botprefix
958
- var assigned_operator_idStringBot = participants[0].replace("bot_", "");
959
- winston.debug("assigned_operator_idStringBot:" + assigned_operator_idStringBot);
960
-
961
- participantsBots.push(assigned_operator_idStringBot);
962
-
963
- } else {
935
+ // }
964
936
 
965
- participantsAgents.push(participants[0]);
937
+ // if (participants.length > 0) {
966
938
 
967
- }
939
+ // status = RequestConstants.ASSIGNED;
968
940
 
969
- assigned_at = Date.now();
941
+ // /**
942
+ // * QUOTAS - START!!!
943
+ // */
944
+ // if (!isTestConversation && !isVoiceConversation) {
945
+ // requestEvent.emit('request.create.quote', payload);
946
+ // }
947
+ // /**
948
+ // * QUOTAS - END!!!
949
+ // */
970
950
 
971
- } else {
972
951
 
973
- status = RequestConstants.UNASSIGNED;
974
952
 
975
- }
953
+ // // botprefix
954
+ // if (participants[0].startsWith("bot_")) {
976
955
 
977
- }
956
+ // hasBot = true;
957
+ // winston.debug("hasBot:" + hasBot);
978
958
 
959
+ // // botprefix
960
+ // var assigned_operator_idStringBot = participants[0].replace("bot_", "");
961
+ // winston.debug("assigned_operator_idStringBot:" + assigned_operator_idStringBot);
979
962
 
963
+ // participantsBots.push(assigned_operator_idStringBot);
980
964
 
965
+ // } else {
981
966
 
982
- if (dep_id) {
983
- snapshot.department = result.department;
984
- }
967
+ // participantsAgents.push(participants[0]);
985
968
 
986
- // console.log("result.agents",result.agents);
987
- snapshot.agents = agents;
988
- snapshot.availableAgentsCount = that.getAvailableAgentsCount(agents);
969
+ // }
989
970
 
990
- if (request.requester) { //.toObject()????
991
- snapshot.requester = request.requester;
992
- }
993
- if (request.lead) {
994
- snapshot.lead = request.lead;
995
- }
971
+ // assigned_at = Date.now();
996
972
 
997
- // winston.debug("assigned_operator_id", assigned_operator_id);
998
- // winston.debug("req status", status);
973
+ // } else {
999
974
 
1000
- var newRequest = new Request({
1001
- request_id: request_id,
1002
- requester: project_user_id,
1003
- lead: lead_id,
1004
- first_text: first_text,
1005
- subject: subject,
1006
- status: status,
1007
- participants: participants,
1008
- participantsAgents: participantsAgents,
1009
- participantsBots: participantsBots,
1010
- hasBot: hasBot,
1011
- department: dep_id,
1012
- // agents: agents,
975
+ // status = RequestConstants.UNASSIGNED;
1013
976
 
1014
- //others
1015
- sourcePage: sourcePage,
1016
- language: language,
1017
- userAgent: userAgent,
1018
- assigned_at: assigned_at,
977
+ // }
1019
978
 
1020
- attributes: attributes,
1021
- //standard
1022
- id_project: id_project,
1023
- createdBy: createdBy,
1024
- updatedBy: createdBy,
1025
- preflight: preflight,
1026
- channel: channel,
1027
- location: location,
1028
- snapshot: snapshot,
1029
- tags: tags,
1030
- notes: notes,
1031
- priority: priority,
1032
- auto_close: auto_close,
1033
- followers: followers,
1034
- createdAt: createdAt
1035
- });
979
+ // }
980
+
981
+
982
+
983
+
984
+ // if (dep_id) {
985
+ // snapshot.department = result.department;
986
+ // }
987
+
988
+ // // console.log("result.agents",result.agents);
989
+ // snapshot.agents = agents;
990
+ // snapshot.availableAgentsCount = that.getAvailableAgentsCount(agents);
991
+
992
+ // if (request.requester) { //.toObject()????
993
+ // snapshot.requester = request.requester;
994
+ // }
995
+ // if (request.lead) {
996
+ // snapshot.lead = request.lead;
997
+ // }
998
+
999
+ // // winston.debug("assigned_operator_id", assigned_operator_id);
1000
+ // // winston.debug("req status", status);
1001
+
1002
+ // var newRequest = new Request({
1003
+ // request_id: request_id,
1004
+ // requester: project_user_id,
1005
+ // lead: lead_id,
1006
+ // first_text: first_text,
1007
+ // subject: subject,
1008
+ // status: status,
1009
+ // participants: participants,
1010
+ // participantsAgents: participantsAgents,
1011
+ // participantsBots: participantsBots,
1012
+ // hasBot: hasBot,
1013
+ // department: dep_id,
1014
+ // // agents: agents,
1015
+
1016
+ // //others
1017
+ // sourcePage: sourcePage,
1018
+ // language: language,
1019
+ // userAgent: userAgent,
1020
+ // assigned_at: assigned_at,
1021
+
1022
+ // attributes: attributes,
1023
+ // //standard
1024
+ // id_project: id_project,
1025
+ // createdBy: createdBy,
1026
+ // updatedBy: createdBy,
1027
+ // preflight: preflight,
1028
+ // channel: channel,
1029
+ // location: location,
1030
+ // snapshot: snapshot,
1031
+ // tags: tags,
1032
+ // notes: notes,
1033
+ // priority: priority,
1034
+ // auto_close: auto_close,
1035
+ // followers: followers,
1036
+ // createdAt: createdAt
1037
+ // });
1036
1038
 
1037
- if (isTestConversation) {
1038
- newRequest.draft = true;
1039
- }
1039
+ // if (isTestConversation) {
1040
+ // newRequest.draft = true;
1041
+ // }
1040
1042
 
1041
- winston.debug('newRequest.', newRequest);
1043
+ // winston.debug('newRequest.', newRequest);
1042
1044
 
1043
1045
 
1044
- //cacheinvalidation
1045
- return newRequest.save( async function (err, savedRequest) {
1046
+ // //cacheinvalidation
1047
+ // return newRequest.save( async function (err, savedRequest) {
1046
1048
 
1047
- if (err) {
1048
- winston.error('RequestService error for method createWithIdAndRequester for newRequest' + JSON.stringify(newRequest), err);
1049
- return reject(err);
1050
- }
1049
+ // if (err) {
1050
+ // winston.error('RequestService error for method createWithIdAndRequester for newRequest' + JSON.stringify(newRequest), err);
1051
+ // return reject(err);
1052
+ // }
1051
1053
 
1052
1054
 
1053
- winston.debug("Request created", savedRequest.toObject());
1055
+ // winston.debug("Request created", savedRequest.toObject());
1054
1056
 
1055
- var endDate = new Date();
1056
- winston.verbose("Performance Request created in millis: " + endDate - startDate);
1057
+ // var endDate = new Date();
1058
+ // winston.verbose("Performance Request created in millis: " + endDate - startDate);
1057
1059
 
1058
- requestEvent.emit('request.create.simple', savedRequest);
1060
+ // requestEvent.emit('request.create.simple', savedRequest);
1059
1061
 
1060
- if (!isTestConversation && !isVoiceConversation) {
1061
- // requestEvent.emit('request.create.quote', payload);;
1062
- }
1062
+ // if (!isTestConversation && !isVoiceConversation) {
1063
+ // // requestEvent.emit('request.create.quote', payload);;
1064
+ // }
1063
1065
 
1064
- return resolve(savedRequest);
1066
+ // return resolve(savedRequest);
1065
1067
 
1066
- });
1067
- // }).catch(function(err){
1068
- // return reject(err);
1069
- // });
1068
+ // });
1069
+ // // }).catch(function(err){
1070
+ // // return reject(err);
1071
+ // // });
1070
1072
 
1071
- })
1072
- });
1073
+ // })
1074
+ // });
1073
1075
 
1074
- }
1076
+ // }
1075
1077
 
1076
1078
  // DEPRECATED
1077
- async __create(request) {
1079
+ // async __create(request) {
1078
1080
 
1079
- var startDate = new Date();
1081
+ // var startDate = new Date();
1080
1082
 
1081
- if (!request.createdAt) {
1082
- request.createdAt = new Date();
1083
- }
1083
+ // if (!request.createdAt) {
1084
+ // request.createdAt = new Date();
1085
+ // }
1084
1086
 
1085
1087
 
1086
- var request_id = request.request_id;
1087
- var project_user_id = request.project_user_id;
1088
- var lead_id = request.lead_id;
1089
- var id_project = request.id_project;
1090
-
1091
- var first_text = request.first_text;
1092
-
1093
- //removed for ticket
1094
- // // lascia che sia nico a fare il replace...certo tu devi fare il test che tutto sia ok quindi dopo demo
1095
- // var first_text;
1096
- // if (request.first_text) { //first_text can be empty for type image
1097
- // first_text = request.first_text.replace(/[\n\r]+/g, ' '); //replace new line with space
1098
- // }
1099
-
1100
- var departmentid = request.departmentid;
1101
- var sourcePage = request.sourcePage;
1102
- var language = request.language;
1103
- var userAgent = request.userAgent;
1104
- var status = request.status;
1105
- var createdBy = request.createdBy;
1106
- var attributes = request.attributes;
1107
- var subject = request.subject;
1108
- var preflight = request.preflight;
1109
- var channel = request.channel;
1110
- var location = request.location;
1111
- var participants = request.participants || [];
1112
-
1113
- var tags = request.tags;
1114
- var notes = request.notes;
1115
- var priority = request.priority;
1116
-
1117
- var auto_close = request.auto_close;
1118
-
1119
- var followers = request.followers;
1120
- let createdAt = request.createdAt;
1121
-
1122
- if (!departmentid) {
1123
- departmentid = 'default';
1124
- }
1125
-
1126
- if (!createdBy) {
1127
- if (project_user_id) {
1128
- createdBy = project_user_id;
1129
- } else {
1130
- createdBy = "system";
1131
- }
1088
+ // var request_id = request.request_id;
1089
+ // var project_user_id = request.project_user_id;
1090
+ // var lead_id = request.lead_id;
1091
+ // var id_project = request.id_project;
1132
1092
 
1133
- }
1093
+ // var first_text = request.first_text;
1134
1094
 
1135
- var that = this;
1095
+ // //removed for ticket
1096
+ // // // lascia che sia nico a fare il replace...certo tu devi fare il test che tutto sia ok quindi dopo demo
1097
+ // // var first_text;
1098
+ // // if (request.first_text) { //first_text can be empty for type image
1099
+ // // first_text = request.first_text.replace(/[\n\r]+/g, ' '); //replace new line with space
1100
+ // // }
1136
1101
 
1137
- return new Promise(async (resolve, reject) => {
1102
+ // var departmentid = request.departmentid;
1103
+ // var sourcePage = request.sourcePage;
1104
+ // var language = request.language;
1105
+ // var userAgent = request.userAgent;
1106
+ // var status = request.status;
1107
+ // var createdBy = request.createdBy;
1108
+ // var attributes = request.attributes;
1109
+ // var subject = request.subject;
1110
+ // var preflight = request.preflight;
1111
+ // var channel = request.channel;
1112
+ // var location = request.location;
1113
+ // var participants = request.participants || [];
1138
1114
 
1139
- var context = {
1140
- request: {
1141
- request_id: request_id, project_user_id: project_user_id, lead_id: lead_id, id_project: id_project,
1142
- first_text: first_text, departmentid: departmentid, sourcePage: sourcePage, language: language, userAgent: userAgent, status: status,
1143
- createdBy: createdBy, attributes: attributes, subject: subject, preflight: preflight, channel: channel, location: location,
1144
- participants: participants, tags: tags, notes: notes,
1145
- priority: priority, auto_close: auto_close, followers: followers
1146
- }
1147
- };
1115
+ // var tags = request.tags;
1116
+ // var notes = request.notes;
1117
+ // var priority = request.priority;
1148
1118
 
1149
- winston.debug("context", context);
1119
+ // var auto_close = request.auto_close;
1150
1120
 
1151
- var participantsAgents = [];
1152
- var participantsBots = [];
1153
- var hasBot = false;
1121
+ // var followers = request.followers;
1122
+ // let createdAt = request.createdAt;
1154
1123
 
1155
- var dep_id = undefined;
1124
+ // if (!departmentid) {
1125
+ // departmentid = 'default';
1126
+ // }
1156
1127
 
1157
- var assigned_at = undefined;
1128
+ // if (!createdBy) {
1129
+ // if (project_user_id) {
1130
+ // createdBy = project_user_id;
1131
+ // } else {
1132
+ // createdBy = "system";
1133
+ // }
1158
1134
 
1159
- var agents = [];
1135
+ // }
1160
1136
 
1161
- var snapshot = {};
1137
+ // var that = this;
1162
1138
 
1163
- try {
1164
- // getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
1165
- var result = await departmentService.getOperators(departmentid, id_project, false, undefined, context);
1166
- // console.log("************* after get operator: "+new Date().toISOString());
1139
+ // return new Promise(async (resolve, reject) => {
1167
1140
 
1168
- winston.debug("getOperators", result);
1169
- } catch (err) {
1170
- return reject(err);
1171
- }
1141
+ // var context = {
1142
+ // request: {
1143
+ // request_id: request_id, project_user_id: project_user_id, lead_id: lead_id, id_project: id_project,
1144
+ // first_text: first_text, departmentid: departmentid, sourcePage: sourcePage, language: language, userAgent: userAgent, status: status,
1145
+ // createdBy: createdBy, attributes: attributes, subject: subject, preflight: preflight, channel: channel, location: location,
1146
+ // participants: participants, tags: tags, notes: notes,
1147
+ // priority: priority, auto_close: auto_close, followers: followers
1148
+ // }
1149
+ // };
1172
1150
 
1151
+ // winston.debug("context", context);
1173
1152
 
1153
+ // var participantsAgents = [];
1154
+ // var participantsBots = [];
1155
+ // var hasBot = false;
1174
1156
 
1175
- agents = result.agents;
1157
+ // var dep_id = undefined;
1176
1158
 
1177
- if (status == 50) {
1178
- // skip assignment
1179
- if (participants.length == 0) {
1180
- dep_id = result.department._id;
1181
- }
1182
- } else {
1159
+ // var assigned_at = undefined;
1183
1160
 
1184
- if (participants.length == 0) {
1185
- if (result.operators && result.operators.length > 0) {
1186
- participants.push(result.operators[0].id_user.toString());
1187
- }
1188
- // for preflight it is important to save agents in req for trigger. try to optimize it
1189
- dep_id = result.department._id;
1161
+ // var agents = [];
1190
1162
 
1191
- }
1163
+ // var snapshot = {};
1192
1164
 
1193
- if (participants.length > 0) {
1165
+ // try {
1166
+ // // getOperators(departmentid, projectid, nobot, disableWebHookCall, context) {
1167
+ // var result = await departmentService.getOperators(departmentid, id_project, false, undefined, context);
1168
+ // // console.log("************* after get operator: "+new Date().toISOString());
1194
1169
 
1195
- status = RequestConstants.ASSIGNED;
1170
+ // winston.debug("getOperators", result);
1171
+ // } catch (err) {
1172
+ // return reject(err);
1173
+ // }
1196
1174
 
1197
- // botprefix
1198
- if (participants[0].startsWith("bot_")) {
1199
1175
 
1200
- hasBot = true;
1201
- winston.debug("hasBot:" + hasBot);
1202
1176
 
1203
- // botprefix
1204
- var assigned_operator_idStringBot = participants[0].replace("bot_", "");
1205
- winston.debug("assigned_operator_idStringBot:" + assigned_operator_idStringBot);
1177
+ // agents = result.agents;
1206
1178
 
1207
- participantsBots.push(assigned_operator_idStringBot);
1208
-
1209
- } else {
1210
-
1211
- participantsAgents.push(participants[0]);
1212
-
1213
- }
1214
-
1215
- assigned_at = Date.now();
1179
+ // if (status == 50) {
1180
+ // // skip assignment
1181
+ // if (participants.length == 0) {
1182
+ // dep_id = result.department._id;
1183
+ // }
1184
+ // } else {
1216
1185
 
1217
- } else {
1186
+ // if (participants.length == 0) {
1187
+ // if (result.operators && result.operators.length > 0) {
1188
+ // participants.push(result.operators[0].id_user.toString());
1189
+ // }
1190
+ // // for preflight it is important to save agents in req for trigger. try to optimize it
1191
+ // dep_id = result.department._id;
1218
1192
 
1219
- status = RequestConstants.UNASSIGNED;
1193
+ // }
1220
1194
 
1221
- }
1195
+ // if (participants.length > 0) {
1222
1196
 
1223
- }
1197
+ // status = RequestConstants.ASSIGNED;
1224
1198
 
1199
+ // // botprefix
1200
+ // if (participants[0].startsWith("bot_")) {
1225
1201
 
1202
+ // hasBot = true;
1203
+ // winston.debug("hasBot:" + hasBot);
1226
1204
 
1205
+ // // botprefix
1206
+ // var assigned_operator_idStringBot = participants[0].replace("bot_", "");
1207
+ // winston.debug("assigned_operator_idStringBot:" + assigned_operator_idStringBot);
1227
1208
 
1228
- if (dep_id) {
1229
- snapshot.department = result.department;
1230
- }
1231
-
1232
- // console.log("result.agents",result.agents);
1233
- snapshot.agents = agents;
1234
- snapshot.availableAgentsCount = that.getAvailableAgentsCount(agents);
1209
+ // participantsBots.push(assigned_operator_idStringBot);
1235
1210
 
1236
- if (request.requester) { //.toObject()????
1237
- snapshot.requester = request.requester;
1238
- }
1239
- if (request.lead) {
1240
- snapshot.lead = request.lead;
1241
- }
1211
+ // } else {
1242
1212
 
1243
- // winston.debug("assigned_operator_id", assigned_operator_id);
1244
- // winston.debug("req status", status);
1213
+ // participantsAgents.push(participants[0]);
1245
1214
 
1246
- var newRequest = new Request({
1247
- request_id: request_id,
1248
- requester: project_user_id,
1249
- lead: lead_id,
1250
- first_text: first_text,
1251
- subject: subject,
1252
- status: status,
1253
- participants: participants,
1254
- participantsAgents: participantsAgents,
1255
- participantsBots: participantsBots,
1256
- hasBot: hasBot,
1257
- department: dep_id,
1258
- // agents: agents,
1259
-
1260
- //others
1261
- sourcePage: sourcePage,
1262
- language: language,
1263
- userAgent: userAgent,
1264
- assigned_at: assigned_at,
1215
+ // }
1265
1216
 
1266
- attributes: attributes,
1267
- //standard
1268
- id_project: id_project,
1269
- createdBy: createdBy,
1270
- updatedBy: createdBy,
1271
- preflight: preflight,
1272
- channel: channel,
1273
- location: location,
1274
- snapshot: snapshot,
1275
- tags: tags,
1276
- notes: notes,
1277
- priority: priority,
1278
- auto_close: auto_close,
1279
- followers: followers,
1280
- createdAt: createdAt
1281
- });
1217
+ // assigned_at = Date.now();
1218
+
1219
+ // } else {
1220
+
1221
+ // status = RequestConstants.UNASSIGNED;
1222
+
1223
+ // }
1224
+
1225
+ // }
1226
+
1227
+
1228
+
1229
+
1230
+ // if (dep_id) {
1231
+ // snapshot.department = result.department;
1232
+ // }
1233
+
1234
+ // // console.log("result.agents",result.agents);
1235
+ // snapshot.agents = agents;
1236
+ // snapshot.availableAgentsCount = that.getAvailableAgentsCount(agents);
1237
+
1238
+ // if (request.requester) { //.toObject()????
1239
+ // snapshot.requester = request.requester;
1240
+ // }
1241
+ // if (request.lead) {
1242
+ // snapshot.lead = request.lead;
1243
+ // }
1244
+
1245
+ // // winston.debug("assigned_operator_id", assigned_operator_id);
1246
+ // // winston.debug("req status", status);
1247
+
1248
+ // var newRequest = new Request({
1249
+ // request_id: request_id,
1250
+ // requester: project_user_id,
1251
+ // lead: lead_id,
1252
+ // first_text: first_text,
1253
+ // subject: subject,
1254
+ // status: status,
1255
+ // participants: participants,
1256
+ // participantsAgents: participantsAgents,
1257
+ // participantsBots: participantsBots,
1258
+ // hasBot: hasBot,
1259
+ // department: dep_id,
1260
+ // // agents: agents,
1261
+
1262
+ // //others
1263
+ // sourcePage: sourcePage,
1264
+ // language: language,
1265
+ // userAgent: userAgent,
1266
+ // assigned_at: assigned_at,
1267
+
1268
+ // attributes: attributes,
1269
+ // //standard
1270
+ // id_project: id_project,
1271
+ // createdBy: createdBy,
1272
+ // updatedBy: createdBy,
1273
+ // preflight: preflight,
1274
+ // channel: channel,
1275
+ // location: location,
1276
+ // snapshot: snapshot,
1277
+ // tags: tags,
1278
+ // notes: notes,
1279
+ // priority: priority,
1280
+ // auto_close: auto_close,
1281
+ // followers: followers,
1282
+ // createdAt: createdAt
1283
+ // });
1282
1284
 
1283
- winston.debug('newRequest.', newRequest);
1285
+ // winston.debug('newRequest.', newRequest);
1284
1286
 
1285
1287
 
1286
- //cacheinvalidation
1287
- return newRequest.save(function (err, savedRequest) {
1288
+ // //cacheinvalidation
1289
+ // return newRequest.save(function (err, savedRequest) {
1288
1290
 
1289
- if (err) {
1290
- winston.error('RequestService error for method createWithIdAndRequester for newRequest' + JSON.stringify(newRequest), err);
1291
- return reject(err);
1292
- }
1291
+ // if (err) {
1292
+ // winston.error('RequestService error for method createWithIdAndRequester for newRequest' + JSON.stringify(newRequest), err);
1293
+ // return reject(err);
1294
+ // }
1293
1295
 
1294
1296
 
1295
- winston.debug("Request created", savedRequest.toObject());
1297
+ // winston.debug("Request created", savedRequest.toObject());
1296
1298
 
1297
- var endDate = new Date();
1298
- winston.verbose("Performance Request created in millis: " + endDate - startDate);
1299
+ // var endDate = new Date();
1300
+ // winston.verbose("Performance Request created in millis: " + endDate - startDate);
1299
1301
 
1300
- requestEvent.emit('request.create.simple', savedRequest);
1302
+ // requestEvent.emit('request.create.simple', savedRequest);
1301
1303
 
1302
- let q = Project.findOne({ _id: request.id_project, status: 100 });
1303
- if (cacheEnabler.project) {
1304
- q.cache(cacheUtil.longTTL, "projects:id:" + request.id_project) //project_cache
1305
- winston.debug('project cache enabled for /project detail');
1306
- }
1307
- q.exec(async function (err, p) {
1308
- if (err) {
1309
- winston.error('Error getting project ', err);
1310
- }
1311
- if (!p) {
1312
- winston.warn('Project not found ');
1313
- }
1314
- //TODO REMOVE settings from project
1315
- let payload = {
1316
- project: p,
1317
- request: request
1318
- }
1304
+ // let q = Project.findOne({ _id: request.id_project, status: 100 });
1305
+ // if (cacheEnabler.project) {
1306
+ // q.cache(cacheUtil.longTTL, "projects:id:" + request.id_project) //project_cache
1307
+ // winston.debug('project cache enabled for /project detail');
1308
+ // }
1309
+ // q.exec(async function (err, p) {
1310
+ // if (err) {
1311
+ // winston.error('Error getting project ', err);
1312
+ // }
1313
+ // if (!p) {
1314
+ // winston.warn('Project not found ');
1315
+ // }
1316
+ // //TODO REMOVE settings from project
1317
+ // let payload = {
1318
+ // project: p,
1319
+ // request: request
1320
+ // }
1319
1321
 
1320
- requestEvent.emit('request.create.quote', payload);;
1322
+ // requestEvent.emit('request.create.quote', payload);;
1321
1323
 
1322
- });
1324
+ // });
1323
1325
 
1324
- return resolve(savedRequest);
1326
+ // return resolve(savedRequest);
1325
1327
 
1326
- });
1327
- // }).catch(function(err){
1328
- // return reject(err);
1329
- // });
1328
+ // });
1329
+ // // }).catch(function(err){
1330
+ // // return reject(err);
1331
+ // // });
1330
1332
 
1331
1333
 
1332
- });
1333
- }
1334
+ // });
1335
+ // }
1334
1336
 
1335
1337
 
1336
1338
 
@@ -1612,12 +1614,24 @@ class RequestService {
1612
1614
  .populate('participatingBots')
1613
1615
  .populate('participatingAgents')
1614
1616
  .populate({ path: 'requester', populate: { path: 'id_user' } })
1615
- .exec(function (err, updatedRequest) {
1617
+ .exec( async function (err, updatedRequest) {
1616
1618
  if (err) {
1617
1619
  winston.error(err);
1618
1620
  return reject(err);
1619
1621
  }
1620
1622
 
1623
+ let project = await projectService.getCachedProject(id_project).catch((err) => {
1624
+ winston.warn("Error getting cached project. Skip conversation quota check.")
1625
+ winston.warn("Getting cached project error: ", err)
1626
+ })
1627
+
1628
+ let payload = {
1629
+ project: project,
1630
+ request: updatedRequest
1631
+ }
1632
+ if (updatedRequest.channel.name === 'voice-vxml') {
1633
+ requestEvent.emit('request.close.quote', payload);
1634
+ }
1621
1635
  // winston.debug("updatedRequest", updatedRequest);
1622
1636
  return resolve(updatedRequest);
1623
1637
  });