GenAiHub

Workflows

Browse 12,955 Workflows

Workflows Guide

Workflows are deterministic, multi-step pipelines that chain models, tools and agents in a fixed order — the predictable counterpart to an autonomous agent. Each entry records its platform and complexity, so the setup cost is visible before you import it.

337–348 of 12,955

Re
Reactivate nightly maintenance workflows with Data Tables and the n8n API
Live

By Daniele Crupi

Quick overview This workflow runs every morning and reads a Data Table log of workflows previously disabled for maintenance, then reactivates each one via the n8n REST API and clears the log so the next maintenance cycle starts clean. How it works Runs every day at 08:45 on a Schedule trigger. Sets the n8n instance base URL used to build API requests. Reads all rows from an n8n Data Table that contains the workflow IDs to restore. Iterates through the logged workflow IDs and calls the n8n REST API to activate each workflow. After the loop completes, deletes all rows from the Data Table to reset the maintenance log. Setup Create or select the n8n Data Table used as the maintenance log and ensure it contains a workflow_id column (and any other fields you want, such as name and timestamp). Add an n8n API credential (Settings → n8n API) and select it for the HTTP Request that activates workflows. Update the base_url value to your n8n instance URL and select the correct Data Table ID in both the read and delete steps. Ensure the companion “Maintenance ON” workflow writes deactivated workflow IDs into the same Data Table and does not disable this workflow. An n8n automation workflow template by Daniele Crupi.

N8nUpdated 6 hours ago
Free
No ratings
  • 1 nodes
Workflows
  • Automation
Ge
Generate RFx documents from Notion sourcing requests with Groq and Slack
Live

By WeblineIndia

Quick overview This workflow monitors a Notion sourcing pipeline for RFx requests, uses Groq-hosted LLMs to draft an RFx using context from similar past Notion projects, writes the formatted document back into Notion, and waits for a manager approval webhook to update the request status. How it works Triggers every minute when a page changes in the Notion “Sourcing Pipeline” database. Checks that the request Status equals “Generate RFx” and stops if it does not match. Queries the Notion “Past Projects” database for the top three similar projects (same Category and Sourcing Type) sorted by Success Score. Selects the correct RFx system prompt (RFI/RFP/RFQ) and sends the request requirements to Groq to generate the draft scope content. Sends the scope plus historical evaluation and timeline context to Groq to generate evaluation/pricing tables and a project timeline with submission guidelines. Combines the AI outputs, converts the Markdown into Notion block JSON, sets the Notion page status to “Pending Approval,” and appends the generated blocks to the original Notion page. Waits for a manager decision via a resume webhook and updates the Notion page status to “Sent to Suppliers” when approved or “Needs Revisions” when rejected. Setup Add Notion credentials and select your Notion “Sourcing Pipeline” and “Past Projects” databases, ensuring the properties used by the workflow exist (Status, Project Name, Category, Sourcing Type, Business Requirements, Success Score, evaluation criteria, and standard timelines). Add a Groq API credential and confirm the selected Groq chat models are available in your Groq account. Ensure your Status property includes the values “Generate RFx,” “Pending Approval,” “Sent to Suppliers,” and “Needs Revisions,” and update the workflow’s status strings if your labels differ. Provide Notion API access for the HTTP request that appends blocks (Notion predefined credentials) and keep the Notion-Version header aligned with your workspace API compatibility. Share the Wait node’s resume webhook URL with your approver system (for example, an interactive Slack message) so it can call back with an action value of approve or reject. Additional info How To Customize Nodes Adjust AI Prompts:* Open the *Prompt Library (RFI/RFP/RFQ) node to customize the exact headers, rules, and procurement terminology the AI agents use when drafting documents. Swap AI Models:** Open any of the Groq Model nodes to select a different language model (e.g., switching from qwen3.8-27b to llama3-70b) based on your preference for speed versus complex reasoning. Customize Slack Messaging:* Modify the text in the *Slack: Request Approval or Notify Team (RFx Live) nodes to include different database properties, @mentions for specific executives, or specific channel IDs. Add‑ons PDF Export Generation:** Add an HTML-to-PDF conversion node after the final approval to automatically generate a formal PDF version of the RFx for direct email to suppliers. Email Distribution:** Connect an Outlook or Gmail node at the end of the "Approve" branch to automatically email the finalized RFx link to a predefined list of vendor contacts. Jira/Asana Ticketing:** If revisions are needed (the Reject branch), add a node to automatically create a ticket in your engineering or legal team's project board to review the draft. Use Case Examples While tailored for procurement, this core architecture is highly adaptable. Similar use cases include: Automated Request for Information (RFI): Translating rough business requirements into exploratory market research documents. Structured Request for Proposal (RFP): Generating formal Scope of Work documents outlining core objectives, technical requirements, and vendor responsibilities. Specific Request for Quotation (RFQ): Drafting exact specifications, Service Level Agreements (SLAs), and delivery compliance requirements for vendor pricing. HR Job Description Drafting: Replacing the procurement prompts to draft highly customized job descriptions based on historical hiring data, sending them to a hiring manager on Slack for approval. Troubleshooting Guide | Issue | Possible Cause | Solution | | --- | --- | --- | | Workflow doesn't trigger on new Notion items | Wrong polling configuration or status mismatch. | Check the Trigger node to ensure it is actively polling. Verify that the Notion item's status exactly matches "Generate RFx" as required by the If node. | | HTTP Request to Notion fails (Status 400) | Markdown parser failed or incorrect API version. | Check the Parse Markdown to Blocks output to ensure valid JSON. Verify the Inject Content node uses the correct Notion-Version header. | | Slack Wait Node times out | Interactive buttons in Slack are not configured properly. | Ensure the execution resume URL is properly formatted in the Slack message and that your n8n webhook URL is accessible to the public internet. | | AI Nodes return errors | Groq API limits exceeded or model unavailable. | Open the Groq nodes and check your account limits. Try switching to a smaller model if rate limits are hit. | Need Help? Building multi-agent AI workflows with custom JavaScript parsing and interactive Slack loops can be complex. If you need a helping hand to set up your Notion API integration, tune your Groq AI prompts, or customize Add-Ons like automated email distribution, we are here for you! We encourage you to contact WeblineIndia for expert assistance with setting up this specific workflow or to help you build similar custom automation processes tailored exactly to your business needs. An n8n automation workflow template by WeblineIndia.

