Last active
November 4, 2016 01:26
-
-
Save ObjectIsAdvantag/58a8e833507bf5acd336f19e3a513450 to your computer and use it in GitHub Desktop.
Simple script to boostrap Tropo with Spark log enabled
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// QUICK START GUIDE | |
// | |
// 1. Clone this gists and make it private | |
// 2. Create an incoming integratin in a Spark Room from the Spark Web client : http://web.ciscospark.com | |
// 3. Replace YOUR_INTEGRATION_SUFFIX by the integration id, example: Y2lzY29zcGFyazovL3VzL1dFQkhPT0svZjE4ZTI0MDctYzg3MS00ZTdmLTgzYzEtM2EyOGI1N2ZZZZZ | |
// 4. Replace APP by your Tropo application name, example: TropoBootstrap | |
// 5. Create your Tropo application pointing to your raw gist URL, by appending /raw/YOUR_GIST_NAME.js to the gist URL | |
// | |
// Cisco Spark Logging Library for Tropo | |
// | |
// Factory for the Spark Logging Library, with 2 parameters | |
// - the name of the application will prefix all your logs, | |
// - the Spark Incoming integration (to which logs will be posted) | |
// To create an Incoming Integration | |
// - click integrations in the right pane of a Spark Room (Example : I create a dedicated "Tropo Logs" room) | |
// - select incoming integration | |
// - give your integration a name, it will be displayed in the members lists (Example : I personally named it "from tropo scripting") | |
// - copy your integration ID, you'll use it to initialize the SparkLibrary | |
function SparkLog(appName, incomingIntegrationID) { | |
if (!appName) { | |
log("SPARK_LOG : bad configuration, no application name, exiting..."); | |
throw createError("SparkLibrary configuration error: no application name specified"); | |
} | |
this.tropoApp = appName; | |
if (!incomingIntegrationID) { | |
log("SPARK_LOG : bad configuration, no Spark incoming integration URI, exiting..."); | |
throw createError("SparkLibrary configuration error: no Spark incoming integration URI specified"); | |
} | |
this.sparkIntegration = incomingIntegrationID; | |
log("SPARK_LOG: all set for application:" + this.tropoApp + ", posting to integrationURI: " + this.sparkIntegration); | |
} | |
// This function sends the log entry to the registered Spark Room | |
// Invoke this function from the Tropo token-url with the "sparkIntegration" parameter set to the incoming Webhook ID you'll have prepared | |
// Returns true if the log entry was acknowledge by Spark (ie, got a 2xx HTTP status code) | |
SparkLog.prototype.log = function(newLogEntry) { | |
// Robustify | |
if (!newLogEntry) { | |
newLogEntry = ""; | |
} | |
var result; | |
try { | |
// Open Connection | |
var url = "https://api.ciscospark.com/v1/webhooks/incoming/" + this.sparkIntegration; | |
connection = new java.net.URL(url).openConnection(); | |
// Set timeout to 10s | |
connection.setReadTimeout(10000); | |
connection.setConnectTimeout(10000); | |
// Method == POST | |
connection.setRequestMethod("POST"); | |
connection.setRequestProperty("Content-Type", "application/json"); | |
// TODO : check if this cannot be removed | |
connection.setRequestProperty("Content-Length", newLogEntry.length); | |
connection.setUseCaches (false); | |
connection.setDoInput(true); | |
connection.setDoOutput(true); | |
//Send Post Data | |
bodyWriter = new java.io.DataOutputStream(connection.getOutputStream()); | |
log("SPARK_LOG: posting: " + newLogEntry + " to: " + url); | |
contents = '{ "text": "' + this.tropoApp + ': ' + newLogEntry + '" }' | |
bodyWriter.writeBytes(contents); | |
bodyWriter.flush (); | |
bodyWriter.close (); | |
result = connection.getResponseCode(); | |
log("SPARK_LOG: read response code: " + result); | |
if(result < 200 || result > 299) { | |
log("SPARK_LOG: could not log to Spark, message format not supported"); | |
return false; | |
} | |
} | |
catch(e) { | |
log("SPARK_LOG: could not log to Spark, socket Exception or Server Timeout"); | |
return false; | |
} | |
log("SPARK_LOG: log successfully sent to Spark, status code: " + result); | |
return true; // success | |
} | |
// Let's create several instances for various log levels | |
// Note that you may spread logs to distinct rooms by changing the integrationId | |
var SparkInfo = new SparkLog("APP-INFO", "YOUR_INTEGRATION_SUFFIX"); | |
var SparkDebug = new SparkLog("APP-DEBUG", "YOUR_INTEGRATION_SUFFIX"); | |
// | |
// Log Configuration happens here | |
// | |
// info level used to get a synthetic sump up of what's happing | |
function info(logEntry) { | |
log("INFO: " + logEntry); | |
SparkInfo.log(logEntry); | |
// Uncomment if you opt to go for 2 distinct Spark Rooms for DEBUG and INFO log levels | |
//SparkDebug.log(logEntry); | |
} | |
// debug level used to get detail informations | |
function debug(logEntry) { | |
log("DEBUG: " + logEntry); | |
SparkDebug.log(logEntry); | |
} | |
// You may check currentCall features here : https://www.tropo.com/docs/scripting/currentcall | |
if (currentCall) { | |
if (currentCall.network == "SMS") { | |
var input = currentCall.initialText; | |
debug("received: " + input + ", from: " + currentCall.callerID ); | |
// check we received a valid email address | |
var reversed = input.split("").reverse().join(""); | |
say("Tropo echo: " + reversed); | |
info("echoed: " + reversed + ", to: " + currentCall.callerID); | |
} | |
else { | |
// Speak a welcome message if the incoming call is not a SMS | |
debug("incoming call from: " + currentCall.callerID ); | |
say("Welcome to the Echo service.", { voice:"Susan"}); | |
wait(1000); | |
say("Text to this number, and get your message reversed.", { voice:"Kate"}); | |
wait(1000); | |
say("Transmettez un SMS à ce numéro, et recevez votre SMS inversé en retour.", { voice:"Aurelie"}); | |
info("spoke the welcome message to: " + currentCall.callerID ); | |
} | |
} | |
else { | |
debug("new API request, nothing there."); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment