Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Meeting as a Service #245

Closed
derberg opened this issue Jan 26, 2022 · 24 comments · Fixed by #308
Closed

Meeting as a Service #245

derberg opened this issue Jan 26, 2022 · 24 comments · Fixed by #308
Labels
enhancement New feature or request

Comments

@derberg
Copy link
Member

derberg commented Jan 26, 2022

Reason/Context

We grow as community, and also the need for different "focused" meetings grows. One of our principles is to be extremely transparent with all discussions. We need as easy as possible path to setup a meeting that is live streamed and recorded so anyone can see what was it about.

At the moment it is all manual, and I'm setting these things, and it is wrong. I don't want to be a bottleneck it the process.

Description

What we already have automated is the meeting issue (example) creation using this workflow

Such workflow can be run from UI, but also API and even GitHub CLI.

Screenshot 2022-01-26 at 19 01 32

What we need to work on

Event scheduling automation

First, as discussed here, we stop using Google Calendar and use Teamup (I already crated account for us -> https://teamup.com/ksdsztvo3116jrx9ip). Although I'm still not 100% sure it is needed, Google also have API, and ICS files, so you do not really need Google Account to know about events and can be fully anonymous (I just haven't seen any community using something different than Google Account)

We need automation that:

  • Schedules meeting with Zoom (to host meeting)
  • Creates event GitHub issue (to have a place for agenda and notes) - zoom link should be here
  • Creates an event in the calendar (to have calendar entry) - zoom link and issue link should be here

The trigger should be limited to folks that have the right to trigger workflow_dispatch:

  • as it is done with just issue creation now
  • we need to have answer who technically can trigger such workflows atm

Additionally:

  • Check if there is a better service than https://everytimezone.com/ that you do not have to manually check each time, to get a link to given time, but the URL is "predictable" so you can programmatically create a link
  • make sure zoom automatically will create captions/transcript the meeting realtime when people talk

Bonus:
many meetings have defined schedule, so would be nice to have an option to also schedule the meeting with automation only once, and then there would be a workflow that automatically creates GitHub issue for given meeting.

CRON schedule that sends newsletter

Again, as other automation, it should be GH Actions workflow.

We stop using Google Groups, we will use our MailChimp account where we have folks subscribed already. We will move folks from Google Groups there too.

Cron automation should send on Friday morning an email with a summary of all the AsyncAPI meetings that happen next week:

  • we need to explore API
  • @fmvilas I need your input on MailChimp, if we can use the current account that you pay for (which we should not, even though it is nice you pay for it), or maybe we should migrate to buttondown
  • we need to work on a nice email template (like we have here for GH issue meeting template) that can be modified by automation
    • first we need to fetch meetings from calendar
    • then we need to update template with meetings and then send newsletter

Meeting cancelation

It can happen that once scheduled meeting must be canceled.

We need automation:

  • I think best would be GH Actions workflow that reacts on meeting issue closed
  • Then we make API call to the calendar to remove event from the calendar with proper message why

Ad hoc meeting schedule

There is a use case that you want to discuss something with few folks ad hoc, brainstorm together but still in a transparent way, so it is visible to others.

We need simplified workflow that just creates zoom meeting and sends you back the meeting link.

Presentation layer aka UI

We need a way to present calendar to the community. On asyncapi.com landing page we have some information. I was just thinking if this is enough. Maybe we should embed calendar directly on the website? (but we would need to make Google Calendar much prettier than it is now 😄 )

So:

  • we do not have info about ics file
  • we do not have info where we do live streams, to what channels
  • we do not explain what type of meeting do we have
  • list of meetings is pulled from GitHub atm, but we do not trigger website rebuild whenever something changes in the community repo, like new meeting is added or some meeting got canceled

STUFF WE CANNOT AUTOMATE

we just need to document:

  • who can delegate hosts rights in zoom and to whom. You need to be the host to manage the meeting
  • share with selected group of people Restream connection URL that someone has to put manually in the zoom meeting to start live stream (unless zoom API allows it during schedule - UI doesn't)
  • who can delegate proper rights in YouTube and to whom. We need meeting organizer to be able to later go into the recorded stream, update description to improve discoverability, add it to proper playlist

☝🏼 needs to be well documented, probably this doc needs to be extended

we of course also need to document who has rights to run above automation to setup meetings

@Krishks369
Copy link

I would like to help on this issue.

@derberg
Copy link
Member Author

derberg commented Jan 27, 2022

@Krishks369 awesome 🚀 so I definitely need someones help to first figure out Zoom API. How using API:

  • schedule a single meeting
  • schedule a reoccurring meeting
  • update existing meeting

we need some working JS code that showcases how to do these 3 things and we know:

  • what are the requirements (what we need to know, like dates, meeting IDs)
  • can we schedule a meeting that is automatically recorded and also automatically uses a custom connection to streaming platform like restream (here https://www.youtube.com/watch?v=eAFJReus2CI they kinda say that it is only possible after meeting started, but just maybe on API level more options are available
  • do we need to turn on captions/transcription creation when scheduling a meeting or is it one time configuration only

we do not have yet official zoom account, so explore all the things on a free private account

@fmvilas
Copy link
Member

fmvilas commented Jan 27, 2022

@fmvilas I need your input on MailChimp, if we can use the current account that you pay for (which we should not, even though it is nice you pay for it), or maybe we should migrate to button-down

Have no opinion on this, @derberg. I'll keep paying for MailChimp for now so not a problem. Whatever works best.

@sudoshreyansh
Copy link

@derberg I want to work on the 'Event scheduling automation' part. I have no prior experience with the Zoom API but I can go through it. The rest of the parts seem related to it. So maybe I can pick up more stuff as we proceed ?

@derberg
Copy link
Member Author

derberg commented Jan 28, 2022

@sudoshreyansh hey, @Krishks369 will work on Zoom. You could figure out the Google API, write JS code that can create an event and cancel it with API and specify what we technically need. We also need events listing so later we can use it with MailChimp

Then we also need someone to figure out MailChimp API to send emails, what options we have there, how the email template part works, or better just create it once, manually and then use it's Id when calling API, but then how to pass customer content with meetings list.

Just please folks, write in comments who works on what, so we do not duplicate efforts 🙏🏼

@sudoshreyansh
Copy link

sudoshreyansh commented Jan 28, 2022

Ok @derberg I'll work on the Google API.

@sudoshreyansh
Copy link

I went through both Google Calendar and Teamup but I couldn't find any advantage of Google Calendar over Teamup from the user's perspective. Both provide an ICS feed so everyone can use whatever app they want. And Teamup's UI is much better for embedding.

From the API perspective, Google Calendar's API requires you to generate tokens through OAuth or create a service account which is a lot more setup than Teamup. Other than this, both the APIs provided the required functionality.

If the free subscription limits of Teamup are not a problem, I personally think Teamup would be a better option.

@derberg
Copy link
Member Author

derberg commented Feb 3, 2022

Thanks! I had the same view when I was checking team up, embedding is much better. What changes my perspective though is that over a half of our slack users are people with Gmail account. So you know, much easier for them to integrate asyncapi calendar with their calendars. This is what is super strong in Google calendar in our case. And complexity with service account setup is not something reoccurring but happens only once.

So it is "easiness of team up embedding" vs "easiness in integrating calendar". The question is what is more important 😃 embedding can always be mitigated by using API to fetch info about meetings to put them on the website as a list 🤔 like it is done now (but we fetch info from GH Issues)

@sudoshreyansh
Copy link

Yeah, that's true. So shall we go with Google Calendar or you want to give it more time ?

@derberg
Copy link
Member Author

derberg commented Feb 3, 2022

yeah, let's go with google calendar, existence of ICS file solves a problem for people that do not want to have Google Account.

@sudoshreyansh
Copy link

Okay

@Krishks369
Copy link

After looking through the Zoom API documentation and coding some API calls. I have a working
js code for scheduling a single meeting, reocurring meeting and to update existing meeting. verified it with my own account.

I have included the body of the request to let know what are the fields that are basic requirements to create a meeting

body:{
        'topic': 'Test',
        'type': '2',
        'start_time': '2022-02-08T10:00:00',
        'duration': '60'
       }
  • To update a meeting the meeting ID is needed to be passed in the request URL.
  • Autorecording feature is also available which can be specified while creating the meeting through API.
  • For streaming we have to specify stream_url, stream_key and page_url in the body. and streaming can be started and stopped using API calls.
  • As far as caption creation is concerned there is no option to turn on caption while scheduling meeting. So it has to be done manually I suppose.

@derberg
Copy link
Member Author

derberg commented Feb 3, 2022

@Krishks369 awesome!

As for the captions, looks like it is a global one-time setting. I just enabled it for our current zoom account
Screenshot 2022-02-03 at 18 29 24

We will see how it works during our next live stream next Wednesday -> #256

@alequetzalli can I ask you to check out how it goes? I mean look at the live stream recording and share opinion if this is ok or maybe we need something more sophisticated like otter.ai 🙏🏼

@sudoshreyansh
Copy link

I have written the JavaScript code for automating Google Calendar. The code can create, update, list upcoming, and delete events.

For creation, it requires:

  • Title of the event
  • Description, GitHub issue link, and zoom URL. These are put in a predefined template that forms the event's description.
  • Start and end time
  • For recurring meetings, the recurrence needs to be defined as specified in RFC5545. But, I am unsure if the workflow dispatcher would input the recurrence rules or something simpler that the code can translate to the recurrence rules.

Google Calendar also allows events to have private metadata which can be queried on. I currently store the GitHub issue number in the metadata of the events, which allows deletion and updation of events using the issue number.

Moreover, upcoming recurring events which do not have their GitHub issues opened yet, can also be queried and updated when their issues are opened.

For using the API, the code requires the key of a service account which has read and write access to the AsyncAPI Calendar.

@imabp
Copy link
Member

imabp commented Feb 11, 2022

See, it may sound a crazy idea to execute it via asyncapi/cli something like this.. @fmvilas @derberg but still I would definitely want to give it a try, as this will be nice fun to do 😄 and make Frans and Lukasz life easier.

asyncapi meet create --config=./meet-config.json --token="teamUpToken"

meetconfig.json

{
"type": "sig" | "contributor-stream" | "spec-3-meeting"|"custom-meeting",
"title": "optional, logic will be calculated based on previous meeting title, lik sig 3 sig 4", 
"date": "8th Feb 2022",
"repeats: "bi-weekly",
"starts":"930PM IST",
"ends":"1030PM IST",
"group":optional
...moreCustomOptions
} 

@sudoshreyansh
Copy link

sudoshreyansh commented Feb 11, 2022

@imabp That's a nice idea. But asyncapi/cli is a public-facing product if I am not wrong. How do you plan to add a developer's only feature in it?

@imabp
Copy link
Member

imabp commented Mar 8, 2022

@sudoshreyansh
I am not sure, if I can commit myself to this idea. As I am working on other important tools.

But creating a slack bot will help for such things..

@derberg
Copy link
Member Author

derberg commented Mar 14, 2022

Hey folks, lovely volunteers, does anyone have time to crack MailChimp API in are of newsletter requirements described in the issue? We know google API, we know Zoom, just MailChimp capabilities are not clear

@imabp
Copy link
Member

imabp commented Mar 14, 2022

Do you have any issues relevant to what we need to implement using Mailchimp?
@derberg

I can try out few of them.

@derberg
Copy link
Member Author

derberg commented Mar 14, 2022

We need to check if there is API to send an email using a given template created in MailChimp. We need also option to feed the template with custom content (list of meetings). And have simple code sample that shows how to use the API

@derberg
Copy link
Member Author

derberg commented Mar 15, 2022

@sudoshreyansh @Krishks369 can you folks share the code that you researched, for zoom and google calendar? I want to start working on final implementation

@Krishks369
Copy link

Krishks369 commented Mar 15, 2022

@derberg
index.js

const config = require('./config');
var request = require("request");

const payload = {
    iss: config.APIKey,
    exp: ((new Date()).getTime() + 5000)
};
const token = jwt.sign(payload, config.APISecret);



 var options = {
    uri: "https://api.zoom.us/v2/users/[email protected]/meetings", 
    qs: {
        status: 'active' 
    },
    auth: {
        'bearer': token
    },
    headers: {
        'User-Agent': 'Zoom-api-Jwt-Request',
        'content-type': 'application/json'
    },

    json: true ,

    body:{
        'topic': 'Test',
       'type': '2',
        'start_time': '2020-05-08T10:00:00',
        'duration': '60'
        
        }
    
    
  };


request.post(options,(error,response,body)=>{
    if(error){
        console.log('api fail')
    }
    else{
        console.log(body);
    }
})

config.js

const env = 'production'

const config = {
	production:{	
		APIKey : 'klNAn3j6SdG-RFfu3WpHig',
		APISecret : 'WOGKGwXKjlKd3APT2zxUv5Y1Wqg73prBcLAV'
	}
};

module.exports = config[env]

This api call is to create a meeting, change the fields wherever required and add fields according to the specific needs. Do ping me if you want some more info on specific settings.

more customization can be found in this Link

@sudoshreyansh
Copy link

@derberg sorry for the delay.
I added my code here - https://github.com/sudoshreyansh/google-calendar

Let me know if you have any issues or queries.

@derberg
Copy link
Member Author

derberg commented Apr 20, 2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants