Skip to content

Instantly share code, notes, and snippets.

@voipnorm
Last active October 2, 2019 21:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save voipnorm/5b51c53245cf2121d15fc324dab47878 to your computer and use it in GitHub Desktop.
Save voipnorm/5b51c53245cf2121d15fc324dab47878 to your computer and use it in GitHub Desktop.
Online Meeting Button Macro
const xapi = require('xapi');
const MYSITE = '<yourWebexSite>.';
const domain = "webex.com";
var meetingID = '';
const REGEXP_WEBEX = /(webex.com)$/;
const REGEXP_ALPHA = /^[a-zA-Z]+$/;
const REGEX_WEBEXID = /^\d{9}$/;
const REGEXP_AT =/^.+@.+$/;
function onlineMeeting() {
xapi.event.on('UserInterface Extensions Panel Clicked', (event) => {
console.log('event', event.PanelId);
if (event.PanelId == 'online_conference') {
//Intial press of conference button
xapi.command('UserInterface Message TextInput Display', {
FeedbackId: 'MeetingID',
KeyboardState: 'Open',
InputType: 'Numeric',
Title: 'Join an online Meeting',
Text: 'Enter just the Webex Meeting ID or Entire URI',
Placeholder: 'Powered by VoIPNorm',
SubmitText: 'Join'
});
}
})
xapi.event.on('UserInterface Message TextInput Response', (event) => {
if (event.FeedbackId === 'MeetingID') {
const meetingID = event.Text;
//User enters full URI
if(REGEXP_AT.exec(meetingID)){
xapi.command('Dial', { Number: meetingID});
}
//User enters PMR address
if (REGEXP_ALPHA.exec(meetingID)) {
var uri = meetingID + '@' + MYSITE + domain;
xapi.command('Dial', {Number: uri, DisplayName: "Webex PMR"});
//User enter webex numeric ID
}
if(REGEX_WEBEXID.exec(meetingID)) {
var URI = meetingID+'@'+domain;
xapi.command('Dial', {Number: URI, DisplayName: "Webex"});
}else{
xapi.command('UserInterface Message TextInput Display', {
FeedbackId: 'entireUrl',
Title: `Invalid Webex Meeting ID`,
Text: 'Please enter the entire meeting URI e.g 123456789@sitename.com.',
KeyboardState: 'Open',
Placeholder: 'Powered by VoIPNorm',
SubmitText: 'Join',
})
}
}
})
}
function afterCall() {
xapi.event.on('CallDisconnect', (event) => {
if (REGEXP_WEBEX.exec(event.RequestedURI)){
xapi.command("UserInterface Message Prompt Display", {
FeedbackId: 'webex_feedback',
Title: "How was the meeting experience",
Text: 'How would you rate this call',
'Option.1':'It was Great',
'Option.2':'Meeting ID was rejected.',
Duration: 8
});
xapi.event.on('UserInterface Message Prompt Response', (event) => {
console.log(event);
if(event.FeedbackId === 'webex_feedback'){
var displaytitle = '';
var displaytext = '';
switch(event.OptionId){
case '1':
displaytitle = ':-)';
displaytext = 'Thank you, yet another satisfied customer!!!';
xapi.command("UserInterface Message Alert Display", {Title: displaytitle, Text: displaytext, Duration: 8});
break;
case '2':
xapi.command('UserInterface Message TextInput Display', {
FeedbackId: 'entireUrl',
Title: `Lets Try Joining that Meeting Again`,
Text: 'Please enter the entire meeting URI e.g 12345678@sitename.com',
//InputType: 'Numeric',
Placeholder: 'Powered by VoIPNorm',
SubmitText: 'Join',
Duration: 30,
});
break;
}
}
});
}
});
}
function dialWebexURL(){
xapi.event.on('UserInterface Message TextInput Response', (event) => {
if(event.FeedbackId === 'entireUrl'){
var uri = event.Text;
if(REGEXP_AT.exec(uri)){
xapi.command('Dial', { Number: uri })
.catch(e => {
console.log("Dialing error:"+e)
})
}else{
xapi.command('UserInterface Message TextInput Display', {
FeedbackId: 'entireUrl',
Title: `Invalid Meeting Id`,
Text: 'Please enter the entire meeting URI e.g 12345678@sitename.com',
//InputType: 'Numeric',
Placeholder: 'Powered by VoIPNorm',
SubmitText: 'Join',
Duration: 30,
})
.catch(e => {
console.log("Command error:"+e)
});
}
}
})
}
function onError() {
xapi.on('error', (err) => {
console.error(`Macro failed: ${err}`);
});
}
function onReady(cb) {
onlineMeeting();
afterCall();
dialWebexURL();
onError();
cb();
}
onReady(function () {
console.log("Loading complete");
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment