call.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. module.exports = function(request, response) {
  2. /**
  3. * Intégration des dépendences SQLITE3
  4. */
  5. const sqlite3 = require('sqlite3').verbose();
  6. const db = new sqlite3.Database('./db/data.db');
  7. /**
  8. * Fichier contenant les configurations nécéssaires au bon fonctionnement du système
  9. */
  10. const config = require('../config');
  11. /**
  12. * Identification et déclaration Twilio
  13. */
  14. const client = require('twilio')(config.accountSid, config.authToken);
  15. /**
  16. * Récupération des variables postées permettant d'ordonner l'appel
  17. */
  18. var to = request.body.to || null;
  19. var user = request.body.user || null;
  20. var service = request.body.service || null;
  21. var name = request.body.name || null;
  22. var callSid = null;
  23. /**
  24. * Si il manque l'une des variable, transmettre l'erreur et empêcher le fonctionnement du système
  25. */
  26. if (to == null || user == null || service == null) {
  27. return response.status(200).json({
  28. error: 'Please post all the informations needed.'
  29. });
  30. }
  31. /**
  32. * Si l'on ne trouve pas l'emplacement du fichier service, alors cela veut dire que le service n'est pas supporté et l'on retourne une erreur
  33. */
  34. if (config[service + 'filepath'] == undefined) {
  35. return response.status(200).json({
  36. error: "The service wasn't recognised."
  37. });
  38. }
  39. if (!!!user) {
  40. return response.status(200).json({
  41. error: "Bad user name."
  42. });
  43. }
  44. if (!!!service) {
  45. return response.status(200).json({
  46. error: "Bad service name."
  47. });
  48. }
  49. /**
  50. * Si le numéro de téléphone est correcte, alors on lance l'appel
  51. */
  52. if (!to.match(/^\d{8,14}$/g)) {
  53. return response.status(200).json({
  54. error: 'Bad phone number.'
  55. });
  56. }
  57. /**
  58. * API Twilio permettant d'émettre l'appel
  59. */
  60. client.calls.create({
  61. method: 'POST',
  62. statusCallbackEvent: ['initiated', 'answered', 'completed'],
  63. statusCallback: config.serverurl + '/status/' + config.apipassword,
  64. url: config.serverurl + '/voice/' + config.apipassword,
  65. to: to,
  66. from: config.callerid
  67. }).then((call) => {
  68. callSid = call.sid;
  69. /**
  70. * Ajout à la DB Sqlite3 de l'appel lancé
  71. */
  72. db.get('SELECT callSid FROM calls WHERE callSid = ?', [callSid], (err, row) => {
  73. if (err) {
  74. return console.log(err.message);
  75. }
  76. /**
  77. * Si l'appel n'a pas déjà été enregistré, (vérification au niveau callSid => identificateur unique d'appel), alors l'enregistrer
  78. */
  79. if (row == undefined) {
  80. db.run(`INSERT INTO calls(callSid, user, service, itsto, name) VALUES(?, ?, ?, ?, ?)`, [callSid, user, service, to, name], function(err) {
  81. if (err) {
  82. return console.log(err.message);
  83. }
  84. });
  85. } else {
  86. db.run(`UPDATE calls SET user = ?, service = ?, itsto = ?, name = ? WHERE callSid = ?`, [user, service, to, callSid, name], function(err) {
  87. if (err) {
  88. return console.log(err.message);
  89. }
  90. });
  91. }
  92. });
  93. response.status(200).json({
  94. callSid
  95. });
  96. }).catch(error => {
  97. return response.status(200).json({
  98. error: 'There was a problem with your call, check if your account is upgraded. ' + error
  99. });
  100. });
  101. };