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

app.js 4.3 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
  1. // This loads the environment variables from the .env file
  2. require('dotenv-extended').load();
  3. var builder = require('botbuilder');
  4. var restify = require('restify');
  5. var Promise = require('bluebird');
  6. var url = require('url');
  7. var Swagger = require('swagger-client');
  8. // Swagger client for Bot Connector API
  9. var connectorApiClient = new Swagger({
  10. url: 'https://raw.githubusercontent.com/Microsoft/BotBuilder/master/CSharp/Library/Microsoft.Bot.Connector.Shared/Swagger/ConnectorAPI.json',
  11. usePromise: true
  12. });
  13. // Setup Restify Server
  14. var server = restify.createServer();
  15. server.listen(process.env.port || process.env.PORT || 3978, function () {
  16. console.log('%s listening to %s', server.name, server.url);
  17. });
  18. // Create chat bot
  19. var connector = new builder.ChatConnector({
  20. appId: process.env.MICROSOFT_APP_ID,
  21. appPassword: process.env.MICROSOFT_APP_PASSWORD
  22. });
  23. // Listen for messages
  24. server.post('/api/messages', connector.listen());
  25. // Bot setup
  26. var bot = new builder.UniversalBot(connector, function (session) {
  27. var message = session.message;
  28. var conversationId = message.address.conversation.id;
  29. // when a group conversation message is recieved,
  30. // get the conversation members using the REST API and print it on the conversation.
  31. // 1. inject the JWT from the connector to the client on every call
  32. addTokenToClient(connector, connectorApiClient).then(function (client) {
  33. // 2. override API client host and schema (https://api.botframework.com) with channel's serviceHost (e.g.: https://slack.botframework.com or http://localhost:NNNN)
  34. var serviceUrl = url.parse(message.address.serviceUrl);
  35. var serviceScheme = serviceUrl.protocol.split(':')[0];
  36. client.setSchemes([serviceScheme]);
  37. client.setHost(serviceUrl.host);
  38. // 3. GET /v3/conversations/{conversationId}/members
  39. return client.Conversations.Conversations_GetConversationMembers({ conversationId: conversationId })
  40. .then(function (res) {
  41. printMembersInChannel(message.address, res.obj);
  42. });
  43. }).catch(function (error) {
  44. console.log('Error retrieving conversation members', error);
  45. });
  46. });
  47. bot.on('conversationUpdate', function (message) {
  48. if (message.membersAdded && message.membersAdded.length > 0) {
  49. var membersAdded = message.membersAdded
  50. .map(function (m) {
  51. var isSelf = m.id === message.address.bot.id;
  52. return (isSelf ? message.address.bot.name : m.name) || '' + ' (Id: ' + m.id + ')';
  53. })
  54. .join(', ');
  55. bot.send(new builder.Message()
  56. .address(message.address)
  57. .text('Welcome ' + membersAdded));
  58. }
  59. if (message.membersRemoved && message.membersRemoved.length > 0) {
  60. var membersRemoved = message.membersRemoved
  61. .map(function (m) {
  62. var isSelf = m.id === message.address.bot.id;
  63. return (isSelf ? message.address.bot.name : m.name) || '' + ' (Id: ' + m.id + ')';
  64. })
  65. .join(', ');
  66. bot.send(new builder.Message()
  67. .address(message.address)
  68. .text('The following members ' + membersRemoved + ' were removed or left the conversation :('));
  69. }
  70. });
  71. // Helper methods
  72. // Inject the connector's JWT token into to the Swagger client
  73. function addTokenToClient(connector, clientPromise) {
  74. // ask the connector for the token. If it expired, a new token will be requested to the API
  75. var obtainToken = Promise.promisify(connector.getAccessToken.bind(connector));
  76. return Promise.all([obtainToken(), clientPromise]).then(function (values) {
  77. var token = values[0];
  78. var client = values[1];
  79. client.clientAuthorizations.add('AuthorizationBearer', new Swagger.ApiKeyAuthorization('Authorization', 'Bearer ' + token, 'header'));
  80. return client;
  81. });
  82. }
  83. // Create a message with the member list and send it to the conversationAddress
  84. function printMembersInChannel(conversationAddress, members) {
  85. if (!members || members.length === 0) return;
  86. var memberList = members.map(function (m) { return '* ' + m.name + ' (Id: ' + m.id + ')'; })
  87. .join('\n ');
  88. var reply = new builder.Message()
  89. .address(conversationAddress)
  90. .text('These are the members of this conversation: \n ' + memberList);
  91. bot.send(reply);
  92. }
Tip!

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

Comments

Loading...