Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

address.js 5.4 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
  1. var builder = require('botbuilder');
  2. var locationDialog = require('botbuilder-location');
  3. var lib = new builder.Library('address');
  4. // Register BotBuilder-Location dialog
  5. lib.library(locationDialog.createLibrary(process.env.BING_MAPS_KEY));
  6. // Main request address dialog, invokes BotBuilder-Location
  7. lib.dialog('/', [
  8. function (session, args) {
  9. // Ask for address
  10. args = args || {};
  11. var promptMessage = args.promptMessage || 'default_address_prompt';
  12. session.dialogData.promptMessage = promptMessage;
  13. // Use botbuilder-location dialog for address request
  14. var options = {
  15. prompt: promptMessage,
  16. useNativeControl: true,
  17. reverseGeocode: true,
  18. skipConfirmationAsk: true,
  19. requiredFields:
  20. locationDialog.LocationRequiredFields.streetAddress |
  21. locationDialog.LocationRequiredFields.locality |
  22. locationDialog.LocationRequiredFields.country
  23. };
  24. locationDialog.getLocation(session, options);
  25. },
  26. function (session, results) {
  27. if (results.response) {
  28. // Return selected address to previous dialog in stack
  29. var place = results.response;
  30. var address = locationDialog.getFormattedAddressFromPlace(place, ', ');
  31. session.endDialogWithResult({
  32. address: address
  33. });
  34. } else {
  35. // No address resolved, restart
  36. session.replaceDialog('/', { promptMessage: session.dialogData.promptMessage });
  37. }
  38. }]);
  39. // Request Billing Address
  40. // Prompt/Save selected address. Uses previous dialog to request and validate address.
  41. var UseSavedInfoChoices = {
  42. Home: 'home_address',
  43. Work: 'work_address',
  44. NotThisTime: 'not_this_time'
  45. };
  46. lib.dialog('billing', [
  47. function (session, args, next) {
  48. var selection = session.message.text;
  49. var saved = session.userData.billingAddresses = session.userData.billingAddresses || {};
  50. if (hasAddresses(saved)) {
  51. // Saved data found, check for selection
  52. if (selection && saved[selection]) {
  53. // Retrieve selection
  54. var savedAddress = saved[selection];
  55. session.dialogData.billingAddress = savedAddress;
  56. next();
  57. } else if (selection.toLowerCase() === session.gettext(UseSavedInfoChoices.NotThisTime).toLowerCase()) {
  58. // Ask for data
  59. next();
  60. } else {
  61. // No selection, prompt which saved address to use
  62. session.send('select_billing_address');
  63. var message = new builder.Message(session)
  64. .attachmentLayout(builder.AttachmentLayout.carousel);
  65. var homeAddress = saved[session.gettext(UseSavedInfoChoices.Home)];
  66. var workAddress = saved[session.gettext(UseSavedInfoChoices.Work)];
  67. if (homeAddress) message.addAttachment(createAddressCard(session, session.gettext(UseSavedInfoChoices.Home), homeAddress));
  68. if (workAddress) message.addAttachment(createAddressCard(session, session.gettext(UseSavedInfoChoices.Work), workAddress));
  69. message.addAttachment(createAddressCard(session, session.gettext(UseSavedInfoChoices.NotThisTime), 'add_new_address'));
  70. session.send(message);
  71. }
  72. } else {
  73. // No saved addresses data
  74. next();
  75. }
  76. },
  77. function (session, args, next) {
  78. if (session.dialogData.billingAddress) {
  79. // Address selected in previous step, skip
  80. return next();
  81. }
  82. // Ask for address
  83. session.beginDialog('/',
  84. {
  85. promptMessage: session.gettext('ask_billing_address')
  86. });
  87. },
  88. function (session, args, next) {
  89. if (session.dialogData.billingAddress) {
  90. return next();
  91. }
  92. // Retrieve address from previous dialog
  93. session.dialogData.billingAddress = args.address;
  94. // Ask to save address
  95. builder.Prompts.choice(session, 'ask_save_address', [
  96. session.gettext(UseSavedInfoChoices.Home),
  97. session.gettext(UseSavedInfoChoices.Work),
  98. session.gettext(UseSavedInfoChoices.NotThisTime)
  99. ]);
  100. },
  101. function (session, args, next) {
  102. var billingAddress = session.dialogData.billingAddress;
  103. if (args.response && args.response.entity !== session.gettext(UseSavedInfoChoices.NotThisTime)) {
  104. // Save address
  105. session.userData.billingAddresses = session.userData.billingAddresses || {};
  106. session.userData.billingAddresses[args.response.entity] = billingAddress;
  107. }
  108. // Return address
  109. session.endDialogWithResult({ billingAddress: billingAddress });
  110. }
  111. ]);
  112. // Helpers
  113. function hasAddresses(addresses) {
  114. return addresses[UseSavedInfoChoices.Home] || addresses[UseSavedInfoChoices.Work];
  115. }
  116. function createAddressCard(session, buttonTitle, address) {
  117. return new builder.HeroCard(session)
  118. .title(buttonTitle)
  119. .subtitle(address)
  120. .buttons([
  121. builder.CardAction.imBack(session, buttonTitle, buttonTitle)
  122. ]);
  123. }
  124. module.exports.UseSavedInfoChoices = UseSavedInfoChoices;
  125. // Export createLibrary() function
  126. module.exports.createLibrary = function () {
  127. return lib.clone();
  128. };
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...