]> git.r.bdr.sh - rbdr/dead-drop/blobdiff - lib/controllers/recording_menu.js
Merge branch 'release/1.0.0'
[rbdr/dead-drop] / lib / controllers / recording_menu.js
diff --git a/lib/controllers/recording_menu.js b/lib/controllers/recording_menu.js
new file mode 100644 (file)
index 0000000..55f2836
--- /dev/null
@@ -0,0 +1,82 @@
+'use strict';
+
+const Twilio = require('twilio');
+
+const internals = {};
+
+internals.kMenuTimeout = 10; // timeout in seconds
+internals.kContentType = 'application/xml'; // The content type used to respond
+internals.kMenuLanguage = 'es-mx'; // the language to use
+internals.kMainMenuRoute = '/menus/main';
+internals.kListenMessageRoute = '/recordings/';
+internals.kMenuMessage = 'Escribe el numero de mensaje y presiona gato para terminar.';
+internals.kTimeoutMessage = 'Bueno... volviendo al menĂș principal.';
+internals.kMenuInvalidResponseMessage = 'No entendĂ­... Volviendo al menu principal.'; // invalid selection message
+
+/**
+ * Handles the HTTP requests for the recording menu
+ *
+ * @class RecordingMenuController
+ */
+module.exports = internals.RecordingMenuController = class RecordingMenuController {
+
+  /**
+   * Serves the menu
+   *
+   * @function serveMenu
+   * @memberof RecordingMenuController
+   * @instance
+   * @return {generator} a koa compatible handler generator function
+   */
+  serveMenu() {
+
+    return function * () {
+
+      const response = new Twilio.TwimlResponse();
+
+      // the action will default to post in the same URL, so no change
+      // required there.
+      response.gather({
+        timeout: internals.kMenuTimeout
+      }, function nestedHandler() {
+
+        this.say(internals.kMenuMessage, { language: internals.kMenuLanguage });
+      })
+      .say(internals.kTimeoutMessage, { language: internals.kMenuLanguage })
+      .redirect(internals.kMainMenuRoute, { method: 'GET' });
+
+      this.type = internals.kContentType;
+      this.body = response.toString();
+    };
+  }
+
+  /**
+   * Parses the selected recording id
+   *
+   * @function parseMenuSelection
+   * @memberof RecordingMenuController
+   * @instance
+   * @return {generator} a koa compatible handler generator function
+   */
+  parseMenuSelection() {
+
+    return function * () {
+
+      const messageId = parseInt(this.request.body.Digits);
+
+      const response = new Twilio.TwimlResponse();
+
+      if (messageId) {
+        response.redirect(`${internals.kListenMessageRoute}${messageId}`, { method: 'GET' });
+      }
+      else {
+        response.say(internals.kMenuInvalidResponseMessage, { language: internals.kMenuLanguage })
+            .redirect(internals.kMainMenuRoute, { method: 'GET' });
+      }
+
+      this.type = internals.kContentType;
+      this.body = response.toString();
+    };
+  }
+};
+