You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ws-server.js 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // dialogflow
  2. const dialogflow = require('dialogflow');
  3. // server and websocket
  4. const WebSocket = require('ws');
  5. var fs = require('fs');
  6. const http = require('http');
  7. const https = require('https');
  8. const path = require('path');
  9. const express = require('express');
  10. const webSocketsServerPort = 8000;
  11. const serverpath = '/ws';
  12. const app = express();
  13. const router = express.Router();
  14. router.get('/', function (req, res) {
  15. res.sendFile(path.join(__dirname + '/index.html'));
  16. });
  17. app.use(express.static(__dirname + '/../client'));
  18. app.use('/', router);
  19. // var server = http.createServer(app);
  20. var server = https.createServer({
  21. key: fs.readFileSync('key.pem'),
  22. cert: fs.readFileSync('cert.pem')
  23. }, app);
  24. server.listen(process.env.port || webSocketsServerPort, function () {
  25. console.log((new Date()) + ' Server is listening on port ' +
  26. webSocketsServerPort);
  27. });
  28. const wss = new WebSocket.Server({ server: server, path: serverpath });
  29. wss.on('connection', function connection (ws) {
  30. ws.id = wss.getUniqueID();
  31. console.log(ws.id + ' connected');
  32. ws.on('message', function incoming (message) {
  33. promptQuery(message, ws);
  34. });
  35. ws.on('close', function (connection) {
  36. // close user connection
  37. });
  38. });
  39. const projectId = 'digitalerdemenztest';
  40. const sessionClient = new dialogflow.SessionsClient({
  41. keyFilename: 'dialogflow_cred_dem.json'
  42. });
  43. // Send request and log result
  44. function promptQuery (prompt, wsock) {
  45. let sessionId = wsock.id;
  46. let sessionPath = sessionClient.sessionPath(projectId, sessionId);
  47. const request = {
  48. session: sessionPath,
  49. queryInput: {
  50. text: {
  51. text: prompt,
  52. languageCode: 'de-DE'
  53. }
  54. }
  55. };
  56. sessionClient
  57. .detectIntent(request)
  58. .then(responses => {
  59. const result = responses[0].queryResult;
  60. console.log(` Query: ${result.queryText}`);
  61. console.log(` Response: ${result.fulfillmentText}`);
  62. if (result.intent) {
  63. console.log(` Intent: ${result.intent.displayName}`);
  64. } else {
  65. console.log(` No intent matched.`);
  66. }
  67. wsock.send(JSON.stringify(result));
  68. // checkIntent(result)
  69. })
  70. .catch(err => {
  71. console.error('ERROR:', err);
  72. });
  73. }
  74. // create unique id
  75. wss.getUniqueID = function () {
  76. function s4 () {
  77. return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
  78. }
  79. return s4() + s4() + '-' + s4();
  80. };