AI Automation
923 results — all source-linked n8n references
Generate digital product launch content with OpenAI GPT-4o-mini and Google Sheets
Quick overview This workflow generates a multi-channel digital product launch content pack from product details, using OpenAI to create a blog intro, LinkedIn post, X post, Instagram caption, and launch email, and can optionally append the results to Google Sheets. How it works Runs manually when you execute the workflow. Loads sample product details such as name, tagline, price, URL, target audience, and brand tone. Sends the product details to OpenAI (GPT-4o-mini) with instructions to return a JSON content pack for blog, LinkedIn, X, Instagram, and email. Normalizes and validates the returned JSON, ensuring all five content fields are present and formatted as plain text. Optionally appends the generated content fields as a new row in Google Sheets (when the Google Sheets step is enabled). Setup Add an OpenAI API credential and select it in the OpenAI Chat Model configuration. Replace the sample product fields (especially productURL and brandTone) with your own product data or connect a real data source. (Optional) Enable the Google Sheets step, add Google Sheets OAuth2 credentials, and set the target spreadsheet ID and sheet name. Requirements n8n instance (cloud or self-hosted)
Monitor AI search visibility with Talordata SERP, OpenAI, and Google Sheets
Quick overview This workflow runs on demand to crawl Google SERP pages via Talordata, aggregates organic results and related searches, uses OpenAI to produce a structured AI Search Visibility report with GEO recommendations and a score, and appends or updates the results in Google Sheets. How it works Starts when you manually execute the workflow and sets the target query, search engine (Google), and initial page. Calls the Talordata MCP Search API to fetch the first SERP page, then extracts pagination metadata and builds a list of pages to crawl. Loops through each SERP page and requests additional results from Talordata using the corresponding page/start value. Normalizes each page into structured datasets for organic results and related searches, and aggregates all page data into a single consolidated SERP payload. Sends the consolidated SERP dataset to OpenAI to generate a structured AI Search Visibility report (metrics, domain categorization, opportunities, recommendations, executive summary, and score). Parses the model output into JSON and appends or updates a matching row in Google Sheets keyed by the SERP link. Setup Add a Talordata Bearer Auth credential and confirm acces
Scrape Tunisia IT job listings with Groq, Firecrawl, Airtable, and Resend
Quick overview This workflow runs daily or via chat to scrape Tunisia-focused IT job listings from predefined company career pages using Firecrawl, saves results into Airtable tables, and emails a daily digest through Resend, with job parsing and orchestration handled by a Groq-powered AI agent. How it works Triggers either on a daily 7AM schedule or when an n8n Chat message is received. On scheduled runs, rotates through a fixed list of companies, builds a prompt for the chosen company (including pagination rules), and sets the Airtable table name. Uses a Groq (Llama 3.3 70B) AI agent to decide which allowed career-page URLs to scrape and how to extract job listings into structured fields. Scrapes the requested career pages via the Firecrawl API and parses the returned main content into jobs with title, company, location, description, and URL. When saving is requested, uses Airtable’s API to check for the target table, create it if missing, and insert the job records. For scheduled runs, emails the AI-generated job digest to the configured recipient using the Resend API; otherwise it outputs the response for the chat session. Setup Add credentials and values for Firecrawl (API key
Create Google Tasks from Tactiq meeting transcripts using OpenAI and Telegram
Quick overview This workflow monitors a Google Drive folder for new Tactiq transcript files, uses OpenAI to extract explicit action items, creates matching Google Tasks, sends a Telegram notification, and logs each processed transcript in an n8n Data Table to prevent duplicate processing. How it works Triggers when a new file is created in a specified Google Drive folder (or on an optional 12-hour schedule). Loads previously processed transcript filenames from an n8n Data Table and lists files in the target Google Drive folder. Filters out files that have already been processed, then downloads each new transcript and converts it to plain text. Sends the transcript text to OpenAI to return strict JSON containing only explicit action items with an owner, optional due date, and an evidence quote. Creates a Google Task for each extracted action item, including source transcript details in the task notes, and sends a Telegram error message if task creation fails. Records the transcript as processed in the n8n Data Table (including zero-task transcripts) and sends a Telegram success message. Setup Add credentials for Google Drive, Google Tasks, OpenAI, and Telegram. Create or choose an n
Run a multi-agent research and publishing pipeline with GPT-4o, Tavily and Notion
Quick overview Three specialized AI agents: Researcher, Writer, and Reviewer, collaborate autonomously to research a topic, draft content, and quality-check it through a self-correcting review loop with a circuit breaker. Approved content is published directly to Notion with full audit metadata. How it works A form submission captures the research topic, content format (blog post, exec summary, or LinkedIn post), target audience, and maximum revision cycles allowed before the circuit breaker fires. The Researcher Agent uses GPT-4o and Tavily Search to gather authoritative sources, extract key facts and contradictions, and produce a validated research brief. Search depth and result count are automatically scaled to the requested format. The Writer Agent receives the research brief and produces a structured draft in the correct format. On revision cycles it also receives the Reviewer's specific rejection notes and must address them directly. A Circuit Breaker sits between the Writer and Reviewer. If the number of Reviewer rejections reaches the user-defined maximum, the draft is force-approved and the pipeline proceeds to publishing without another LLM call. The Reviewer Agent evalua
Route rental payment and receipt messages with Telegram and OpenAI GPT-4.1
Quick overview This demo workflow listens for Telegram rental messages, routes receipt-related commands, uses OpenAI to classify payments, costs, and booking summaries, then replies with parsed details and a sample receipt flow. How it works Triggers when a new Telegram message is received. Routes the message into one of four paths: full /receipt command, receipt request, receipt date reply, or general rental tracking. If a full /receipt command is provided, it parses client, property, stay dates, amount, and transaction details and replies in Telegram with the extracted fields. If the user sends a receipt request, it looks up the last saved payment for that Telegram chat and either prompts the user for stay dates or returns an error if no payment is stored. If the user replies with stay dates during a pending receipt flow, it combines those dates with the stored payment to build receipt details and replies with either a “ready to generate” summary or an error message. For all other messages, it sends the text to OpenAI to classify it as payment, cost, or booking summary, normalizes the JSON result, and replies in Telegram with the parsed output. When a payment is detected, it extr
Review workflow JSON for risks and best practices with Groq (Llama 3.3)
Quick overview This workflow exposes a webhook that accepts an exported n8n workflow JSON, runs static validation and risk checks, then uses Groq (Llama 3.3 70B) via an AI agent to return a structured JSON review with metrics, risks, and best-practice recommendations. How it works Receives a POST request via a webhook containing a workflow object with exported n8n workflow JSON. Validates the payload structure and analyzes the workflow to generate metrics and findings such as orphan nodes, dead ends, missing error handling, placeholder credentials, deprecated nodes, and documentation gaps. Routes valid analyses to a Groq-powered AI agent that explains each finding (why it matters, risk, business impact, and best-practice fix) and formats the response as structured JSON. Routes invalid or malformed inputs to a formatter that returns a consistent { success: false, error } JSON response. Responds to the original webhook request with the final JSON analysis. Setup Add a Groq API credential in the Groq Chat Model node. You can generate a free API key at console.groq.com if you don't have one yet. Activate the workflow and copy the webhook URL from the Webhook trigger. This is the endpoi
Generate workflow audit docs from JSON with Claude Sonnet and Notion
Quick overview This workflow collects an exported n8n workflow JSON via an n8n Form, audits it for common reliability and security issues, uses Anthropic Claude to draft a business summary and technical report, and then creates a formatted documentation page in Notion. How it works Receives a form submission with a workflow JSON file, client name, and a Notion parent page ID. Parses and validates the uploaded JSON to confirm it contains nodes and connections and extracts the workflow metadata. Analyzes the workflow graph to determine execution order, detect cycles and unreachable nodes, and generate a scored list of audit findings. Sends the audit context to Anthropic Claude (Sonnet) to generate a business-facing workflow summary and a developer-facing audit report. Converts the generated text into Notion blocks, including an audit score callout and optional warnings for cycles or unreachable nodes. Creates a new Notion page under the provided parent page and appends the blocks in batches with a short wait to avoid Notion rate limits. Setup Import the workflow and connect your Anthropic account credential to the Claude Sonnet node. No additional configuration is needed on the Anthr
Create SEO blog posts from YouTube videos with Gemini and Google Docs
Quick overview Submit a YouTube URL and get a publish-ready SEO blog post. Three Gemini agents research the video, write the article, and score it. Articles scoring 7+ auto-publish to Google Docs. Lower scores route to Telegram for review. How it works The workflow starts when a POST request hits the webhook with a YouTube URL, optional target keyword, and tone. A Code node extracts the video ID and validates the URL format, then an HTTP Request node calls YouTube Data API v3 to pull the video title, description, channel name, and tags. Three Basic LLM Chain nodes run in sequence, each powered by a Google Gemini Flash sub-node connected via the native ai_languageModel port. The first chain (Research Agent) receives the video context and returns a structured JSON brief containing an SEO title, four H2 headings, primary keyword, secondary keywords, key insights, target audience, and a content angle. A Code node parses this output with a JSON fallback in case Gemini adds unexpected formatting. The second chain (Writer Agent) takes the research brief and writes a complete 1,000–1,400 word blog post following strict rules: flowing paragraphs over bullet lists, primary keyword used 3–5 t
Classify workflow errors with Claude and deduplicate Jira and Slack alerts
Quick overview This global error-handling workflow classifies n8n execution failures with Anthropic Claude, deduplicates incidents in Jira using a hash label, and posts a detailed alert to Slack with links to the affected execution and Jira issue. How it works Triggers whenever any n8n workflow execution or trigger fails (when set as the instance Error Workflow). Normalizes the error event into a consistent payload that includes workflow details, error message, truncated stack trace, and an execution log URL. Sends the normalized payload to Anthropic Claude to return a structured JSON classification (category, severity, root cause, recommended action, and transient flag). Parses the classification, falls back to an UNKNOWN classification if the LLM response is invalid, and generates a deduplication hash used to group similar errors. Searches Jira for an open issue in the configured project that already has the matching deduplication label. If an open issue exists, appends a recurrence comment with the latest execution details; otherwise, creates a new Jira Bug with labels, priority, and a full incident description. Builds a Slack Block Kit message summarizing the incident and sends
Handle clinic appointments via MCP tools for Vapi and Retell voice agents
Quick overview This workflow exposes appointment management tools through an n8n MCP Server webhook so an external AI voice agent (for example, Vapi or Retell) can check availability, book appointments, suggest alternate slots, and cancel or reschedule existing bookings. How it works Receives an MCP tool request via the MCP Server Trigger webhook endpoint. When asked to verify a requested date and time, calls the “Check Slot Availability” sub-workflow to confirm whether the appointment slot is open. If the slot is available and caller details are confirmed, calls the “Book Appointment” sub-workflow to create the appointment. If the slot is unavailable, calls the “GET Alternate Slot” sub-workflow to return alternative available appointment times. For changes to existing bookings, calls either the “Cancel Appointment” or “Reschedule Appointment” sub-workflow using the caller’s phone number and appointment details. Setup Configure your external AI voice agent (for example, Vapi or Retell) to connect to this workflow’s MCP webhook URL and send tool requests to it. Publish and configure the referenced sub-workflows (“Check Slot Availability”, “Book Appointment”, “GET Alternate Slot”, “C
Index and query financial documents with Qdrant and Mistral
Quick Overview This workflow ingests local financial documents into a Qdrant vector database using Mistral Cloud embeddings, keeping the index in sync when files are added, changed, or deleted. How it works Runs when you manually start the workflow (for testing) and sets the working folder path and Qdrant collection name. Routes the run based on whether a file was added, changed, or deleted. For changed or deleted files, searches Qdrant for existing vectors matching the file path and deletes the corresponding points. For added files (and changed files after cleanup), reads the file from disk and prepares a text payload that includes file metadata and contents. Splits the text into chunks, generates embeddings with Mistral Cloud, and inserts the vectors into the specified Qdrant collection. Setup Create a Qdrant API credential in n8n and ensure your Qdrant instance is reachable at the host/port used in the HTTP requests (for example, http://qdrant:6333). Add a Mistral Cloud API key credential for the Mistral embeddings node. Update the folder path in the variables (for example, /home/node/BankStatements) and make sure n8n has filesystem access to that directory. Create (or update) t
Scrape Hacker News hiring threads with OpenAI GPT-4o-mini and Airtable
Quick overview This workflow manually runs a scraper that finds the latest Hacker News “Ask HN: Who is hiring?” thread via the Algolia HN Search API, pulls each job comment from the Hacker News Firebase API, uses OpenAI to structure postings into fields, and saves the results to Airtable. How it works Starts when you manually execute the workflow. Queries the Algolia Hacker News Search API for recent “Ask HN: Who is hiring?” stories and keeps only the relevant thread metadata. Filters the results to the most recent thread (created within the last 30 days) and fetches the full thread from the Hacker News Firebase API. Iterates through the thread’s comment IDs, fetching each individual job comment from the Hacker News Firebase API. Extracts and cleans the job text to remove HTML/entities and normalize links and whitespace. Sends the cleaned text to OpenAI (GPT-4o-mini) to extract a structured JSON record (company, title, location, type, salary, description, and URLs). Creates a new record in Airtable for each structured job posting. Setup Add an Airtable credential and set the target base and table in the Airtable create step. Add an OpenAI credential for the GPT-4o-mini chat model.
Enrich company records with social media URLs using Supabase and GPT-4o
Quick overview This workflow pulls companies from Supabase, uses an OpenAI (GPT-4o) agent to crawl each company website and collect social media profile URLs via HTTP requests and HTML parsing, and then writes the enriched company record (name, website, and social links) back to Supabase. How it works Runs manually and loads all company records from a Supabase companies_input table. Keeps only each company’s name and website fields and sends the website to an OpenAI (GPT-4o) agent. The agent fetches page text (HTML converted to Markdown) and extracts links from pages (anchor hrefs), following additional URLs as needed to find social profiles. The agent returns a structured JSON object of social media platforms and their profile URLs. The workflow combines the extracted social links with the original company name and website. Inserts the enriched record into the Supabase companies_output table. Setup Add a Supabase credential and set the correct workspace/project so the workflow can read from companies_input and write to companies_output. Add an OpenAI API key in the OpenAI Chat Model node (configured for GPT-4o). Ensure your input table contains name and website fields (or update t
Detect visual regressions with Apify, Google Gemini, Sheets and Linear
Quick overview This workflow generates baseline website screenshots with Apify, stores them in Google Drive, and logs the file IDs in Google Sheets, then runs scheduled visual regression checks by comparing new screenshots against the baselines with Google Gemini Vision and creating a consolidated Linear issue when changes are detected. How it works Manually starts to backfill missing baselines by reading URLs from Google Sheets that do not yet have a stored base image. For each missing baseline URL, calls Apify’s screenshot actor, downloads the rendered image, uploads it to Google Drive, and updates the matching Google Sheets row with the Drive file ID. Runs weekly on a schedule and reads the list of webpages to test from Google Sheets. For each webpage, downloads the baseline image from Google Drive and captures a fresh screenshot via Apify. Sends both images to Google Gemini (vision) to detect visual differences and returns a structured list of regressions (text, number, image, color, or position). Filters out pages with no detected changes, aggregates the remaining results, and creates a Linear issue containing the regression report. Setup Add an Apify API token as HTTP Query A
Sync Google Drive documents to Pinecone RAG with Google Gemini embeddings
Quick overview This workflow runs on a schedule to sync files from a Google Drive folder into a Pinecone vector index for RAG, extracting text from PDFs, XLSX, Google Docs, and spreadsheets, generating embeddings with Google Gemini, and tracking file state in a Google Sheets log to handle updates and deletions. How it works Runs on a schedule and fetches the current file list from a target Google Drive folder and the existing file log from Google Sheets. Compares Google Drive files with the Google Sheets log to detect new/updated files to ingest and files that were deleted from Drive. For new or updated files, deletes any existing vectors in Pinecone for the file ID, downloads the file from Google Drive, and routes it by MIME type. Extracts text from PDFs, XLSX/Google Sheets, and plain text/Google Docs files and maps the extracted content with file metadata (file ID, name, modified time, and MIME type). Chunks the document text, generates embeddings with Google Gemini, and inserts the resulting vectors and metadata into a Pinecone index. Appends or updates the Google Sheets log with the latest file metadata, and for deleted Drive files it deletes matching vectors in Pinecone and re
Send portfolio risk reports from Google Sheets with OpenAI and Gmail
Quick overview This workflow collects a portfolio request via an n8n Form, loads holdings from Google Sheets, calculates portfolio risk and concentration metrics, generates an HTML risk narrative with OpenAI, then emails the full report via Gmail and appends an audit record back to Google Sheets. How it works Receives a portfolio analysis request from an n8n Form containing the investor details, base currency, and a Google Sheet ID. Reads all holdings from the provided Google Sheets document (Portfolio tab) and bundles the rows into a single portfolio dataset. Calculates market value, allocations, sector and asset-class breakdowns, P&L, concentration flags, and a 0–100 risk score. Sends the computed portfolio summary, breakdowns, risk flags, and holdings to OpenAI to generate a structured risk report in HTML. Builds a branded HTML email that includes the AI narrative plus sector and top-holdings tables and a concentration alert banner. Sends the HTML risk report to the investor via Gmail and appends a summary row to a Google Sheets “Analysis Log” audit sheet. Setup Create a Google Sheet with a tab named “Portfolio” and headers: ticker, company, sector, asset_class, quantity, avg_bu
Label incoming Gmail messages with Google Gemini and Telegram alerts
Quick overview This workflow polls Gmail for new emails, uses Google Gemini via an n8n AI text classifier to categorize each message by subject and snippet, and automatically applies the matching Gmail label, sending a Telegram alert if classification errors occur. How it works Checks Gmail every minute for new emails using the Gmail Trigger. Sends the email subject and snippet to a Google Gemini-powered text classifier to assign a category (Personal, Job, Study Related, Bank, Social, OTP, or Misc). Adds the corresponding Gmail label to the message in Gmail based on the predicted category. Sends a Telegram message to the configured chat ID if the classifier step produces an error. Setup Connect your Gmail account using Gmail OAuth2 and ensure the trigger has access to the mailbox you want to label. Add a Google Gemini (PaLM) API key credential for the AI classification step. Create (or choose) the target Gmail labels and replace the label IDs in each “addLabels” action with your own. Add Telegram bot credentials and set the correct chat ID in the Telegram message step (or disable it if you don’t want error alerts).
Qualify inbound leads with OpenAI, Slack, and Google Sheets
Quick overview This workflow receives inbound leads via a webhook, normalizes common form fields, and uses OpenAI to score and tier each lead as HOT, WARM, or NURTURE. It logs the result to Google Sheets, sends a tier-specific email auto-reply, and alerts a Slack channel for HOT leads. How it works Receives an inbound lead submission via a POST webhook. Normalizes incoming fields (name, email, company, website, message, budget, timeline, and source) into a consistent structure. Sends the normalized lead details to OpenAI to generate JSON scores (fit, budget, urgency, overall), a tier, reasoning, next action, and red flags. Merges the AI qualification results back into the lead record and routes the lead based on the tier. For HOT leads, posts an alert to Slack, appends the lead to the “Hot Leads” tab in Google Sheets, and sends a HOT auto-reply email. For WARM and NURTURE leads, appends the lead to the matching Google Sheets tab and sends the corresponding tier-specific auto-reply email. Returns a JSON response to the webhook caller confirming success and the assigned tier. Setup Add an OpenAI credential and customize the system prompt ICP/scoring rules in the OpenAI step. Add Goog
Send weekly narrative client reports with Google Sheets, Claude, and Gmail
Quick overview This workflow runs every Friday at 9:00 AM, pulls active client status data from Google Sheets, uses Anthropic Claude to generate a narrative weekly report with structured HTML and plain text output, and sends the finished report to each client via Gmail. How it works Runs every Friday at 9:00 AM on a schedule trigger. Reads all client rows from a specified Google Sheets document. Filters out paused/inactive or incomplete rows, extracts any “Metric:” columns, and builds a reporting week label for each client. Sends each client’s normalized data to Anthropic Claude to write a 3–4 paragraph narrative report and return JSON containing an email subject plus HTML and plain-text bodies. Emails the generated HTML report to each client’s email address using Gmail. Setup Create a Google Sheet with the required columns (at minimum “Client Name” and “Client Email”) and optional “Status” plus any “Metric:” columns you want included. Add Google Sheets OAuth2 credentials in n8n and replace the placeholder Sheet ID in the Google Sheets read step. Add an Anthropic credential for the Claude chat model used to generate the structured report. Add Gmail OAuth2 credentials and confirm th
Score and route inbound leads with Claude, Airtable, Slack, and Gmail
Quick overview This workflow receives inbound form leads via a webhook, normalizes the submission, optionally scrapes the lead’s website with Jina AI Reader, and uses Anthropic Claude to score and summarize the lead. It logs results to Airtable, posts a Slack alert, and creates a Gmail draft for hot leads. How it works Receives a POST webhook when a new lead submission comes in and immediately returns a JSON receipt response. Normalizes the incoming payload (Typeform, Tally, JotForm, or custom JSON) into consistent lead fields like name, email, company, website, and message. If a website is provided, fetches up to 2,000 characters of page content using Jina AI Reader and attaches it to the lead. Sends the lead details and scraped content to Anthropic Claude to produce structured JSON including a score, tier (hot/warm/cold), red flags, an enriched summary, and a first-reply draft. Builds a formatted Slack message and prepares a complete lead record (including routing flags) from the AI output. Creates a new record in Airtable and posts the lead alert to a Slack channel. If the lead is classified as hot, creates a Gmail draft using the generated first-reply text. Setup Copy the webho
Turn Telegram into a French fitness coach with Claude, OpenAI and Google Sheets
Quick overview This workflow turns a Telegram chat into a French-speaking fitness and nutrition coach that can handle text or voice messages, use Anthropic for responses, log and read training/nutrition data in Google Sheets, and schedule workouts in Google Calendar. How it works Triggers when a new Telegram message is received. Detects whether the incoming message is a voice note and, if so, downloads it from Telegram and transcribes it with OpenAI. Normalizes the user message, chat ID, and current date fields for downstream processing. Uses an Anthropic chat model with short-term session memory to generate a coaching response and decide when to call tools. Reads from and writes to Google Sheets to fetch or update the user profile, log workouts and meals, retrieve daily nutrition totals, and create or update weekly training and nutrition plans. Optionally creates a workout event in Google Calendar when the user asks to schedule a session. Sends the generated response back to the user in Telegram. Setup Create and connect credentials for Telegram, Anthropic, OpenAI (for audio transcription), Google Sheets OAuth2, and Google Calendar OAuth2. Replace YOUR_SHEET_ID_HERE and select the
Create vertical AI videos from web articles with OpenAI, Seedance and Blotato
Quick overview This workflow accepts an article URL from Telegram, extracts the page text, uses OpenAI to generate a Seedance 2.0 video prompt plus platform-specific captions, creates a vertical video via the AtlasCloud Seedance API, then publishes it to TikTok, Instagram, and YouTube through Blotato and confirms back on Telegram. How it works Receives a message in Telegram containing a web article URL. Fetches the web page HTML, strips it to plain text, and truncates the extracted content for prompting. Uses OpenAI to turn the URL and extracted text into a Seedance 2.0 text-to-video prompt plus TikTok and Instagram captions and a YouTube title and description. Submits the generated prompt to the AtlasCloud Seedance 2.0 generateVideo API with the configured duration, resolution, and FPS. Polls the AtlasCloud prediction endpoint on a wait interval until the video status returns completed/succeeded. Publishes the resulting video URL to TikTok, Instagram, and YouTube via Blotato using the generated captions and YouTube metadata. Sends a Telegram confirmation message that includes the video title and the final video URL. Setup Create a Telegram bot with @BotFather, add Telegram credent
Triage telehealth appointments with GPT-4o-mini, Telegram, Google Calendar
Quick overview This workflow collects telehealth appointment details via an n8n Form, uses OpenAI (GPT-4o-mini) to score no-show risk, then sends Telegram reminders and confirmations and updates Google Calendar based on the patient’s response, with Slack alerts on workflow errors. How it works Receives a new appointment submission from an n8n Form with patient, appointment, and Telegram chat details. Sends the appointment data to OpenAI (GPT-4o-mini) to generate a 0–100 no-show risk score and explanation. Routes the flow based on the risk score, sending a single friendly Telegram reminder for low-risk patients. For high-risk patients, sends escalating Telegram reminders and a final message that waits for a confirmation or cancellation reply. If the patient cancels, creates a new “rescheduled” time slot in Google Calendar and sends the patient a Telegram reschedule acknowledgement. If the patient confirms, updates the existing Google Calendar event to note the confirmation and sends a Telegram confirmation message. If any step fails, posts an error notification to a Slack channel. Setup Add credentials for OpenAI (Chat), Telegram Bot, Google Calendar OAuth2, and Slack OAuth2 used fo