@tiledesk/tiledesk-tybot-connector 2.0.38 → 2.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/engine/TiledeskChatbot.js +60 -3
  2. package/engine/mock/MockBotsDataSource.js +1 -1
  3. package/index.js +154 -3
  4. package/logs/app.log +110 -0
  5. package/package.json +1 -1
  6. package/services/TilebotService.js +36 -0
  7. package/tiledeskChatbotPlugs/DirectivesChatbotPlug.js +100 -519
  8. package/tiledeskChatbotPlugs/directives/DirAddKbContent.js +1 -1
  9. package/tiledeskChatbotPlugs/directives/DirAddTags.js +1 -1
  10. package/tiledeskChatbotPlugs/directives/DirAiCondition.js +1 -1
  11. package/tiledeskChatbotPlugs/directives/DirAiPrompt.js +1 -1
  12. package/tiledeskChatbotPlugs/directives/DirAskGPTV2.js +2 -2
  13. package/tiledeskChatbotPlugs/directives/DirAssistant.js +1 -1
  14. package/tiledeskChatbotPlugs/directives/DirBrevo.js +1 -1
  15. package/tiledeskChatbotPlugs/directives/DirCaptureUserReply.js +1 -1
  16. package/tiledeskChatbotPlugs/directives/DirClearTranscript.js +1 -1
  17. package/tiledeskChatbotPlugs/directives/DirClose.js +1 -1
  18. package/tiledeskChatbotPlugs/directives/DirCode.js +1 -1
  19. package/tiledeskChatbotPlugs/directives/DirCondition.js +1 -1
  20. package/tiledeskChatbotPlugs/directives/DirContactUpdate.js +1 -1
  21. package/tiledeskChatbotPlugs/directives/DirCustomerio.js +1 -1
  22. package/tiledeskChatbotPlugs/directives/DirDeleteVariable.js +1 -1
  23. package/tiledeskChatbotPlugs/directives/DirDepartment.js +1 -1
  24. package/tiledeskChatbotPlugs/directives/DirFlowLog.js +1 -1
  25. package/tiledeskChatbotPlugs/directives/DirGptTask.js +1 -1
  26. package/tiledeskChatbotPlugs/directives/DirHubspot.js +1 -1
  27. package/tiledeskChatbotPlugs/directives/DirIfOnlineAgentsV2.js +1 -1
  28. package/tiledeskChatbotPlugs/directives/DirIfOpenHours.js +1 -1
  29. package/tiledeskChatbotPlugs/directives/DirIntent.js +4 -0
  30. package/tiledeskChatbotPlugs/directives/DirJSONCondition.js +1 -1
  31. package/tiledeskChatbotPlugs/directives/DirMake.js +1 -1
  32. package/tiledeskChatbotPlugs/directives/DirMoveToAgent.js +1 -1
  33. package/tiledeskChatbotPlugs/directives/DirMoveToUnassigned.js +1 -1
  34. package/tiledeskChatbotPlugs/directives/DirQapla.js +1 -1
  35. package/tiledeskChatbotPlugs/directives/DirRandomReply.js +1 -1
  36. package/tiledeskChatbotPlugs/directives/DirReplaceBot.js +1 -1
  37. package/tiledeskChatbotPlugs/directives/DirReplaceBotV2.js +1 -1
  38. package/tiledeskChatbotPlugs/directives/DirReplaceBotV3.js +1 -1
  39. package/tiledeskChatbotPlugs/directives/DirReply.js +10 -2
  40. package/tiledeskChatbotPlugs/directives/DirReplyV2.js +1 -1
  41. package/tiledeskChatbotPlugs/directives/DirSendEmail.js +1 -1
  42. package/tiledeskChatbotPlugs/directives/DirSendWhatsapp.js +1 -1
  43. package/tiledeskChatbotPlugs/directives/DirSetAttributeV2.js +1 -1
  44. package/tiledeskChatbotPlugs/directives/DirWait.js +1 -1
  45. package/tiledeskChatbotPlugs/directives/DirWebRequestV2.js +1 -1
  46. package/tiledeskChatbotPlugs/directives/DirWebResponse.js +1 -1
  47. package/tiledeskChatbotPlugs/directives/DirWhatsappByAttribute.js +1 -1
  48. package/utils/TiledeskChatbotUtil.js +131 -141