N8nUpdated 6 hours ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI
Shuo Yuan logo
Watch Discourse job boards, dedupe with Data Tables, and send Gemini summaries to Telegram
Live

By Shuo Yuan

Quick overview Polls any Discourse forum on a schedule and keeps a ledger of every topic already seen, so you get only genuinely new job posts. Built for freelancers and community managers who need to be first to reply on niche job boards. How it works A Schedule Trigger fires every 30 minutes (fully configurable) and an HTTP Request node fetches the JSON feed of the target Discourse category, such as a jobs board. A Code node expands the feed, keeps only topics created within the last 48 hours, and outputs one item per topic. A Data Table node upserts each topic as seen, forming a permanent de-duplication ledger so no topic is processed twice. Connect any notification node (Telegram, Gmail, Slack) after the filter to receive only new topics. Setup Import the workflow and open the Fetch Job Board Posts node. Replace the COMMUNITY_URL_TO_WATCH placeholder and the category path (jobs/13) with your target forum and category ID. In the Record Seen Topics node, select or create an n8n Data Table that contains a topic_id column; this becomes your seen-ledger. Add your notification node of choice after the filter, adjust the schedule interval and 48-hour window if you like, then activate the workflow. Requirements A publicly accessible Discourse forum (no login required for the category feed) and an n8n Data Table with a topic_id column. Customization Change the poll interval for faster boards; point it at any Discourse category (jobs, changelogs, marketplace); swap the Data Table for Google Sheets; add an auth header for boards behind a login. An n8n automation workflow template by Shuo Yuan.

N8nUpdated 6 hours ago
Free
No ratings
  • 3 nodes
Workflows
  • Automation
Syed Maaz Saeed logo
Run multi-step cold email sequences with OpenAI, LinkedIn, Qdrant and NocoDB
Live

By Syed Maaz Saeed

