Make workflow for transcription and summarization
A workflow for transcribing and summarizing video meetings using Make, Airtable, OpenAI and the Meeting Baas API
1. Overview
This guide outlines the process to set up a Make workflow for automating video meeting tasks and summarizing meeting transcripts.It will:
- Record video meetings (Google Meet, Microsoft Teams and Zoom) with a bot using the Meeting Baas 🐟 API
- Transcribe and summarize content with the OpenAI API
- Sync insights to an Airtable database using Make.com
2. Prerequisites
Required accounts and access:- Make account
- Airtable account with a team plan
- Meeting Baas API access
- OpenAI API key
3. Make Setup
Make account setup:- Save the workflow file below
- If you don't have a Make account, create one at make.com
- From the dashboard, create a new scenario
- Click the three horizontal dots and select 'Import Blueprint'
- Upload the Airtable Scenario file and save
- Rename your workflow (e.g., "Integration Airtable")
View on GitHub{ "name": "Integration Airtable", "flow": [ { "id": 1, "module": "airtable:webhook", "version": 3, "parameters": { "__IMTHOOK__": 509694 }, "mapper": {}, "metadata": { "designer": { "x": 0, "y": 0 }, "restore": { "parameters": { "__IMTHOOK__": { "data": { "editable": "false" }, "label": "Airtable Webhook" } } }, "parameters": [ { "name": "__IMTHOOK__", "type": "hook:airtable", "label": "Webhook", "required": true } ] } }, { "id": 3, "module": "airtable:ActionGetRecord", "version": 3, "parameters": { "__IMTCONN__": 1505942 }, "filter": { "name": "record_id", "conditions": [ [ { "a": "{{1.record_id}}", "o": "exist" } ] ] }, "mapper": { "id": "{{1.record_id}}", "base": "appMipeYj3rKOJv4z", "table": "tblIRQRiRRhh2LWgR", "useColumnId": false }, "metadata": { "designer": { "x": 300, "y": 0 }, "restore": { "expect": { "base": { "mode": "chose", "label": "Spoke AI Meeting Bot" }, "table": { "mode": "chose", "label": "Form Responses" }, "useColumnId": { "mode": "chose" } }, "parameters": { "__IMTCONN__": { "data": { "scoped": "true", "connection": "airtable3" }, "label": "Airtable OAuth connection (User ID: usrCQEOCGSxy9AxCW)" } } }, "parameters": [ { "name": "__IMTCONN__", "type": "account:airtable3,airtable2", "label": "Connection", "required": true } ], "expect": [ { "name": "base", "type": "select", "label": "Base", "required": true }, { "name": "useColumnId", "type": "boolean", "label": "Use Column ID", "required": true }, { "name": "table", "type": "select", "label": "Table", "required": true }, { "name": "id", "type": "text", "label": "Record ID", "required": true } ], "interface": [ { "name": "createdTime", "type": "date", "label": "Created Time" }, { "name": "id", "type": "number", "label": "id" }, { "name": "Meeting Bot Name", "type": "text", "label": "Meeting Bot Name" }, { "name": "Meeting URL", "type": "text", "label": "Meeting URL" }, { "name": "Meeting Bot Image", "spec": [ { "name": "id", "type": "text", "label": "ID" }, { "name": "url", "type": "url", "label": "URL" }, { "name": "filename", "type": "filename", "label": "File name" }, { "name": "size", "type": "uinteger", "label": "Size" }, { "name": "type", "type": "text", "label": "MIME type" }, { "name": "thumbnails", "spec": [ { "name": "small", "spec": [ { "name": "url", "type": "url", "label": "URL" }, { "name": "width", "type": "uinteger", "label": "Width" }, { "name": "height", "type": "uinteger", "label": "Height" } ], "type": "collection", "label": "Small" }, { "name": "large", "spec": [ { "name": "url", "type": "url", "label": "URL" }, { "name": "width", "type": "uinteger", "label": "Width" }, { "name": "height", "type": "uinteger", "label": "Height" } ], "type": "collection", "label": "Large" }, { "name": "full", "spec": [ { "name": "url", "type": "url", "label": "URL" }, { "name": "width", "type": "uinteger", "label": "Width" }, { "name": "height", "type": "uinteger", "label": "Height" } ], "type": "collection", "label": "Full" } ], "type": "collection", "label": "Thumbnails" } ], "type": "array", "label": "Meeting Bot Image" }, { "name": "Meeting Bot Entry Message", "type": "text", "label": "Meeting Bot Entry Message" }, { "name": "Created Time", "type": "date", "label": "Created Time" }, { "name": "API Key", "type": "text", "label": "API Key" }, { "name": "Created By", "type": "text", "label": "Created By" } ] } }, { "id": 2, "module": "http:ActionSendData", "version": 3, "parameters": { "handleErrors": false, "useNewZLibDeCompress": true }, "mapper": { "ca": "", "qs": [], "url": "https://api.meetingbaas.com/bots", "data": "{\n \"meeting_url\": \"{{3.`Meeting URL`}}\",\n \"bot_name\": \"{{ifempty(3.`Meeting Bot Name`; \"Make Meeting Bot\")}}\",\n \"bot_image\": \"{{3.`Meeting Bot Image`[].url}}https://www.make.com/assets/hq/img/make_logo_white.svg\",\n \"entry_message\": \"{{ifempty(3.`Meeting Bot Entry Message`; \"Hello - recording this meeting\")}}\",\n \"reserved\": false,\n \"speech_to_text\": \"Gladia\"\n}", "gzip": true, "method": "post", "headers": [ { "name": "x-spoke-api-key", "value": "{{3.`API Key`}}" } ], "timeout": "", "useMtls": false, "authPass": "", "authUser": "", "bodyType": "raw", "contentType": "application/json", "serializeUrl": false, "shareCookies": false, "parseResponse": false, "followRedirect": true, "useQuerystring": false, "followAllRedirects": false, "rejectUnauthorized": true }, "metadata": { "designer": { "x": 600, "y": 0 }, "restore": { "expect": { "qs": { "mode": "chose" }, "method": { "mode": "chose", "label": "POST" }, "headers": { "mode": "chose", "items": [ null ] }, "bodyType": { "label": "Raw" }, "contentType": { "label": "JSON (application/json)" } } }, "parameters": [ { "name": "handleErrors", "type": "boolean", "label": "Evaluate all states as errors (except for 2xx and 3xx )", "required": true }, { "name": "useNewZLibDeCompress", "type": "hidden" } ], "expect": [ { "name": "url", "type": "url", "label": "URL", "required": true }, { "name": "serializeUrl", "type": "boolean", "label": "Serialize URL", "required": true }, { "name": "method", "type": "select", "label": "Method", "required": true, "validate": { "enum": [ "get", "head", "post", "put", "patch", "delete", "options" ] } }, { "name": "headers", "spec": [ { "name": "name", "type": "text", "label": "Name", "required": true }, { "name": "value", "type": "text", "label": "Value" } ], "type": "array", "label": "Headers" }, { "name": "qs", "spec": [ { "name": "name", "type": "text", "label": "Name", "required": true }, { "name": "value", "type": "text", "label": "Value" } ], "type": "array", "label": "Query String" }, { "name": "bodyType", "type": "select", "label": "Body type", "validate": { "enum": [ "raw", "x_www_form_urlencoded", "multipart_form_data" ] } }, { "name": "parseResponse", "type": "boolean", "label": "Parse response", "required": true }, { "name": "authUser", "type": "text", "label": "User name" }, { "name": "authPass", "type": "password", "label": "Password" }, { "name": "timeout", "type": "uinteger", "label": "Timeout", "validate": { "max": 300, "min": 1 } }, { "name": "shareCookies", "type": "boolean", "label": "Share cookies with other HTTP modules", "required": true }, { "name": "ca", "type": "cert", "label": "Self-signed certificate" }, { "name": "rejectUnauthorized", "type": "boolean", "label": "Reject connections that are using unverified (self-signed) certificates", "required": true }, { "name": "followRedirect", "type": "boolean", "label": "Follow redirect", "required": true }, { "name": "useQuerystring", "type": "boolean", "label": "Disable serialization of multiple same query string keys as arrays", "required": true }, { "name": "gzip", "type": "boolean", "label": "Request compressed content", "required": true }, { "name": "useMtls", "type": "boolean", "label": "Use Mutual TLS", "required": true }, { "name": "contentType", "type": "select", "label": "Content type", "validate": { "enum": [ "text/plain", "application/json", "application/xml", "text/xml", "text/html", "custom" ] } }, { "name": "data", "type": "buffer", "label": "Request content" }, { "name": "followAllRedirects", "type": "boolean", "label": "Follow all redirect", "required": true } ] } } ], "metadata": { "instant": true, "version": 1, "scenario": { "roundtrips": 1, "maxErrors": 3, "autoCommit": true, "autoCommitTriggerLast": true, "sequential": false, "slots": null, "confidential": false, "dataloss": false, "dlq": false, "freshVariables": false }, "designer": { "orphans": [] }, "zone": "eu2.make.com" } }
4. Airtable Configuration
Airtable setup steps:- Create an Airtable account at airtable.com
- From the dashboard, click "Create" to start a new base
- Choose "Start from scratch" and rename the base (e.g., "Meeting Baas")
- Save the two provided CSV files below. We'll automatically create "Data" and "Form Responses" tables with them. Rename the two views accordingly (e.g., "Data" and "Invite Meeting Bot Form").
- Configure the "Data" table:
- "Name", "Description": Single Line Text
- "Summary": Long Text (enable rich text formatting)
- "MeetingDate": Date
- "Attendees": Long Text
- Configure the "Form Responses" table:
- "Meeting Bot Name", "Meeting URL", "Meeting Bot Entry Message": Single Line Text
- "id": Auto Number
- "Meeting Bot Image": Attachment
- "Created Time": Created Time
- "Created By": Created By
- Set default values:
- Meeting Bot Name: Make Meeting Bot
- Meeting Bot Entry Message: Hello - recording this meeting
- Create a new form:
- Open the "Interfaces" tab and click "Start Building"
- Select "Build a form" and choose the "Form Responses" table. Here, you probably want to hide the API key field with people you share the link too. A simple way to do that is to show it conditionally, for example based on the value of the "Meeting Bot Name" field.
- Rename the form (e.g., "Meeting Bot") and click "Publish Form"
- Select "Anyone on the web" for access and copy the link
View on GitHubName,Description,Summary,MeetingDate,Attendees Meeting Summary - gen-[id],A description of a meeting,"Meeting Summary [...Generated by AI]",27/4/2024,Person1
5. Make-Airtable Integration
Connecting Make and Airtable:- In the Make dashboard, select the imported Airtable workflow
- Click the Airtable (Watch Responses) node and create a new webhook
- Name the webhook (e.g., "Airtable webhook") and copy the address
- In Airtable, open your base newly created form.
- Select "Redirect to URL" from the settings panel on the right. This is a paid feature.
- Enter the webhook URL with `?record_id={record_id}` appended and save
- In the Airtable (Get A Record) node, add a connection (OAuth, token, or key)
- Name the connection (e.g., "Airtable OAuth connection") and choose the base and table
6. Webhook Setup
Webhook configuration:- In the Make dashboard, create a new scenario
- Click the three dots and select 'Import Blueprint'
- Upload the Webhook Scenario file and save
- Rename the scenario (e.g., "Integration Webhook")
- Click the webhooks node and create a new webhook
- Name the webhook (e.g., "Meeting Baas webhook") and copy the address
- In the Meeting Baas dashboard, navigate to the Webhook tab
- Paste the Make webhook URL
View on GitHub{ "name": "Integration Webhooks", "flow": [ { "id": 1, "module": "gateway:CustomWebHook", "version": 1, "parameters": { "hook": 508182, "maxResults": 1 }, "mapper": {}, "metadata": { "designer": { "x": 0, "y": 0 }, "restore": { "parameters": { "hook": { "data": { "editable": "true" }, "label": "AI Meeting Bot Webhook" } } }, "parameters": [ { "name": "hook", "type": "hook:gateway-webhook", "label": "Webhook", "required": true }, { "name": "maxResults", "type": "number", "label": "Maximum number of results" } ], "interface": [ { "name": "event", "type": "text" }, { "name": "data", "spec": [ { "name": "bot_id", "type": "number" }, { "name": "transcript", "spec": { "spec": [ { "name": "speaker", "type": "text" }, { "name": "words", "spec": { "spec": [ { "name": "start", "type": "number" }, { "name": "end", "type": "number" }, { "name": "word", "type": "text" } ], "type": "collection" }, "type": "array" } ], "type": "collection" }, "type": "array" }, { "name": "speakers", "spec": { "type": "text" }, "type": "array" }, { "name": "mp4", "type": "text" } ], "type": "collection" } ] } }, { "id": 52, "module": "util:Switcher", "version": 1, "parameters": {}, "filter": { "name": "event", "conditions": [ [ { "a": "{{1.event}}", "b": "complete", "o": "text:equal" } ] ] }, "mapper": { "input": "{{1.event}}", "useRegExpMatch": false, "casesTable": [ { "pattern": "complete", "output": "continue" } ], "elseOutput": "stop" }, "metadata": { "designer": { "x": 300, "y": 0 }, "restore": { "expect": { "casesTable": { "mode": "chose", "items": [ null ] } } }, "expect": [ { "name": "input", "type": "text", "label": "Input" }, { "name": "useRegExpMatch", "type": "boolean", "label": "Use regular expressions to match", "required": true }, { "name": "casesTable", "type": "array", "label": "Cases", "required": true, "spec": [ { "name": "pattern", "label": "Pattern", "type": "text" }, { "name": "output", "label": "Output", "type": "any" } ] }, { "name": "elseOutput", "type": "any", "label": "Else" } ] } }, { "id": 44, "module": "util:SetVariable2", "version": 1, "parameters": {}, "mapper": { "name": "speakers", "scope": "execution", "value": "{{1.data.speakers}}" }, "metadata": { "designer": { "x": 600, "y": 0 }, "restore": { "expect": { "scope": { "label": "One execution" } } }, "expect": [ { "name": "name", "type": "text", "label": "Variable name", "required": true }, { "name": "scope", "type": "select", "label": "Variable lifetime", "required": true, "validate": { "enum": [ "roundtrip", "execution" ] } }, { "name": "value", "type": "any", "label": "Variable value" } ], "interface": [ { "name": "speakers", "type": "any", "label": "speakers" } ] } }, { "id": 14, "module": "builtin:BasicFeeder", "version": 1, "parameters": {}, "mapper": { "array": "{{1.data.transcript}}" }, "metadata": { "designer": { "x": 900, "y": 0 }, "restore": { "expect": { "array": { "mode": "edit" } } }, "expect": [ { "mode": "edit", "name": "array", "spec": [], "type": "array", "label": "Array" } ] } }, { "id": 23, "module": "builtin:BasicFeeder", "version": 1, "parameters": {}, "mapper": { "array": "{{14.words}}" }, "metadata": { "designer": { "x": 1200, "y": 0 }, "restore": { "expect": { "array": { "mode": "edit" } } }, "expect": [ { "mode": "edit", "name": "array", "spec": [], "type": "array", "label": "Array" } ] } }, { "id": 22, "module": "util:TextAggregator", "version": 1, "parameters": { "feeder": 23, "rowSeparator": "other", "otherRowSeparator": " " }, "mapper": { "value": "{{23.word}}" }, "metadata": { "designer": { "x": 1500, "y": 0 }, "restore": { "extra": { "feeder": { "label": "Iterator [23]" } }, "parameters": { "rowSeparator": { "label": "Other" } } }, "parameters": [ { "name": "rowSeparator", "type": "select", "label": "Row separator", "validate": { "enum": [ "\n", "\t", "other" ] } }, { "name": "otherRowSeparator", "type": "text", "label": "Separator" } ], "expect": [ { "name": "value", "type": "text", "label": "Text" } ] } }, { "id": 32, "module": "util:TextAggregator", "version": 1, "parameters": { "feeder": 22, "rowSeparator": "" }, "mapper": { "value": "{{14.speaker}}:\\n{{22.text}}" }, "metadata": { "designer": { "x": 1800, "y": 0 }, "restore": { "extra": { "feeder": { "label": "Tools - Text aggregator [22]" } }, "parameters": { "rowSeparator": { "label": "Empty" } } }, "parameters": [ { "name": "rowSeparator", "type": "select", "label": "Row separator", "validate": { "enum": [ "\n", "\t", "other" ] } } ], "expect": [ { "name": "value", "type": "text", "label": "Text" } ] } }, { "id": 26, "module": "builtin:BasicAggregator", "version": 1, "parameters": { "feeder": 52 }, "mapper": { "text": "{{32.text}}" }, "metadata": { "designer": { "x": 2100, "y": 0 }, "restore": { "extra": { "feeder": { "label": "Tools - Switch [52]" }, "target": { "label": "Custom" } } } } }, { "id": 42, "module": "json:TransformToJSON", "version": 1, "parameters": { "space": "" }, "mapper": { "object": "{{26.array}}" }, "metadata": { "designer": { "x": 2400, "y": 0 }, "restore": { "parameters": { "space": { "label": "Empty" } } }, "parameters": [ { "name": "space", "type": "select", "label": "Indentation", "validate": { "enum": [ "tab", "2", "4" ] } } ], "expect": [ { "name": "object", "type": "any", "label": "Object" } ] } }, { "id": 2, "module": "http:ActionSendDataAPIKeyAuth", "version": 3, "parameters": { "auth": 14964, "handleErrors": false }, "mapper": { "ca": "", "qs": [], "url": "https://openrouter.ai/api/v1/chat/completions", "data": "{\n \"model\": \"openrouter/cinematika-7b:free\", \n \"messages\": [\n {\"role\": \"user\", \"content\": \"Given a detailed transcript of a meeting, generate a concise summary that captures the key points, decisions made, and action items, formatted in Markdown for better readability and organization. Do NOT include any other information other than the summary in markdown.\"},\n {\"role\": \"user\", \"content\": \"{{replace(42.json; \"\"\"\"; \"'\")}}\"} \n ]\n}", "gzip": true, "method": "post", "headers": [], "timeout": "", "useMtls": false, "bodyType": "raw", "contentType": "application/json", "serializeUrl": false, "shareCookies": false, "parseResponse": true, "followRedirect": true, "useQuerystring": false, "followAllRedirects": false, "rejectUnauthorized": true }, "metadata": { "designer": { "x": 2700, "y": 0 }, "restore": { "expect": { "qs": { "mode": "chose" }, "method": { "mode": "chose", "label": "POST" }, "headers": { "mode": "chose" }, "bodyType": { "label": "Raw" }, "contentType": { "label": "JSON (application/json)" } }, "parameters": { "auth": { "label": "OpenRouter API Key" } } }, "parameters": [ { "name": "auth", "type": "keychain:apikeyauth", "label": "Credentials", "required": true }, { "name": "handleErrors", "type": "boolean", "label": "Evaluate all states as errors (except for 2xx and 3xx )", "required": true } ], "expect": [ { "name": "url", "type": "url", "label": "URL", "required": true }, { "help": "Serializes URL and escapes special characters.", "name": "serializeUrl", "type": "boolean", "label": "Serialize URL", "default": false, "advanced": true, "required": true }, { "name": "method", "type": "select", "label": "Method", "default": "get", "options": [ { "label": "GET", "value": "get" }, { "label": "HEAD", "value": "head" }, { "label": "POST", "value": "post" }, { "label": "PUT", "value": "put" }, { "label": "PATCH", "value": "patch" }, { "label": "DELETE", "value": "delete" }, { "label": "OPTIONS", "value": "options" } ], "editable": true, "required": true }, { "name": "headers", "spec": [ { "name": "name", "type": "text", "label": "Name", "required": true }, { "name": "value", "type": "text", "label": "Value" } ], "type": "array", "label": "Headers", "labels": { "add": "Add a header", "edit": "Edit a header" }, "editable": true, "required": false }, { "name": "qs", "spec": [ { "name": "name", "type": "text", "label": "Name", "required": true }, { "name": "value", "type": "text", "label": "Value" } ], "type": "array", "label": "Query String", "labels": { "add": "Add parameter", "edit": "Edit parameter" }, "editable": true, "required": false }, { "name": "bodyType", "type": "select", "label": "Body type", "options": [ { "label": "Raw", "value": "raw", "nested": [ { "help": "Sets the `Content-Type` request header.", "name": "contentType", "type": "select", "label": "Content type", "options": [ { "label": "Text (text/plain)", "value": "text/plain" }, { "label": "JSON (application/json)", "value": "application/json" }, { "label": "XML (application/xml)", "value": "application/xml" }, { "label": "XML (text/xml)", "value": "text/xml" }, { "label": "HTML (text/html)", "value": "text/html" }, { "label": "Custom", "value": "custom", "nested": [ { "name": "customContentType", "type": "text", "label": "Value", "required": true } ] } ] }, { "name": "data", "type": "buffer", "label": "Request content" } ] }, { "label": "Application/x-www-form-urlencoded", "value": "x_www_form_urlencoded", "nested": [ { "name": "formFields", "spec": [ { "name": "key", "type": "text", "label": "Key", "required": true }, { "name": "value", "type": "text", "label": "Value" } ], "type": "array", "label": "Fields", "editable": true } ] }, { "label": "Multipart/form-data", "value": "multipart_form_data", "nested": [ { "name": "formDataFields", "spec": [ { "name": "fieldType", "type": "select", "label": "Field type", "options": [ { "label": "Text", "value": "text", "nested": [ { "name": "key", "type": "text", "label": "Key", "required": true }, { "name": "value", "type": "text", "label": "Value" } ] }, { "label": "File", "value": "file", "nested": [ { "name": "key", "type": "text", "label": "Key", "required": true }, { "name": "data", "type": "buffer", "label": "Data", "semantic": "file:data" }, { "help": "File name, including the suffix, e.g. invoice, xml", "name": "fileName", "type": "filename", "label": "File name", "semantic": "file:name" } ] } ], "required": true } ], "type": "array", "label": "Fields", "editable": true } ] } ] }, { "help": "Automatically parses responses and converts JSON and XML responses so you don't need to use JSON or XML parser. Before you can use parsed JSON or XML content, run the module once manually so that the module can recognize the response content and allows you to map it in subsequent modules.", "name": "parseResponse", "type": "boolean", "label": "Parse response", "required": true }, { "help": "In seconds. Default: 300 seconds. This value controls two timeouts: Read timeout and Connection timeout. Read timeout is a time to wait for a server to send response headers (and start the response body) before aborting the request. Connection timeout sets the socket to timeout after timeout milliseconds of inactivity.", "name": "timeout", "type": "uinteger", "label": "Timeout", "advanced": true, "validate": { "max": 300, "min": 1 } }, { "name": "shareCookies", "type": "boolean", "label": "Share cookies with other HTTP modules", "default": false, "advanced": true, "required": true }, { "help": "Upload your certificate if you want to use TLS using your self-signed certificate.", "name": "ca", "type": "cert", "label": "Self-signed certificate", "advanced": true }, { "name": "rejectUnauthorized", "type": "boolean", "label": "Reject connections that are using unverified (self-signed) certificates", "default": true, "advanced": true, "required": true }, { "name": "followRedirect", "type": "boolean", "label": "Follow redirect", "nested": [ { "help": "Follows also non-GET HTTP 3xx responses as redirects.", "name": "followAllRedirects", "type": "boolean", "label": "Follow all redirect", "advanced": true, "required": true } ], "default": true, "advanced": true, "required": true }, { "help": "By default, Make handles multiple values for the same url query string parameter key as arrays (e.g. `www.test.com?foo=bar&foo=baz`will be converted to `www.test.com?foo[0]=bar&foo[1]=baz`). To disable this feature, activate this option.", "name": "useQuerystring", "type": "boolean", "label": "Disable serialization of multiple same query string keys as arrays", "default": false, "advanced": true, "required": true }, { "help": "Adds an `Accept-Encoding` header to request compressed content.", "name": "gzip", "type": "boolean", "label": "Request compressed content", "default": true, "advanced": true, "required": true }, { "name": "useMtls", "type": "boolean", "label": "Use Mutual TLS", "default": false, "advanced": true, "required": true }, { "name": "contentType", "type": "select", "label": "Content type", "validate": { "enum": [ "text/plain", "application/json", "application/xml", "text/xml", "text/html", "custom" ] } }, { "name": "data", "type": "buffer", "label": "Request content" }, { "name": "followAllRedirects", "type": "boolean", "label": "Follow all redirect", "required": true } ] } }, { "id": 45, "module": "util:GetVariable2", "version": 1, "parameters": {}, "mapper": { "name": "speakers" }, "metadata": { "designer": { "x": 3000, "y": 0 }, "restore": {}, "expect": [ { "name": "name", "type": "text", "label": "Variable name", "required": true } ], "interface": [ { "name": "speakers", "type": "any", "label": "speakers" } ] } }, { "id": 3, "module": "airtable:ActionCreateRecord", "version": 3, "parameters": { "__IMTCONN__": 1505942 }, "mapper": { "base": "appMipeYj3rKOJv4z", "table": "tblEq5gEDiiCmbZgp", "record": { "fld6rWq5V5kSfBiPY": "Meeting Summary - {{2.data.id}}", "fldHABoZOee5ZUUTr": "{{2.data.choices[].message.content}}", "fldQwXy2VOsJMSvd8": "A description of a meeting", "fldVjJGWNrl52pVbH": "{{join(45.speakers; \", \")}}", "fldl0qW8PLVkJSArn": "{{now}}" }, "typecast": false, "useColumnId": false }, "metadata": { "designer": { "x": 3300, "y": 0 }, "restore": { "expect": { "base": { "label": "Spoke AI Meeting Bot" }, "table": { "label": "Data", "nested": [ { "name": "record", "spec": [ { "name": "fld6rWq5V5kSfBiPY", "type": "text", "label": "Name" }, { "name": "fldQwXy2VOsJMSvd8", "type": "text", "label": "Description" }, { "name": "fldHABoZOee5ZUUTr", "type": "text", "label": "Summary" }, { "name": "fldl0qW8PLVkJSArn", "time": false, "type": "date", "label": "MeetingDate" }, { "name": "fldVjJGWNrl52pVbH", "type": "text", "label": "Attendees" } ], "type": "collection", "label": "Record" } ] }, "typecast": { "mode": "chose" }, "useColumnId": { "mode": "chose" } }, "parameters": { "__IMTCONN__": { "data": { "scoped": "true", "connection": "airtable3" }, "label": "Airtable OAuth connection (User ID: usrCQEOCGSxy9AxCW)" } } }, "parameters": [ { "name": "__IMTCONN__", "type": "account:airtable3,airtable2", "label": "Connection", "required": true } ], "expect": [ { "name": "base", "type": "select", "label": "Base", "required": true }, { "name": "typecast", "type": "boolean", "label": "Smart links", "required": true }, { "name": "useColumnId", "type": "boolean", "label": "Use Column ID", "required": true }, { "name": "table", "type": "select", "label": "Table", "required": true }, { "name": "record", "spec": [ { "name": "fld6rWq5V5kSfBiPY", "type": "text", "label": "Name" }, { "name": "fldQwXy2VOsJMSvd8", "type": "text", "label": "Description" }, { "name": "fldHABoZOee5ZUUTr", "type": "text", "label": "Summary" }, { "name": "fldl0qW8PLVkJSArn", "time": false, "type": "date", "label": "MeetingDate" }, { "name": "fldVjJGWNrl52pVbH", "type": "text", "label": "Attendees" } ], "type": "collection", "label": "Record" } ], "interface": [ { "name": "id", "type": "text", "label": "ID" }, { "name": "createdTime", "type": "date", "label": "Created Time" }, { "name": "Name", "type": "text", "label": "Name" }, { "name": "Description", "type": "text", "label": "Description" }, { "name": "Summary", "type": "text", "label": "Summary" }, { "name": "MeetingDate", "time": false, "type": "date", "label": "MeetingDate" }, { "name": "Attendees", "type": "text", "label": "Attendees" } ] } } ], "metadata": { "instant": true, "version": 1, "scenario": { "roundtrips": 1, "maxErrors": 3, "autoCommit": true, "autoCommitTriggerLast": true, "sequential": false, "slots": null, "confidential": false, "dataloss": false, "dlq": false, "freshVariables": false }, "designer": { "orphans": [] }, "zone": "eu2.make.com" } }
7. OpenAI Configuration
Setting up OpenAI integration:- Locate and click the OpenRouter node in the workflow
- Change the endpoint URL to `https://api.openai.com/v1/chat/completions`
- In the JSON payload, update the `model` field (e.g., `gpt-3.5-turbo` or `gpt-4`)
- Click the add button below Credentials
- Set `Api Key Parameter Name` to "Authorization"
- Type "Bearer" in the key field and paste your OpenAI API key
- Click "Create"
8. Set Up Airtable Token
- Click the Airtable node in the workflow
- Choose the connection used for the Airtable workflow (e.g., "Airtable OAuth connection")
- Click OK
9. Save and Test
- Save the workflow
- Open the form, input the meeting URL and Meeting Baas API key, and test the setup
Conclusion
Your Make workflow should now be connected to Meeting Baas and configured to use the OpenAI API. If you encounter issues, refer back to the steps or seek help on the Meeting Baas dashboard.
Resources
Open-Source
Product
PlansFeature ListMeeting Transcription APIMeeting AgentsAI Meeting Assistant APIAPI to Record and Transcribe Video MeetingsMeeting bots with transcriptionAlternatives to Recall AIRecall AI vs Meeting BaaSMeeting bot API for ZoomMeeting bot API for Microsoft TeamsMeeting bot API for Google MeetAlternative Recording API for Google Meet