@@ -680,189 +680,172 @@ class TiledeskChatbotUtil {
680
680
  // update request context
681
681
  try {
682
682
  winston.debug("Updating request variables. Message:", message);
683
- const messageId = message._id;
683
+
684
684
 
685
- if(process.env.BASE_URL){
686
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHAT_URL, `${process.env.BASE_URL}/dashboard/#/project/${projectId}/wsrequest/${requestId}/messages`);
685
+ const addQueue = [];
686
+ const deleteQueue = [];
687
+ const add = (k, v) => { if (v !== undefined && v !== null && k !== undefined && k !== null) addQueue.push([k, v]); };
688
+ const remove = (k) => { if(k) deleteQueue.push(k);}
689
+
690
+ // --- BASE ATTRIBUTES ---
691
+ if (process.env.BASE_URL) {
692
+ add(TiledeskChatbotConst.REQ_CHAT_URL, `${process.env.BASE_URL}/dashboard/#/project/${projectId}/wsrequest/${requestId}/messages`);
687
693
  }
688
694
 
689
- await chatbot.addParameter(TiledeskChatbotConst.REQ_PROJECT_ID_KEY, projectId);
690
- await chatbot.addParameter(TiledeskChatbotConst.REQ_REQUEST_ID_KEY, requestId);
691
-
695
+ add(TiledeskChatbotConst.REQ_PROJECT_ID_KEY, projectId);
696
+ add(TiledeskChatbotConst.REQ_REQUEST_ID_KEY, requestId);
697
+
698
+ // --- CHATBOT INFO ---
692
699
  if (chatbot.bot) {
693
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHATBOT_NAME_KEY, chatbot.bot.name);
694
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHATBOT_ID_KEY, chatbot.bot._id);
695
- }
696
-
697
- if (chatbotToken) {
698
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHATBOT_TOKEN, chatbotToken); // DEPRECATED
699
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHATBOT_TOKEN_v2, "JWT " + chatbotToken);
700
+ add(TiledeskChatbotConst.REQ_CHATBOT_NAME_KEY, chatbot.bot.name);
701
+ add(TiledeskChatbotConst.REQ_CHATBOT_ID_KEY, chatbot.bot._id);
700
702
  }
701
-
702
- if (process.env.TILEDESK_API) {
703
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHATBOT_TOKEN, chatbotToken); // DEPRECATED
704
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHATBOT_TOKEN_v2, "JWT " + chatbotToken);
703
+
704
+ // --- TOKEN ---
705
+ if (chatbotToken || process.env.TILEDESK_API) {
706
+ add(TiledeskChatbotConst.REQ_CHATBOT_TOKEN, chatbotToken); // deprecated
707
+ add(TiledeskChatbotConst.REQ_CHATBOT_TOKEN_v2, "JWT " + chatbotToken);
705
708
  }
706
-
709
+
707
710
  if (process.env.API_URL) {
708
- await chatbot.addParameter(TiledeskChatbotConst.API_BASE_URL, process.env.API_URL);
711
+ add(TiledeskChatbotConst.API_BASE_URL, process.env.API_URL);
709
712
  }
710
713
 