Quick overview This primary orchestrator workflow automates multi-step cold email campaigns. It enriches lead profiles using LinkedIn data via RapidAPI, generates hyper-personalized email copy using OpenAI and a Qdrant knowledge base, and tracks follow-up sequences seamlessly using NocoDB. How it works Schedule Triggers launch the 1st, 2nd, 3rd, and 4th email sequences at staggered times throughout the week. Pulls lead lists and sender/company context from NocoDB. Calls a sub-workflow to check if an email inbox has reached its daily/weekly sending limits before proceeding. For first-touch emails, it pulls the prospect's LinkedIn profile and recent posts using RapidAPI. LangChain Agents use OpenAI to analyze the LinkedIn data, create a research briefing, and draft a highly personalized email. Qdrant is used as a vector store to retrieve accurate product details Sends the drafted email via a "Send Emails" sub-workflow, then writes the sent message and timestamps back to NocoDB to start the follow-up tracking cycle. Subsequent sequences pull past email history and company LinkedIn posts, generating context-aware follow-ups until the sequence concludes. Setup Add your OpenAI API credentials for all the Chat Model nodes. Add your Qdrant credentials and ensure your collection exists with embeddings compatible with your OpenAI embeddings model. Add your RapidAPI credentials for the "professional-network-data" endpoints to enable LinkedIn scraping. Update the NocoDB base URL, table paths, and xc-token headers to match your environment, and ensure the tables/fields used for leads, company info, and follow-up logging exist. Connect and configure the referenced sub-workflows for inbox availability and email sending (“If Emails Available to Send Email” and “Send Emails”), including any email-provider credentials they require. (Optional) Use the form trigger to upload PDFs/CSVs into the Qdrant knowledge base so the email writers can retrieve accurate product/service details during generation. Requirements OpenAI API Key RapidAPI Key (Professional Network Data) Qdrant Vector Database NocoDB instance (or replace with Airtable/Google Sheets) The supporting sub-workflows imported into your n8n workspace Customization Modify the Schedule Trigger nodes to match your target timezones and sending days. Open the LangChain Agent nodes and adjust the system prompts to match your company's specific voice, industry, and writing rules. You can easily swap out the NocoDB HTTP Request nodes for native Airtable, Postgres, or Google Sheets nodes depending on your tech stack. Additional info This template is Part 1 of a comprehensive 7-part Lead Generation system. Because it acts as the "brain," you will see broken connections in the "Execute Workflow" nodes upon import. You must download the remaining sub-workflows from my creator profile and re-link them inside those nodes for the automation to run successfully. An n8n automation workflow template by Syed Maaz Saeed.

N8nUpdated 6 hours ago
Free
No ratings
  • 9 nodes
Workflows
  • Automation
  • AI
En
Enrich Notion page data with related relations, pages, and content
Live

By Mayron Kersbaum

Quick overview This workflow is called by another n8n workflow to expand selected Notion page properties, resolving relation fields via a helper sub-workflow, and returns the original page object enriched with the requested nested property data. How it works Receives a Notion page object and a list of property names to expand as inputs from another n8n workflow. Splits the requested Properties list into individual items and iterates through them. For each property, calls the “Get Relation Info” sub-workflow to resolve the Notion relation property into related page data. If the current property includes nested properties to expand and the resolved data is not empty, it iterates through the related items and recursively calls this same workflow to expand the nested properties. Aggregates the resolved property objects from all iterations. Merges the aggregated resolved properties back into the original Notion page object and outputs the enriched page. Setup Configure the Notion credentials required by the “Get Relation Info” sub-workflow (and any Notion calls it performs). Ensure the “Get Relation Info” workflow (ID: 14yGdu1YOQ0RgCzZ) exists in your workspace and is compatible with the provided inputs (Page and Propriedade). Ensure this workflow is invoked from a parent workflow using the Execute Workflow node, passing a Notion page object in Page and an array of objects in Properties (for example: { "nome": "📝 Anotações", "propriedades": [...] }). An n8n automation workflow template by Mayron Kersbaum.

N8nUpdated 6 hours ago
Free1 uses
No ratings
  • 2 nodes
  • 1 views
Workflows
  • Automation
Sh
Show NASA APOD and nearest asteroid data in Home Assistant dashboards
Live

By Joey Townsend

