After every single meeting, capturing action items, summarizing key decisions, and keeping everyone in the loop with follow-up emails can be a time-consuming hassle. In this blog post, we’ll delve into the innovative workflow using Lyzr-Automata designed to summarize meetings and send email reports seamlessly.
Before We Begin
Before we start, we need to get an Access Token to call Microsoft Graph API. Graph API is what we’ll be using to retrieve content and emails.
Steps to get Access Token and basic python setup template — LINK
Documentation of Graph API — LINK
We will be mainly using 2 APIs from Microsoft Graph
- Get callTranscript — To get the transcript of a particular meeting
- List attendanceRecords — To list all the attendees in a meeting
Now let’s look at how to automate the process using Lyzr-Automata, given that we have retrieved results from these 2 APIs.
Setup
Create a folder, set up a virtual environment and activate it
virtualenv my_env
source my_env/bin/activate
Install the following packages
lyzr-automata==0.1.2
python-dotenv==1.0.1
Setup .env file
OPENAI_API_KEY = "YOUR OPENAI API KEY"
EMAIL = "YOUR EMAIL ID"
PASSWORD = "YOUR APP PASSWORD"
Note: To get your App Password, follow these steps here
Get Started
1.APIs to fetch data (token is the Microsoft Access Token)
# Transcript API
def get_transcript_content(meeting_ID, transcript_ID, token):
endpoint = "https://graph.microsoft.com/v1.0/me/onlineMeetings/{meeting}/transcripts/{transcript}/content?$format=text/vtt".format(meeting = meeting_ID, transcript = transcript_ID)
api_result = requests.get(
endpoint,
headers={'Authorization': 'Bearer ' + token['access_token']},
timeout=30,
).text
return api_result
# Attendees API
def get_attendees_list(meeting_ID, report_ID, token):
endpoint = "https://graph.microsoft.com/v1.0/me/onlineMeetings/{meeting}/attendanceReports/{report}/attendanceRecords".format(meeting = meeting_ID, report = report_ID)
api_result = requests.get(
endpoint,
headers={'Authorization': 'Bearer ' + token['access_token']},
timeout=30,
).json()
attendance_values = api_result["value"]
email_list = []
for attendee in attendance_values:
if attendee["emailAddress"]:
email_list.append(attendee["emailAddress"])
return email_list
2.Load .env variables
from dotenv import load_dotenv
import os
from lyzr_automata.ai_models.openai import OpenAIModel
from lyzr_automata import Agent
from lyzr_automata import Task
from lyzr_automata.tasks.task_literals import InputType, OutputType
from lyzr_automata.tools.prebuilt_tools import send_email_by_smtp_tool
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
EMAIL = os.getenv("EMAIL") # Email ID to send emails from
PASSWORD = os.getenv("PASSWORD") # App password of the email
3.Initialize Text Model
# GPT 4 Text Model
open_ai_model_text = OpenAIModel(
api_key= OPENAI_API_KEY,
parameters={
"model": "gpt-4-turbo-preview",
"temperature": 0.2,
"max_tokens": 1500,
},
)
4.Create our Summarizer
# Intructions for our Agent
summarizer_agent = Agent(
prompt_persona="You are an intelligent agent that can summarize WebVTT content into a meaninful summary",
role="WebVTT summarizer",
)
input_transcript = get_transcript_content(meeting_ID, transcript_ID, token)
def email_draft_function(input_transcript):
# Draft a summary Task
summarize_content_task = Task(
name="Transcript summarizer",
agent=summarizer_agent,
output_type=OutputType.TEXT,
input_type=InputType.TEXT,
model=open_ai_model_text,
instructions="Summarize the WebVTT input into a meaningful Minutes of Meeting that captures immportant details and speakers. Return only the speaker name and their corresponding suammary [!IMPORTANT] Use HTML table to revise the email and beautify it", # Prompt Engineering
log_output=True,
enhance_prompt=False,
default_input=input_transcript # Input for the task
).execute()
return summarize_content_task # Return Output
5.Send Email Task
input_email_list = get_attendees_list(meeting_ID, report_ID, token)
# Email config
def email_sender_function(summarize_content_task, input_email_list):
email_sender = send_email_by_smtp_tool(
username=EMAIL,
password=PASSWORD,
host="smtp.gmail.com",
port=587,
sender_email=EMAIL
)
# Send email Task
send_email_task = Task(
name = "Send Email Task",
tool = email_sender,
instructions="Send Email",
model=open_ai_model_text,
input_tasks = [summarize_content_task],
default_input = input_email_list,
previous_output = summarize_content_task
).execute()
6. Setup your flask server and run!
FLOW Diagram
Want to create more of such amazing AI Workflows? Visit our website at GitHub to learn more about Lyzr-Automata!
Lyzr Website: https://www.lyzr.ai/
Lyzr Community Channel: Discord
Top comments (0)