714
+ // --- USER MESSAGE ---
711
715
  if (message.text && message.sender !== "_tdinternal") {
712
- await chatbot.deleteParameter(TiledeskChatbotConst.USER_INPUT); // user wrote, delete userInput, replyv2 will not trigger timeout action
713
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_USER_TEXT_KEY, message.text); // DEPRECATED
714
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_USER_TEXT_v2_KEY, message.text);
716
+ remove(TiledeskChatbotConst.USER_INPUT); // REAL delete
717
+
718
+ add(TiledeskChatbotConst.REQ_LAST_USER_TEXT_KEY, message.text); // deprecated
719
+ add(TiledeskChatbotConst.REQ_LAST_USER_TEXT_v2_KEY, message.text);
720
+
721
+ add(TiledeskChatbotConst.REQ_LAST_USER_MESSAGE_TYPE_KEY, message.type);
722
+ add(TiledeskChatbotConst.REQ_LAST_USER_MESSAGE_KEY,
723
+ TiledeskChatbotUtil.lastUserMessageFrom(message));
724
+
715
725
  if (message.channel) {
716
- if (message.channel.name === "chat21") {
717
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHAT_CHANNEL, "web"); // renames the channel in chat21
718
- }
719
- else {
720
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CHAT_CHANNEL, message.channel.name);
721
- }
726
+ const channelName = message.channel.name === "chat21" ? "web" : message.channel.name;
727
+ add(TiledeskChatbotConst.REQ_CHAT_CHANNEL, channelName);
722
728
  }
723
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_USER_MESSAGE_TYPE_KEY, message.type);
724
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_USER_MESSAGE_KEY, TiledeskChatbotUtil.lastUserMessageFrom(message)); // JSON TYPE *NEW
725
729
  }
726
730
 
727
- // get image
728
- if (message.type && message.type === "image" && message.metadata) {
729
- if (message.metadata.src) {
730
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_URL, message.metadata.src);
731
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_NAME, message.metadata.name);
732
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_WIDTH, message.metadata.width);
733
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_HEIGHT, message.metadata.height);
734
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_TYPE, message.metadata.type);
735
- }
731
+ // --- IMAGE ---
732
+ if (message.type && message.type === "image" && message.metadata?.src) {
733
+ add(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_URL, message.metadata.src);
734
+ add(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_NAME, message.metadata.name);
735
+ add(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_WIDTH, message.metadata.width);
736
+ add(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_HEIGHT, message.metadata.height);
737
+ add(TiledeskChatbotConst.REQ_LAST_USER_IMAGE_TYPE, message.metadata.type);
736
738
  }
737
739
 
