Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

111
LINES

< > BotCompany Repo | #1028517 // Handover [have web chat bot switch to sales rep, Include]

JavaX fragment (include)

1  
concept HandoverConfig {
2  
  int handoverTimeout = 20;
3  
}
4  
5  
sclass Handover {
6  
  sclass Form_DoYouWantAHuman > FormInFlight {
7  
    private *() {}
8  
    *(Conversation conversation) {
9  
      steps.add(nu FormStep(
10  
        key := "answer",
11  
        displayText := getCannedAnswer("#DoYouWantAHuman", conversation),
12  
        placeholder := "",
13  
        buttons := ll("Yes", "No")
14  
      ));
15  
    }
16  
    
17  
    S complete() {
18  
      if (isYes(getValue("answer")))
19  
        ret conversation.setForm(new ConnectToWorkerForm).initialMessage();
20  
      else
21  
        ret getCannedAnswer("#dontConnectMe", conversation);
22  
    }
23  
    
24  
    bool allowGeneralOverride() { true; }
25  
  }
26  
  
27  
  sS handleHashtag(Conversation conv, S tag) null {
28  
    if (eqic(tag, "#ConnectMeToAHuman"))
29  
      ret tryToConnect(conv);
30  
31  
    if (eqic(tag, "#DoYouWantAHuman")) {
32  
      if (conv.form instanceof ConnectToWorkerForm)
33  
        ret getCannedAnswer("#stillConnecting", conv);
34  
35  
      conv.setForm(new Form_DoYouWantAHuman(conv));
36  
      ret ""; // Text comes from Q&A admin
37  
    }
38  
  }
39  
  
40  
  sS tryToConnect(Conversation conversation) {
41  
    print("Handover tryToConnect");
42  
    if (workerChat.anyWorkersAvailable())
43  
      ret conversation.setForm(new ConnectToWorkerForm).initialMessage();
44  
    else
45  
      ret getCannedAnswer("#away", conversation);
46  
  }
47  
  
48  
  sclass ConnectToWorkerForm > FormInFlight {
49  
    runnable class TimeoutAction { onTimeout(); }
50  
    
51  
    void update(Runnable change) {
52  
      super.update(change);
53  
      if (conversation.worker != null)
54  
        onWorkerAccepts();
55  
    }
56  
    
57  
    S initialMessage() {
58  
      addTimeout((double) uniq(HandoverConfig).handoverTimeout, new TimeoutAction);
59  
      workerChat.lastWorkerRequested = now(); // play special notification sound
60  
      ret getCannedAnswer("#connecting", conversation);
61  
    }
62  
    
63  
    void onWorkerAccepts() {
64  
      if (conversation == null) ret; // cancelled in the meantime
65  
      print("Handover accept");
66  
      conversation.add(new Msg(getCannedAnswer("#connected", conversation), false));
67  
      conversation.cancelForm();
68  
    }
69  
    
70  
    void onTimeout() {
71  
      if (conversation == null) ret; // cancelled in the meantime
72  
      print("Handover timeout");
73  
      conversation.add(new Msg(getCannedAnswer("#away", conversation), false));
74  
      conversation.cancelForm();
75  
    }
76  
  }
77  
  
78  
  sO html(S uri, SS params, AuthedDialogID auth) null {
79  
    S uri2 = appendSlash(uri);
80  
    bool requestAuthed = auth != null;
81  
  
82  
    if (startsWith(uri2, "/handover-admin/")) {
83  
      if (!requestAuthed) ret serveAuthForm(params.get('uri));
84  
      ret serveHandoverAdmin(uri, params);
85  
    }
86  
  }
87  
    
88  
  sS serveHandoverAdmin(S uri, SS params) {
89  
    uniq(HandoverConfig);
90  
    
91  
    S _nav = p(ahref(rawBotLink(dbBotID), "Main admin") + " | " + ahref(baseLink + "/handover-admin", "Handover admin"));
92  
    
93  
    HCRUD_Concepts<HandoverConfig> data = new HCRUD_Concepts<>(HandoverConfig);
94  
    data.fieldHelp = litmap(
95  
      handoverTimeout := "How long bot waits for an available worker (in seconds)",
96  
    );
97  
98  
    HCRUD crud = new(rawLink("handover-admin"), data) {
99  
      S frame(S title, S contents) {
100  
        ret hhtml(hhead_title_htmldecode(title) + hbody(
101  
          hsansserif() + hcss_responstable()
102  
          + _nav + h1(title)
103  
          + contents));
104  
      }
105  
    };
106  
    crud.singleton = true;
107  
    crud.cmdsLeft = true;
108  
    crud.tableClass = "responstable";
109  
    ret crud.renderPage(params);
110  
  }
111  
}

download  show line numbers  debug dex  old transpilations   

Travelled to 7 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv

No comments. add comment

Snippet ID: #1028517
Snippet name: Handover [have web chat bot switch to sales rep, Include]
Eternal ID of this version: #1028517/37
Text MD5: 2936d80e8c35df876df8a501485a817b
Author: stefan
Category: javax / web chat bot
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2020-10-24 12:07:40
Source code size: 3501 bytes / 111 lines
Pitched / IR pitched: No / No
Views / Downloads: 267 / 527
Version history: 36 change(s)
Referenced in: [show references]