Quick overview This workflow runs daily and pulls NASA’s Astronomy Picture of the Day plus the closest near‑Earth asteroid from NASA’s NEO feed, then upserts both datasets into Home Assistant as sensors for use in dashboards and automations. How it works Runs every day at 6:00 AM (or on demand via manual trigger) and starts two parallel data pulls. Requests NASA’s Astronomy Picture of the Day (APOD) from the NASA API with thumbnail support enabled. Extracts the APOD title, date, media type, a best-available image/thumbnail URL, and trims the explanation to 280 characters. Upserts a Home Assistant sensor state at sensor.nasa_apod with the APOD title and attributes (image URL, explanation, media type, and date). Requests NASA’s Near-Earth Object feed for today through the next three days from the NASA API. Flattens all returned asteroids, sorts them by miss distance, and selects the closest approach with distance, estimated diameter, velocity, and hazard flag. Upserts a Home Assistant sensor state at sensor.nasa_asteroid with the asteroid name and attributes (date, distance, size, speed, hazard flag, and total count). Setup Create a free NASA API key at https://api.nasa.gov and add it as an HTTP Query Auth credential (as api_key) used by both NASA HTTP requests. Add Home Assistant credentials (instance URL and a long-lived access token) and select them in both Home Assistant upsert steps. Ensure your Home Assistant instance allows creating/updating the entities sensor.nasa_apod and sensor.nasa_asteroid (or update the entity IDs to match your naming). Run the workflow once and verify the sensor states/attributes in Home Assistant under Developer Tools → States. Activate the workflow and adjust the schedule time or the 3-day asteroid lookahead window if needed. Requirements Home Assistant with API access and a long-lived access token A free NASA API key from api.nasa.gov n8n (cloud or self-hosted) Customization Change the trigger time in the Daily 6AM node Adjust the explanation length (280 characters) in Process APOD Extend the asteroid look-ahead window beyond 3 days in Fetch Asteroid Data Display the picture with a Picture Entity card using the image_url attribute Add a Home Assistant automation that notifies you when hazardous is true Additional info Sensors created through the Home Assistant API are not stored permanently: they disappear after a Home Assistant restart until the workflow runs again. Click Test Run after a restart, or add a second schedule, if you want them back sooner. An n8n automation workflow template by Joey Townsend.

N8nUpdated 6 hours ago
Free26 uses
No ratings
  • 3 nodes
  • 26 views
Workflows
  • Automation
Ge
Generate official French company PDF reports with Sirenic, Google Drive and Slack
Live

By Sirenic

Quick overview Post a SIREN and the official due-diligence report of the French company lands in Google Drive, with its link on Slack: identity, officers, legal notices, filed accounts and sanctions screening, laid out on A4. One paid call, no PDF template to maintain. How it works The SIREN is checked first: not nine digits, the caller gets a 400 and nothing is billed. One call to /v1/rapport/{siren} returns the finished PDF ($0.50). The file is saved to Google Drive under a dated name, and Slack gets the link. Errors are never billed: Slack says why, and no file is written. Setup Create an API key at https://api.sirenic.eu/compte. Add a Header Auth credential (X-Api-Key, your srn_live_ key) on Get the company report (PDF). Pick the Google Drive folder on Save the PDF to Google Drive. Pick your Slack channel on the two Slack nodes. Test with the SIREN 552032534. Requirements n8n Cloud or self-hosted, native nodes only · a Sirenic API key: $0.50 per report, errors never billed · Google Drive and Slack credentials Customization Trigger it from your CRM when a deal reaches due diligence, attach the PDF to the record, or e-mail it with the Gmail node. Additional info Who's it for: sales, credit and compliance teams who need a dated file on a French company before a contract, a credit limit or a supplier listing. Official sources: INSEE Sirene, INPI RNE, BODACC and six sanctions lists. A sanctions match is a name to verify, never a decision. An n8n automation workflow template by Sirenic.

N8nUpdated 6 hours ago
Free
No ratings
  • 3 nodes
Workflows
  • Automation
Apify logo
Monitor competitor price shifts with Apify, Postgres, OpenAI, and Slack
Live

By Apify