738
- // get document
739
- if (message.type && message.type === "file" && message.metadata) {
740
- if (message.metadata.src) {
741
- await chatbot.addParameter("lastUserDocumentURL", message.metadata.src); // legacy. will be deprecated
742
- const url_as_attachment = message.metadata.src;
743
- await chatbot.addParameter("lastUserDocumentAsAttachmentURL", url_as_attachment);
744
- let url_inline = url_as_attachment;
745
- if (url_as_attachment.match(/.*\/download.*/)) { // removing "/download" removes the "Content-disposion: attachment" HTTP header
746
- url_inline = url_as_attachment.replace('/download', '/');
747
- }
748
- await chatbot.addParameter("lastUserDocumentAsInlineURL", url_inline);
749
- await chatbot.addParameter("lastUserDocumentName", message.metadata.name);
750
- await chatbot.addParameter("lastUserDocumentType", message.metadata.type);
740
+ // --- DOCUMENT ---
741
+ if (message.type && message.type === "file" && message.metadata?.src) {
742
+
743
+
744
+ if (message.metadata.src) {
745
+ const m = message.metadata;
746
+ add(TiledeskChatbotConst.REQ_LAST_USER_DOCUMENT_URL, m.src); // deprecated
747
+ add(TiledeskChatbotConst.REQ_LAST_USER_DOCUMENT_AS_ATTACHMENT_URL, m.src);
748
+
749
+ const inlineUrl = m.src.replace("/download", "/");
750
+ add(TiledeskChatbotConst.REQ_LAST_USER_DOCUMENT_AS_INLINE_URL, inlineUrl);
751
+
752
+ add(TiledeskChatbotConst.REQ_LAST_USER_DOCUMENT_NAME, m.name);
753
+ add(TiledeskChatbotConst.REQ_LAST_USER_DOCUMENT_TYPE, m.type);
751
754
  }
752
755
  }
753
756
 
757
+ // --- LEAD ---
754
758
  if (message && message.request && message.request.lead) {
755
759
  winston.debug("(TiledeskChatbotUtil) Lead found with email: " + message.request.lead.email + " and lead.fullname " + message.request.lead.fullname);
756
- let currentLeadEmail = await chatbot.getParameter(TiledeskChatbotConst.REQ_LEAD_EMAIL_KEY);
757
- winston.debug("(TiledeskChatbotUtil) You lead email from attributes: " + currentLeadEmail);
758
- if (message.request.lead.email && !currentLeadEmail) {
759
- // worth saving
760
- winston.debug("(TiledeskChatbotUtil) worth saving email");
761
- try {
762
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LEAD_EMAIL_KEY, message.request.lead.email);
763
- }
764
- catch(error) {
765
- winston.error("(TiledeskChatbotUtil) Error on setting userEmail:", error);
766
- }
767
- }
768
- let currentLeadName = await chatbot.getParameter(TiledeskChatbotConst.REQ_LEAD_USERFULLNAME_KEY);
769
- winston.debug("(TiledeskChatbotUtil) You lead email from attributes: " + currentLeadEmail);
770
- if (message.request.lead.fullname && !currentLeadName) {
771
- // worth saving
772
- winston.debug("(TiledeskChatbotUtil) worth saving email");
773
- try {
774
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LEAD_USERFULLNAME_KEY, message.request.lead.fullname);
775
- }
776
- catch(error) {
777
- winston.error("(TiledeskChatbotUtil) Error on setting userFullname: ", error);
778
- }
779
- }
760
+ const lead = message.request.lead;
761
+
762
+ const savedEmail = await chatbot.getParameter(TiledeskChatbotConst.REQ_LEAD_EMAIL_KEY);
763
+ if (lead.email && !savedEmail) add(TiledeskChatbotConst.REQ_LEAD_EMAIL_KEY, lead.email);
764
+
765
+ const savedName = await chatbot.getParameter(TiledeskChatbotConst.REQ_LEAD_USERFULLNAME_KEY);
766
+ if (lead.fullname && !savedName) add(TiledeskChatbotConst.REQ_LEAD_USERFULLNAME_KEY, lead.fullname);
780
767
 
781
768
  if (message.request.lead.phone) {
782
- await chatbot.addParameter(TiledeskChatbotConst.REQ_USER_PHONE_KEY, message.request.lead.phone);
769
+ add(TiledeskChatbotConst.REQ_USER_PHONE_KEY, lead.phone);
783
770
  }
784
- if (message.request.lead.lead_id && (message.request.lead.lead_id.startsWith("wab-") ||
785
- message.request.lead.lead_id.startsWith("vxml-") ||
786
- message.request.lead.lead_id.startsWith(CHANNEL_NAME.VOICE_TWILIO) ||
787
- message.request.lead.lead_id.startsWith(CHANNEL_NAME.SMS))) {
788
- const splits = message.request.lead.lead_id.split("-");
789
- if (splits && splits.length > 1) {
790
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CURRENT_PHONE_NUMBER_KEY,splits[1]);
771
+ if (lead.lead_id) {
772
+ const prefixes = ["wab-", "vxml-", CHANNEL_NAME.VOICE_TWILIO, CHANNEL_NAME.SMS];
773
+ if (prefixes.some(pref => lead.lead_id.startsWith(pref))) {
774
+ const parts = lead.lead_id.split("-");
775
+ if (parts[1]) add(TiledeskChatbotConst.REQ_CURRENT_PHONE_NUMBER_KEY, parts[1]);
791
776
  }
792
777
  }
793
778
  if (message.request.lead._id) {
794
- await chatbot.addParameter(TiledeskChatbotConst.REQ_USER_LEAD_ID_KEY, message.request.lead._id);
779
+ add(TiledeskChatbotConst.REQ_USER_LEAD_ID_KEY, lead._id);
795
780
  }
796
781
  if (message.request.lead.company) {
797
- await chatbot.addParameter(TiledeskChatbotConst.REQ_USER_COMPANY_KEY, message.request.lead.company);
782
+ add(TiledeskChatbotConst.REQ_USER_COMPANY_KEY, lead.company);
798
783
  }
799
784
  if (message.request.ticket_id) {
800
- await chatbot.addParameter(TiledeskChatbotConst.REQ_TICKET_ID_KEY, message.request.ticket_id);
785
+ add(TiledeskChatbotConst.REQ_TICKET_ID_KEY, message.request.ticket_id);
801
786
  }
802
787
  }
803
788
 
804
- await chatbot.addParameter(TiledeskChatbotConst.REQ_LAST_MESSAGE_ID_KEY, messageId);
789
+ // --- LAST MESSAGE ID ---
790
+ const messageId = message._id;
791
+ add(TiledeskChatbotConst.REQ_LAST_MESSAGE_ID_KEY, messageId);
792
+
793
+ // --- LOCATION ---
805
794
  if (message.request && message.request.location && message.request.location.country) {
806
- await chatbot.addParameter(TiledeskChatbotConst.REQ_COUNTRY_KEY, message.request.location.country);
795
+ add(TiledeskChatbotConst.REQ_COUNTRY_KEY, message.request.location.country);
807
796
  }
808
797
  if (message.request && message.request.location && message.request.location.city) {
809
- await chatbot.addParameter(TiledeskChatbotConst.REQ_CITY_KEY, message.request.location.city);
798
+ add(TiledeskChatbotConst.REQ_CITY_KEY, message.request.location.city);
810
799
  }
800
+
801
+ // --- USER CONTEXT ---
811
802
  if (message.request) {
812
- let user_language = message.request["language"];
813
- if (message.request["language"]) {
814
- var languages = parser.parse(message.request["language"]);
815
- if (languages && languages.length > 0 && languages[0].code) {
816
- user_language = languages[0].code;
817
- }
803
+ let userLang = message.request.language;
804
+ if (userLang) {
805
+ const parsed = parser.parse(userLang);
806
+ if (parsed?.[0]?.code) userLang = parsed[0].code;
818
807
  }
819
- await chatbot.addParameter(TiledeskChatbotConst.REQ_USER_SOURCE_PAGE_KEY, message.request.sourcePage);
820
- await chatbot.addParameter(TiledeskChatbotConst.REQ_USER_LANGUAGE_KEY, user_language);
821
- await chatbot.addParameter(TiledeskChatbotConst.REQ_USER_AGENT_KEY, message.request.userAgent);
808
+
809
+ add(TiledeskChatbotConst.REQ_USER_SOURCE_PAGE_KEY, message.request.sourcePage);
810
+ add(TiledeskChatbotConst.REQ_USER_LANGUAGE_KEY, userLang);
811
+ add(TiledeskChatbotConst.REQ_USER_AGENT_KEY, message.request.userAgent);
812
+
822
813
  if (message.request.attributes && message.request.attributes.decoded_jwt) {
823
- await chatbot.addParameter(TiledeskChatbotConst.REQ_DECODED_JWT_KEY, message.request.attributes.decoded_jwt);
824
- }
825
- if (message.request.requester) {
826
- if (message.request.requester.isAuthenticated === true) {
827
- await chatbot.addParameter(TiledeskChatbotConst.REQ_REQUESTER_IS_AUTHENTICATED_KEY, true);
828
- }
829
- else {
830
- await chatbot.addParameter(TiledeskChatbotConst.REQ_REQUESTER_IS_AUTHENTICATED_KEY, false);
831
- }
814
+ add(TiledeskChatbotConst.REQ_DECODED_JWT_KEY, message.request.attributes.decoded_jwt);
832
815
  }
816
+
817
+ const auth = !!message.request.requester?.isAuthenticated;
818
+ add(TiledeskChatbotConst.REQ_REQUESTER_IS_AUTHENTICATED_KEY, auth);
833
819
  }
834
- if (message.request && message.request.department) {
835
- // It was an error when getting this from widget message's attributes
836
- // await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_ID_KEY, message.attributes.departmentId);
837
- // await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_NAME_KEY, message.attributes.departmentName);
838
- // get from request.department instead
839
- await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_ID_KEY, message.request.department._id);
840
- await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_NAME_KEY, message.request.department.name);
841
- }
842
- else if (message.attributes && message.attributes.departmentId) {
843
- await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_ID_KEY, message.attributes.departmentId);
844
- await chatbot.addParameter(TiledeskChatbotConst.REQ_DEPARTMENT_NAME_KEY, message.attributes.departmentName);
820
+
821
+ // --- DEPARTMENT ---
822
+ const dep = message.request?.department || message.attributes;
823
+ if (dep) {
824
+ add(TiledeskChatbotConst.REQ_DEPARTMENT_ID_KEY, dep.departmentId || dep._id);
825
+ add(TiledeskChatbotConst.REQ_DEPARTMENT_NAME_KEY, dep.departmentName || dep.name);
845
826
  }
