-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.js
144 lines (133 loc) · 3.72 KB
/
client.js
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
/* global console, process */
'use strict';
var dotenv = require('dotenv');
dotenv.load({ silent: true });
var request = require('request-promise');
var uuid = require('uuid4');
var clientSecret = process.env.BOT_DIRECT_CHANNEL_SECRET;
var conversationId;
var baseUrl = 'https://directline.botframework.com';
//var baseUrl = 'http://96642ca4.ngrok.io';
function startConversation() {
/*
Each conversation on the Direct Line channel must be explicitly started using a POST
to the https://directline.botframework.com/api/conversations endpoint.
If the call was authorized with a token, the conversation ID is the conversation ID in the scoped token.
If a secret was used to start the conversation, the conversation will be started with a new, random ID.
*/
var options = {
method: 'POST',
json: true,
uri: baseUrl + '/api/conversations',
headers: {
// POST /api/tokens/conversation
Authorization: 'BotConnector ' + clientSecret
}
};
return request(options);
}
function sendMessage(msg) {
/*
The client may send messages to the bot by calling POST on
https://directline.botframework.com/api/conversations/{conversationId}/messages.
*/
var options = {
method: 'POST',
resolveWithFullResponse: true,
json: true,
uri: baseUrl + '/api/conversations/' + conversationId + '/messages',
headers: {
// POST /api/tokens/conversation
Authorization: 'BotConnector ' + clientSecret
},
body: {
"id": uuid(),
"conversationId": conversationId,
"created": new Date().toISOString(),
"from": "Direct Line from Stanton App",
"text": msg,
"channelData": {
something: 'specific to my app'
}
}
};
return request(options);
}
function getMessage() {
/*
The client may retrieve messages sent by the bot by calling GET on
https://directline.botframework.com/api/conversations/{conversationId}/messages.
The JSON structure returned contains a watermark that can be sent on subsequent requests to skip old messages.
The Direct Line API does not store messages indefinitely. Your client application must pick
them up quickly before they are deleted.
*/
var options = {
method: 'GET',
json: true,
uri: baseUrl + '/api/conversations/' + conversationId + '/messages',
headers: {
// POST /api/tokens/conversation
Authorization: 'BotConnector ' + clientSecret
}
};
return request(options);
}
startConversation()
.then(function(data) {
console.log('Start conversation: ', JSON.stringify(data));
conversationId = data.conversationId;
/*
{
"conversationId": "string",
"token": "string",
"eTag": "string"
}
*/
return sendMessage('Simon says');
})
.then(function(result) {
console.log('Send message: ', JSON.stringify(result));
/*
{
"error": {
"code": "MissingProperty",
"message": "string",
"statusCode": 0
}
}
*/
return getMessage();
})
.then(function(data) {
console.log('Get message: ', JSON.stringify(data));
var messages = data.messages;
/*
{
"messages": [
{
"id": "string",
"conversationId": "string",
"created": "2016-09-21T17:20:58.449Z",
"from": "string",
"text": "string",
"channelData": {},
"images": [
"string"
],
"attachments": [
{
"url": "string",
"contentType": "string"
}
],
"eTag": "string"
}
],
"watermark": "string",
"eTag": "string"
}
*/
})
.catch(function(err) {
console.log('Error: ', err);
});