Quick overview This workflow runs every morning to scrape competitor product pages with Apify, store daily price snapshots in Postgres/Supabase, detect unusual price moves using SQL views, and post actionable repricing commentary (plus scraping health warnings) to a Slack channel. How it works Every morning it reads your list of competitor product URLs and sends them to the Apify E-commerce Scraping Tool, which handles anti-bot, proxies and per-retailer extraction. There is no scraper to maintain here. A normalize step reduces per-retailer differences to one shape. Prices are parsed without assuming a locale, so 1.299,99 and $1,299.99 both read correctly. Currency is stored as an ISO code rather than a symbol. Stock keeps three states, because "not reported" is not the same as "out of stock". One row per product per day goes to Postgres. A view compares today against the trailing 30-day average and the 90-day low and reports transitions, not states, so a rival who cuts a price and holds it is reported once rather than every morning. It stays silent for the first 14 days, because a baseline of one day is noise. An AI agent turns what moved into a recommendation and posts it to Slack. A second branch reports which URLs returned nothing, so a broken page cannot look like a quiet market. Setup Add the Apify community node. On n8n Cloud, search for it on the canvas; your instance owner must have verified community nodes enabled. Self-hosted, install @apify/n8n-nodes-apify under Settings, Community nodes. Run the schema in supabase_schema.sql (linked in the sticky note) against Postgres 15 or later. It creates a private schema with RLS enabled, so the table is never exposed through Supabase's Data API. Add credentials: Apify, Postgres, a chat model, Slack. Open Pages to watch and replace the example URLs with yours, and set your Slack channel. Check your instance timezone. The schedule says 06:00 and n8n reads that in the instance timezone. Run once manually and confirm a row landed in pricing.price_history. Requirements An Apify account. Postgres 15 or later, or a Supabase project. Version 15 is the floor because the views use security_invoker. A chat model credential and a Slack workspace. Customization The detection thresholds live in one SQL view: the 5% band against the 30-day average, the 90-day low and high, and the 14-day baseline gate. Change them there and the agent's behaviour follows, because detection is deterministic and the model only writes. Swap Slack for email, Sheets or a webhook by replacing one node. To watch a category rather than fixed products, run the Actor in keyword mode once to harvest URLs, then pin them: keyword results drift daily and cannot produce a price series. An n8n automation workflow template by Apify.

N8nUpdated 6 hours ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI
WeblineIndia logo
Parse and score resumes with OpenAI GPT-4o, Google Drive, PostgreSQL and Slack
Live

By WeblineIndia

Quick overview This workflow collects resume uploads via an n8n form, stores the file in Google Drive, extracts and parses the resume with OpenAI into structured candidate data, calculates a simple fit score, saves the result to PostgreSQL, and notifies HR in Slack. How it works Receives a candidate submission through an n8n Form trigger with a PDF resume attachment. Uploads the resume file to a specified Google Drive folder and extracts the resume text from the uploaded PDF. Sends the extracted resume text to OpenAI (gpt-4o-mini) to return key candidate fields as JSON. Parses the AI response, cleans and normalizes fields like name casing, email formatting, and numeric experience years. Calculates a candidate score based on experience and the presence of specific skills (React, Node.js, PostgreSQL). Inserts the structured candidate record and score into a PostgreSQL candidates table. Posts a Slack message to an HR channel with the candidate’s details and score. Setup Configure the n8n Form trigger and share the form URL with candidates to upload their PDF resumes. Connect Google Drive OAuth credentials and select the target Drive and folder where resumes should be stored. Add an OpenAI API credential and confirm the model and prompt match the fields you want to extract. Set up a PostgreSQL credential and ensure a public.candidates table exists with columns that match the workflow mappings. Connect Slack OAuth credentials and choose the channel where HR should receive candidate notifications. An n8n automation workflow template by WeblineIndia.

N8nUpdated 6 hours ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI
WeblineIndia logo
Process and validate invoices with OpenAI, PostgreSQL, and Slack
Live

By WeblineIndia