846
827
 
828
+ // --- EMAIL ATTRIBUTES ---
847
829
  if (message.attributes) {
848
- const attrFields = [
849
- { key: TiledeskChatbotConst.REQ_EMAIL_SUBJECT, attr: "email_subject" },
850
- { key: TiledeskChatbotConst.REQ_EMAIL_TO, attr: "email_toEmail" },
851
- { key: TiledeskChatbotConst.REQ_EMAIL_FROM, attr: "email_fromEmail" },
852
- { key: TiledeskChatbotConst.REQ_EMAIL_MESSAGE_ID, attr: "email_messageId" },
853
- { key: TiledeskChatbotConst.REQ_EMAIL_REPLY_TO, attr: "email_replyTo" },
854
- { key: TiledeskChatbotConst.REQ_EMAIL_EML, attr: "email_eml" },
855
- { key: TiledeskChatbotConst.REQ_EMAIL_ATTACHMENTS_LINK, attr: "link" },
856
- { key: TiledeskChatbotConst.REQ_EMAIL_ATTACHMENTS_FILES, attr: "attachments" },
857
- // aggiungi qui altri campi se necessario
830
+ const emailMapping = [
831
+ ["email_subject", TiledeskChatbotConst.REQ_EMAIL_SUBJECT],
832
+ ["email_toEmail", TiledeskChatbotConst.REQ_EMAIL_TO],
833
+ ["email_fromEmail", TiledeskChatbotConst.REQ_EMAIL_FROM],
834
+ ["email_messageId", TiledeskChatbotConst.REQ_EMAIL_MESSAGE_ID],
835
+ ["email_replyTo", TiledeskChatbotConst.REQ_EMAIL_REPLY_TO],
836
+ ["email_eml", TiledeskChatbotConst.REQ_EMAIL_EML],
837
+ ["link", TiledeskChatbotConst.REQ_EMAIL_ATTACHMENTS_LINK],
838
+ ["attachments", TiledeskChatbotConst.REQ_EMAIL_ATTACHMENTS_FILES]
858
839
  ];
859
- for (const field of attrFields) {
860
- if (message.attributes[field.attr] !== undefined && message.attributes[field.attr] !== null) {
861
- await chatbot.addParameter(field.key, message.attributes[field.attr]);
840
+
841
+ for (const [attr, key] of emailMapping) {
842
+ if (message.attributes[attr] !== undefined) {
843
+ add(key, message.attributes[attr]);
862
844
  }
863
845
  }
864
846
  }
865
847
 
848
+ // --- PAYLOAD ---
866
849
  if (message && message.request && message.request.attributes && message.request.attributes.payload) {
867
850
  if (!message.attributes) {
868
851
  message.attributes = {}
@@ -873,15 +856,15 @@ class TiledeskChatbotUtil {
873
856
  if (message.attributes) {
874
857
  winston.debug("(TiledeskChatbotUtil) Ok message.attributes ", message.attributes);
875
858
 
876
- await chatbot.addParameter(TiledeskChatbotConst.REQ_END_USER_ID_KEY, message.attributes.requester_id);
877
- await chatbot.addParameter(TiledeskChatbotConst.REQ_END_USER_IP_ADDRESS_KEY, message.attributes.ipAddress);
859
+ add(TiledeskChatbotConst.REQ_END_USER_ID_KEY, message.attributes.requester_id);
860
+ add(TiledeskChatbotConst.REQ_END_USER_IP_ADDRESS_KEY, message.attributes.ipAddress);
878
861
  if (message.attributes.payload) {
879
862
  try {
880
863
  for (const [key, value] of Object.entries(message.attributes.payload)) {
881
864
  const value_type = typeof value;
882
- await chatbot.addParameter(key, value);
865
+ add(key, value);
883
866
  }
884
- await chatbot.addParameter("payload", message.attributes.payload);
867
+ add("payload", message.attributes.payload);
885
868
  }
886
869
  catch(err) {
887
870
  winston.error("(TiledeskChatbotUtil) Error importing message payload in request variables: ", err);
@@ -891,19 +874,19 @@ class TiledeskChatbotUtil {
891
874
  // TODO - REMOVE - THEY ARE IN ATTRIBUTES.PAYLOAD
892
875
  // voice-vxml attributes
893
876
  if (message.attributes.dnis) {
894
- await chatbot.addParameter("dnis", message.attributes.dnis);
877
+ add("dnis", message.attributes.dnis);
895
878
  }
896
879
  if (message.attributes.callId) {
897
- await chatbot.addParameter("callId", message.attributes.callId);
880
+ add("callId", message.attributes.callId);
898
881
  }
899
882
  if (message.attributes.ani) {
900
- await chatbot.addParameter("ani", message.attributes.ani);
883
+ add("ani", message.attributes.ani);
901
884
  }
902
885
  }
903
886
 
904
887
 
905
888
 
906
-
889
+ // --- GLOBALS ---
907
890
  const _bot = chatbot.bot; // aka FaqKB
908
891
  winston.debug("(TiledeskChatbotUtil) Adding Globals to context: ", _bot);
909
892
 
@@ -911,7 +894,7 @@ class TiledeskChatbotUtil {
911
894
  winston.debug("(TiledeskChatbotUtil) Got Globals: ", _bot.attributes.globals);
912
895
  _bot.attributes.globals.forEach(async (global_var) => {
913
896
  winston.error("(TiledeskChatbotUtil) Adding global: " + global_var.key + " value: " + global_var.value);
914
- await chatbot.addParameter(global_var.key, global_var.value);
897
+ add(global_var.key, global_var.value);
915
898
  });
916
899
  }
917
900
  // await chatbot.addParameter("testVar",
@@ -922,6 +905,13 @@ class TiledeskChatbotUtil {
922
905
  // }
923
906
  // }
924
907
  // );
908
+
909
+
910
+ // --- FINAL BATCH EXECUTION ---
911
+ await Promise.all([
912
+ ...addQueue.map(([key, value]) => chatbot.addParameter(key, value)),
913
+ ...deleteQueue.map(key => chatbot.deleteParameter(key))
914
+ ]);
925
915
 
926
916
  } catch(error) {
927
917
  winston.error("(TiledeskChatbotUtil) updateRequestAttributes Error: ", error);