Quick Overview This workflow receives invoice PDFs via a webhook, extracts and cleans the text, uses OpenAI to parse key invoice fields into JSON, validates required data, stores successful invoices in PostgreSQL, and notifies a Slack channel, while logging failures and returning a success or error webhook response. How it works Receives an uploaded invoice file via a POST webhook endpoint. Extracts text from the uploaded PDF file and cleans up whitespace and line breaks. Sends the cleaned invoice text to OpenAI to extract structured fields (vendor, invoice number, dates, amounts, currency, tax, and category) as JSON. Parses the OpenAI response into a standardized JSON object and checks that required fields like vendor name and total amount are present. If valid, writes the invoice record to a PostgreSQL invoices table and posts a formatted notification to a Slack channel. If validation fails, stores an error record in a PostgreSQL failed_invoices table, alerts the same Slack channel, and returns a failed status response. Returns a JSON success response to the original webhook caller when processing completes successfully. Setup Create and connect an OpenAI API credential, and confirm the model selection (gpt-4o-mini) matches your account access. Configure the webhook source to send a PDF file to the workflow’s POST /invoice-upload endpoint using the binary field name file. Add PostgreSQL credentials and ensure the public.invoices and public.failed_invoices tables exist with columns matching the mapped fields. Add Slack credentials and select the target channel for both the success notification and failure alert messages. Test with a few real invoices and adjust the OpenAI extraction prompt or database column types if your invoices use different formats for dates, currencies, or totals. An n8n automation workflow template by WeblineIndia.

N8nUpdated 6 hours ago
Free
No ratings
  • 6 nodes
Workflows
  • Automation
  • AI
De
Detect bulk phone status with ZelNum via webhook
Live

By yaho

Quick overview This workflow receives a webhook containing at least 2,000 phone numbers, submits them to the ZelNum Detect API for bulk phone detection, polls the asynchronous task until completion or failure, and returns the ZelNum result download URL in the webhook response. How it works Receives a POST webhook request with a product slug, country code, and an array of phone numbers. Validates the request payload and rejects it if phones is not an array or contains fewer than 2,000 numbers. Sends the numbers to the ZelNum Detect API to start an asynchronous detection task. Polls the ZelNum Tasks API every 5 seconds (up to 100 attempts) to check the task status. If ZelNum reports the task as failed, the workflow stops with an error message from the API. When the task completes, the workflow calls ZelNum to retrieve and return the result download URL as the webhook response. Setup Create a ZelNum account, generate an API key in the ZelNum Console, and add it to n8n as an HTTP Header Auth credential using header name X-API-Key. Attach the same ZelNum Header Auth credential to all ZelNum HTTP requests in the workflow. Copy the production webhook URL from n8n and configure your client to POST a JSON body with product, country, and a phones array containing at least 2,000 E.164-formatted numbers. Learn more about ZelNum and read the API documentation. An n8n automation workflow template by yaho.

N8nUpdated 6 hours ago
Free
No ratings
  • 2 nodes
Workflows
  • Automation
tony logo
Qualify and score Telegram leads with OpenAI, Google Sheets and Gmail
Live

By tony

Quick overview A Telegram bot that qualifies inbound leads with OpenAI, scores them against your own threshold, logs each one to Google Sheets, and emails your team through Gmail only when a conversation is actually worth a human's time. How it works Triggers when your Telegram bot receives a new message. Normalizes the message into a per chat session that tracks history, lead score and state, then routes it to AI scoring, a holding reply, a non text fallback, or a rate limit notice. Sends the conversation and your business details to the OpenAI node, which returns a short reply plus structured lead scoring data. Parses the response, updates the session, and runs a deterministic evidence check so a high score on its own cannot trigger a handoff. On a qualified lead it replies to the visitor, notifies your team chat, appends a row to Google Sheets, and sends an email through Gmail. If the OpenAI call fails, an error branch still answers the visitor instead of dropping the message. Already handed off, rate limited and non text messages each get their own reply. Setup Create a Telegram bot with BotFather, then add your Telegram credentials to the Telegram Trigger and Send Telegram Message nodes. Add your OpenAI credentials to the Score Lead with OpenAI node. Open the Workflow Configuration node and set your business details, handoff threshold and team chat ID. To turn on lead logging and team email, replace the Google Sheet ID and team email placeholders there, and add Google Sheets and Gmail credentials to those two nodes. Leave the placeholders as they are and both branches are skipped. Requirements A Telegram bot token and an OpenAI API key. Google Sheets and Gmail credentials are optional and only needed if you enable those branches. Customization Raise or lower the handoff threshold to change how strict qualification is, adjust the rate limit window, and edit the scoring prompt in Build AI Request to match how your team defines a qualified lead. An n8n automation workflow template by tony.

N8nUpdated 6 hours ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI