Back to Catalog

Create & share AI videos with Telegram, Gemini & post to TikTok, Instagram, FB

Feras DabourFeras Dabour
1283 views
2/3/2026
Official Page

Video Generation with Telegram Bot and Gemini API – Auto-Post to TikTok, Instagram & Facebook

This n8n workflow turns your Telegram messenger into a full video content pipeline: you send a text or voice idea to a Telegram bot, collaborate with an AI on the script and caption, let Gemini generate the video, and then automatically publish it to TikTok, Instagram and Facebook – all with status tracking and Telegram confirmations.


What You Need to Get Started

This workflow connects several external services. You’ll need:

  • Telegram Bot API Key

    • Create a bot via Telegram’s BotFather and copy the bot token.
    • This is used by the Listen for incoming events and other Telegram nodes.
  • OpenAI API Key

    • Required for:

      • Speech to Text (OpenAI Whisper) – to transcribe voice notes.
      • The OpenAI Chat Model used inside the AI Agent.
  • Google Gemini / Vertex (via n8n Gemini Node)

    • Used by the Generate a video node (model: veo-3.0-fast-generate-001) to create the video.
  • Google Drive

    • The generated video is temporarily stored in a Google Drive folder via Upload video and later downloaded again for uploading to Blotato.

*** Blotato API Key***

  • Social media publishing layer:

    • Uploads the video as media.
    • Creates posts for TikTok, Instagram and Facebook.
    • Exposes a status endpoint the workflow uses for polling.
  • Google Sheets Access (optional but included)

    • Used by Save Prompt & Post-Text to log your prompts and captions.

Once these credentials are configured in n8n, the workflow runs end-to-end from Telegram idea to multi-platform publishing.


How the Workflow Operates – Step by Step

1. Input & Initial Processing (Telegram + Voice Handling)

This phase listens to your messages and normalizes them into a single text input for the AI.

| Node Name | Role in Workflow | | ------------------------------ | ------------------------------------------------------------------------------------------------------- | | Listen for incoming events | Telegram Trigger node that starts the workflow whenever your bot receives a message (text or voice). | | Voice or Text | Set node that structures the incoming payload and prepares a unified text field for downstream nodes. | | A Voice? | IF node that checks whether the incoming message is a voice note or plain text. | | Get Voice File | If voice is detected, this Telegram node downloads the audio file from Telegram. | | Speech to Text | Uses OpenAI Whisper to convert the voice note into a text transcript. |

  • If you send text: The workflow skips the voice download/transcription and goes directly to the AI agent with your original text.

  • If you send a voice note: The workflow downloads the file, runs it through Whisper in Speech to Text, and passes the resulting transcript onward.

The output of this stage is always a clean text string representing your idea.


2. AI Core & Approval Loop (Script + Caption via AI)

Here the AI designs the video prompt (for Gemini) and the social media caption (for all platforms), then iterates with you until you approve.

| Node Name | Role in Workflow | | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | AI Agent | Central logic agent. Takes your idea text and applies the system prompt to create a video prompt and social media caption. Handles revisions based on your feedback. | | OpenAI Chat Model | The LLM backing the agent (OpenAI Chat model). | | Window Buffer Memory | Memory buffer that stores recent turns, so the agent can keep context across your “make it shorter / more fun / more technical” requests. | | Send questions or proposal to user | Telegram node that sends the AI’s suggested prompt + caption back to you for review. | | Approved from user? | IF node that checks whether the agent’s output is the “approved” JSON (meaning you said “ok” / “approved”) or just a normal suggestion. |

Video Prompt Assistant System Prompt (Internal Instructions)

The AI Agent is configured with a system message like:

> You are a video prompt assistant for Telegram. > > 1. Analyze the user’s message and create a video prompt. > 2. Create relevant social media text with hashtags. > 3. Present both to the user and ask for feedback. > 4. If the user requests changes, refine and present again. > 5. Only when the user says “approved” or “ok”, output a final JSON: > { "videoPrompt": "...", "socialMediaText": "..." }

Key behavior:

  • Before approval: The agent always responds with human-readable suggestions (prompt + caption) and a follow-up question asking what to change.

  • After approval: The agent returns only JSON (no Markdown, no explanation) with:

    • videoPrompt – to be sent to Gemini.
    • socialMediaText – to be used as a caption on all platforms.

JSON Parsing

| Node Name | Role in Workflow | | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Parse AI Output | Code node that extracts videoPrompt and socialMediaText from the agent’s output. It is tolerant of different formats (e.g. JSON wrapped in markdown) and throws errors if required fields are missing. |

If the AI output is approved JSON, this node returns two clean fields:

  • videoPrompt
  • socialMediaText

These are used in all subsequent steps.


3. User Feedback & Logging

Right after parsing the final JSON, the workflow informs you and logs the content.

| Node Name | Role in Workflow | | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Inform user about processing | Telegram node that tells you: “Okay. Your video is being prepared now. I’ll let you know as soon as it’s online.” | | Save Prompt & Post-Text | Google Sheets node that appends a new row containing the videoPrompt and socialMediaText to a sheet (e.g., for tracking which prompts/captions you used). |

This gives you both visibility (confirmation message) and historical tracking of your content ideas.


4. Video Generation with Gemini

Now the actual video is created using Google Gemini’s video model.

| Node Name | Role in Workflow | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | Generate a video | Gemini node (model models/veo-3.0-fast-generate-001) that uses videoPrompt to generate a vertical video (aspect ratio 9:16). |

The videoPrompt from the AI agent is passed directly into this node. The resulting binary output is a generated short-form video suitable for TikTok, Reels and Stories.


5. Staging the Video in Google Drive

To make the video accessible for Blotato, the workflow uses Google Drive as a simple file staging area.

| Node Name | Role in Workflow | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Upload video | Uploads the generated video binary to a specific folder in Google Drive (n8n_videos). The file name is taken from the binary metadata or defaults to video.mp4. | | Download Video from Drive1 | Immediately downloads the uploaded video by file ID, this time as binary data suitable for passing into [Blotato]. |

Using Drive ensures that the file is properly hosted and addressable when uploading to [Blotato]’s media API.


6. Uploading to [Blotato]and Creating Posts

First, the video is sent to [Blotato] as a media asset. Then three separate posts are created for TikTok, Instagram, and Facebook.

Media Upload

| Node Name | Role in Workflow | | ----------------- | ------------------------------------------------------------------------------------------------------------------------- | | Upload media1 | [Blotato] media node. Uploads the binary video as a media asset and returns a public url used by all post creation nodes. |

Platform-Specific Post Creation

From the uploaded media, the workflow fans out into three branches:

| Node Name | Platform | Role in Workflow | | ------------------------ | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | Create TikTok post | TikTok | Creates a TikTok post using the media URL and socialMediaText as the caption. Also sets the flag that the video is AI-generated. | | Create post1 | Instagram | Creates an Instagram (or related) post linked to the [Blotato] account (e.g., aimaginate_xx), using the same socialMediaText and media URL. | | Create Facebook post | Facebook Page | Creates a Facebook post on your specified page, again using the shared caption and media URL. |

At this point, all three platforms have an initial “post submission” created via [Blotato]. Next, the workflow tracks their publishing status.


7. Status Monitoring & Retry Loops

Each platform has its own mini-loop that polls [Blotato]) until the post is either published or failed.

TikTok Status Loop

| Node Name | Role in Workflow | | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | Wait | Initial 5-second (or configured) pause after creating the TikTok post. | | Check Post Status | Blotato “get” operation that fetches the current status (published, in-progress, etc.) of the TikTok post by postSubmissionId. | | Published to TikTok? | IF node that checks if status === "published". | | Confirm publishing to Tiktok | Telegram node that notifies you when the TikTok post is live (often including a link or at least a confirmation text). | | In Progress? | IF node that checks if status === "in-progress". | | Give Blotat other 5s :) | Wait node that sleeps a bit before checking again. Feeds back into Published to TikTok? to create a polling loop. | | Send TikTok Error Message | Telegram node that informs you if the status is neither published nor in progress (i.e., a failure). |

Instagram Status Loop

| Node Name | Role in Workflow | | ----------------------------------- | ------------------------------------------------------------------------------------ | | Wait1 | Wait node after Create post1, giving Blotato time to process the Instagram post. | | Get post1 | Blotato “get” operation to read status of the Instagram post. | | Published to Instagram? | IF node checking if status === "published". | | Confirm publishing to Instagram | Telegram message with confirmation that your Instagram post is live. | | In Progress?1 | IF node checking if status === "in-progress". | | Give Blotat more time | Wait node that loops back to Published to Instagram? for another status check. | | Send Instagram Error Message | Telegram notification if the Instagram post fails. |

Facebook Status Loop

| Node Name | Role in Workflow | | ---------------------------------- | -------------------------------------------------------------------------------- | | Wait2 | Wait node after Create Facebook post (longer pause, e.g. 30 seconds). | | Get Facebook post | Blotato “get” operation to fetch Facebook post status. | | Published to Facebook? | IF node testing for status === "published". | | Confirm publishing to Facebook | Telegram notification that the Facebook post is online. | | In Progress?2 | IF node checking if the Facebook post is still in progress. | | Give Blotat other 5s :)2 | Wait node that loops back into Published to Facebook? for repeated checks. | | Send Facebook Error Message | Telegram notification if the Facebook post fails or ends in an unexpected state. |

This structure ensures that each platform is monitored independently, with clear success or error messages delivered right into your Telegram chat.


🛠️ Personalizing Your Video Content Bot

The real power of this workflow is how easy it is to adapt it to your own style, platforms, and preferences.

1. Tweak the AI Prompt & Behavior

  • Where: Inside the AI Agent node, in the System Message (systemMessage) of the options.

  • What you can change:

    • The tone (funny, educational, corporate, storytelling, etc.).
    • The level of detail in the video prompt (camera moves, style, characters, environment).
    • The caption structure (hook, value, CTA, hashtag strategy).
    • Whether the agent should produce multiple variants or just one.

You can also extend it, e.g.:

  • Ask for multi-slide carousel prompts instead of a single video.
  • Force language (e.g., always English, always German).
  • Add platform-specific hints (e.g., stronger hooks for TikTok).

2. Change Video Model or Aspect Ratio

  • Where: Generate a video node.

  • Options:

    • Swap the model (within the Gemini node) if you want higher quality or different behavior.
    • Adjust the aspectRatio from 9:16 to 16:9 or 1:1 depending on your target platform.

3. Modify Which Platforms You Post To

  • Where: Blotato nodes:

    • Create TikTok post
    • Create post1 (Instagram)
    • Create Facebook post

You can:

  • Disable or delete branches for platforms you don’t use.
  • Add new accounts or platforms supported by Blotato.
  • Use different captions per platform (e.g. shorter for TikTok, more detailed for Facebook) by adding extra AI formatting steps.

4. Adjust Wait Times and Retry Logic

  • Where: Wait and IF nodes:

    • Wait, Wait1, Wait2, Give Blotat other 5s :), Give Blotat more time, Give Blotat other 5s :)2
  • What:

    • Increase or decrease retry intervals.
    • Limit the number of loops (e.g. by adding a counter) if needed.
    • Customize error messages in the Telegram nodes.

5. Extend Logging & Analytics

  • Where: Save Prompt & Post-Text (Google Sheets).

  • Ideas:

    • Add more columns (timestamp, platform flags, target audience, campaign name).
    • Write back publish status and final URLs after success.
    • Use this sheet as a content inventory or analytics base.

In short, this workflow gives you a full AI-powered video pipeline:

  1. Idea (text/voice) via Telegram
  2. Drafting & approval of video prompt + caption via OpenAI agent
  3. Video generation with Gemini (veo)
  4. Staging in Google Drive
  5. Auto-posting and status monitoring across TikTok, Instagram & Facebook via Blotato
  6. All communication and confirmations returned directly to Telegram

And everything is fully editable so you can adapt it precisely to your personal brand and content strategy.

n8n Workflow: Telegram AI Video Creator and Social Media Publisher

This n8n workflow automates the process of generating AI-powered video content based on user input from Telegram, and then publishing it to various social media platforms. It leverages AI agents and language models to create engaging video ideas and descriptions, storing relevant data in Google Sheets and Google Drive.

What it does

This workflow streamlines content creation and distribution through the following steps:

  1. Listens for Telegram Messages: The workflow is triggered by incoming messages on a configured Telegram bot.
  2. Filters Input: It evaluates the incoming Telegram message to determine if it contains a specific keyword or condition (e.g., "create video").
  3. Processes Input with AI:
    • If the condition is met, the workflow uses an AI Agent (likely powered by OpenAI or Google Gemini) to process the user's request.
    • A "Simple Memory" component helps the AI maintain context during the conversation.
    • The AI generates video ideas, scripts, or descriptions based on the Telegram input.
  4. Stores Data in Google Sheets: Key information related to the video request and AI-generated content (e.g., video title, description, status) is recorded in a Google Sheet.
  5. Manages Files in Google Drive: Any generated video files, scripts, or related assets are stored in Google Drive.
  6. Delays Execution (Optional): A "Wait" node can be configured to introduce a delay, potentially for manual review or to space out social media posts.
  7. Notifies via Telegram: The workflow sends status updates or the generated video link back to the user on Telegram.
  8. Prepares for Social Media Posting: A "Code" node and "Edit Fields" (Set) node likely format the AI-generated content for publishing to platforms like TikTok, Instagram, and Facebook (as suggested by the directory name, though specific social media nodes are not present in the provided JSON, this is a common pattern for such workflows).

Prerequisites/Requirements

To use this workflow, you will need:

  • n8n Instance: A running n8n instance.
  • Telegram Bot: A Telegram bot token and chat ID configured for the Telegram Trigger and Telegram nodes.
  • Google Sheets Account: Credentials for Google Sheets to store video metadata.
  • Google Drive Account: Credentials for Google Drive to store video files or related assets.
  • OpenAI API Key: Credentials for OpenAI to power the OpenAI Chat Model and OpenAI nodes.
  • Google Gemini API Key: Credentials for Google Gemini to power the Google Gemini node.

Setup/Usage

  1. Import the Workflow: Download the provided JSON and import it into your n8n instance.
  2. Configure Credentials:
    • Set up your Telegram Bot credentials for both the Telegram Trigger and Telegram nodes.
    • Configure your Google Sheets credentials for the Google Sheets node.
    • Set up your Google Drive credentials for the Google Drive node.
    • Add your OpenAI API Key credentials for the OpenAI Chat Model and OpenAI nodes.
    • Add your Google Gemini API Key credentials for the Google Gemini node.
  3. Customize Nodes:
    • Adjust the If node's condition to match the specific trigger phrase you want to use in Telegram (e.g., "create video for [topic]").
    • Modify the AI Agent, OpenAI Chat Model, OpenAI, and Google Gemini nodes to fine-tune the AI's behavior and the type of video content it generates.
    • Update the Google Sheets node to specify your spreadsheet ID, sheet name, and the data you want to write.
    • Configure the Google Drive node for the desired folder and file operations.
    • Adjust the Wait node's duration if a delay is needed.
    • Review and modify the Code and Edit Fields nodes to ensure the output is correctly formatted for your intended social media platforms.
  4. Activate the Workflow: Once configured, activate the workflow in n8n.
  5. Initiate from Telegram: Send a message to your Telegram bot that matches the trigger condition configured in the If node to start the video creation process.

Related Templates

Track competitor SEO keywords with Decodo + GPT-4.1-mini + Google Sheets

This workflow automates competitor keyword research using OpenAI LLM and Decodo for intelligent web scraping. Who this is for SEO specialists, content strategists, and growth marketers who want to automate keyword research and competitive intelligence. Marketing analysts managing multiple clients or websites who need consistent SEO tracking without manual data pulls. Agencies or automation engineers using Google Sheets as an SEO data dashboard for keyword monitoring and reporting. What problem this workflow solves Tracking competitor keywords manually is slow and inconsistent. Most SEO tools provide limited API access or lack contextual keyword analysis. This workflow solves that by: Automatically scraping any competitor’s webpage with Decodo. Using OpenAI GPT-4.1-mini to interpret keyword intent, density, and semantic focus. Storing structured keyword insights directly in Google Sheets for ongoing tracking and trend analysis. What this workflow does Trigger — Manually start the workflow or schedule it to run periodically. Input Setup — Define the website URL and target country (e.g., https://dev.to, france). Data Scraping (Decodo) — Fetch competitor web content and metadata. Keyword Analysis (OpenAI GPT-4.1-mini) Extract primary and secondary keywords. Identify focus topics and semantic entities. Generate a keyword density summary and SEO strength score. Recommend optimization and internal linking opportunities. Data Structuring — Clean and convert GPT output into JSON format. Data Storage (Google Sheets) — Append structured keyword data to a Google Sheet for long-term tracking. Setup Prerequisites If you are new to Decode, please signup on this link visit.decodo.com n8n account with workflow editor access Decodo API credentials OpenAI API key Google Sheets account connected via OAuth2 Make sure to install the Decodo Community node. Create a Google Sheet Add columns for: primarykeywords, seostrengthscore, keyworddensity_summary, etc. Share with your n8n Google account. Connect Credentials Add credentials for: Decodo API credentials - You need to register, login and obtain the Basic Authentication Token via Decodo Dashboard OpenAI API (for GPT-4o-mini) Google Sheets OAuth2 Configure Input Fields Edit the “Set Input Fields” node to set your target site and region. Run the Workflow Click Execute Workflow in n8n. View structured results in your connected Google Sheet. How to customize this workflow Track Multiple Competitors → Use a Google Sheet or CSV list of URLs; loop through them using the Split In Batches node. Add Language Detection → Add a Gemini or GPT node before keyword analysis to detect content language and adjust prompts. Enhance the SEO Report → Expand the GPT prompt to include backlink insights, metadata optimization, or readability checks. Integrate Visualization → Connect your Google Sheet to Looker Studio for SEO performance dashboards. Schedule Auto-Runs → Use the Cron Node to run weekly or monthly for competitor keyword refreshes. Summary This workflow automates competitor keyword research using: Decodo for intelligent web scraping OpenAI GPT-4.1-mini for keyword and SEO analysis Google Sheets for live tracking and reporting It’s a complete AI-powered SEO intelligence pipeline ideal for teams that want actionable insights on keyword gaps, optimization opportunities, and content focus trends, without relying on expensive SEO SaaS tools.

Ranjan DailataBy Ranjan Dailata
161

Generate song lyrics and music from text prompts using OpenAI and Fal.ai Minimax

Spark your creativity instantly in any chat—turn a simple prompt like "heartbreak ballad" into original, full-length lyrics and a professional AI-generated music track, all without leaving your conversation. 📋 What This Template Does This chat-triggered workflow harnesses AI to generate detailed, genre-matched song lyrics (at least 600 characters) from user messages, then queues them for music synthesis via Fal.ai's minimax-music model. It polls asynchronously until the track is ready, delivering lyrics and audio URL back in chat. Crafts original, structured lyrics with verses, choruses, and bridges using OpenAI Submits to Fal.ai for melody, instrumentation, and vocals aligned to the style Handles long-running generations with smart looping and status checks Returns complete song package (lyrics + audio link) for seamless sharing 🔧 Prerequisites n8n account (self-hosted or cloud with chat integration enabled) OpenAI account with API access for GPT models Fal.ai account for AI music generation 🔑 Required Credentials OpenAI API Setup Go to platform.openai.com → API keys (sidebar) Click "Create new secret key" → Name it (e.g., "n8n Songwriter") Copy the key and add to n8n as "OpenAI API" credential type Test by sending a simple chat completion request Fal.ai HTTP Header Auth Setup Sign up at fal.ai → Dashboard → API Keys Generate a new API key → Copy it In n8n, create "HTTP Header Auth" credential: Name="Fal.ai", Header Name="Authorization", Header Value="Key [Your API Key]" Test with a simple GET to their queue endpoint (e.g., /status) ⚙️ Configuration Steps Import the workflow JSON into your n8n instance Assign OpenAI API credentials to the "OpenAI Chat Model" node Assign Fal.ai HTTP Header Auth to the "Generate Music Track", "Check Generation Status", and "Fetch Final Result" nodes Activate the workflow—chat trigger will appear in your n8n chat interface Test by messaging: "Create an upbeat pop song about road trips" 🎯 Use Cases Content Creators: YouTubers generating custom jingles for videos on the fly, streamlining production from idea to audio export Educators: Music teachers using chat prompts to create era-specific folk tunes for classroom discussions, fostering interactive learning Gift Personalization: Friends crafting anniversary R&B tracks from shared memories via quick chats, delivering emotional audio surprises Artist Brainstorming: Songwriters prototyping hip-hop beats in real-time during sessions, accelerating collaboration and iteration ⚠️ Troubleshooting Invalid JSON from AI Agent: Ensure the system prompt stresses valid JSON; test the agent standalone with a sample query Music Generation Fails (401/403): Verify Fal.ai API key has minimax-music access; check usage quotas in dashboard Status Polling Loops Indefinitely: Bump wait time to 45-60s for complex tracks; inspect fal.ai queue logs for bottlenecks Lyrics Under 600 Characters: Tweak agent prompt to enforce fuller structures like [V1][C][V2][B][C]; verify output length in executions

Daniel NkenchoBy Daniel Nkencho
601

Automate invoice processing with OCR, GPT-4 & Salesforce opportunity creation

PDF Invoice Extractor (AI) End-to-end pipeline: Watch Drive ➜ Download PDF ➜ OCR text ➜ AI normalize to JSON ➜ Upsert Buyer (Account) ➜ Create Opportunity ➜ Map Products ➜ Create OLI via Composite API ➜ Archive to OneDrive. --- Node by node (what it does & key setup) 1) Google Drive Trigger Purpose: Fire when a new file appears in a specific Google Drive folder. Key settings: Event: fileCreated Folder ID: google drive folder id Polling: everyMinute Creds: googleDriveOAuth2Api Output: Metadata { id, name, ... } for the new file. --- 2) Download File From Google Purpose: Get the file binary for processing and archiving. Key settings: Operation: download File ID: ={{ $json.id }} Creds: googleDriveOAuth2Api Output: Binary (default key: data) and original metadata. --- 3) Extract from File Purpose: Extract text from PDF (OCR as needed) for AI parsing. Key settings: Operation: pdf OCR: enable for scanned PDFs (in options) Output: JSON with OCR text at {{ $json.text }}. --- 4) Message a model (AI JSON Extractor) Purpose: Convert OCR text into strict normalized JSON array (invoice schema). Key settings: Node: @n8n/n8n-nodes-langchain.openAi Model: gpt-4.1 (or gpt-4.1-mini) Message role: system (the strict prompt; references {{ $json.text }}) jsonOutput: true Creds: openAiApi Output (per item): $.message.content → the parsed JSON (ensure it’s an array). --- 5) Create or update an account (Salesforce) Purpose: Upsert Buyer as Account using an external ID. Key settings: Resource: account Operation: upsert External Id Field: taxid_c External Id Value: ={{ $json.message.content.buyer.tax_id }} Name: ={{ $json.message.content.buyer.name }} Creds: salesforceOAuth2Api Output: Account record (captures Id) for downstream Opportunity. --- 6) Create an opportunity (Salesforce) Purpose: Create Opportunity linked to the Buyer (Account). Key settings: Resource: opportunity Name: ={{ $('Message a model').item.json.message.content.invoice.code }} Close Date: ={{ $('Message a model').item.json.message.content.invoice.issue_date }} Stage: Closed Won Amount: ={{ $('Message a model').item.json.message.content.summary.grand_total }} AccountId: ={{ $json.id }} (from Upsert Account output) Creds: salesforceOAuth2Api Output: Opportunity Id for OLI creation. --- 7) Build SOQL (Code / JS) Purpose: Collect unique product codes from AI JSON and build a SOQL query for PricebookEntry by Pricebook2Id. Key settings: pricebook2Id (hardcoded in script): e.g., 01sxxxxxxxxxxxxxxx Source lines: $('Message a model').first().json.message.content.products Output: { soql, codes } --- 8) Query PricebookEntries (Salesforce) Purpose: Fetch PricebookEntry.Id for each Product2.ProductCode. Key settings: Resource: search Query: ={{ $json.soql }} Creds: salesforceOAuth2Api Output: Items with Id, Product2.ProductCode (used for mapping). --- 9) Code in JavaScript (Build OLI payloads) Purpose: Join lines with PBE results and Opportunity Id ➜ build OpportunityLineItem payloads. Inputs: OpportunityId: ={{ $('Create an opportunity').first().json.id }} Lines: ={{ $('Message a model').first().json.message.content.products }} PBE rows: from previous node items Output: { body: { allOrNone:false, records:[{ OpportunityLineItem... }] } } Notes: Converts discount_total ➜ per-unit if needed (currently commented for standard pricing). Throws on missing PBE mapping or empty lines. --- 10) Create Opportunity Line Items (HTTP Request) Purpose: Bulk create OLIs via Salesforce Composite API. Key settings: Method: POST URL: https://<your-instance>.my.salesforce.com/services/data/v65.0/composite/sobjects Auth: salesforceOAuth2Api (predefined credential) Body (JSON): ={{ $json.body }} Output: Composite API results (per-record statuses). --- 11) Update File to One Drive Purpose: Archive the original PDF in OneDrive. Key settings: Operation: upload File Name: ={{ $json.name }} Parent Folder ID: onedrive folder id Binary Data: true (from the Download node) Creds: microsoftOneDriveOAuth2Api Output: Uploaded file metadata. --- Data flow (wiring) Google Drive Trigger → Download File From Google Download File From Google → Extract from File → Update File to One Drive Extract from File → Message a model Message a model → Create or update an account Create or update an account → Create an opportunity Create an opportunity → Build SOQL Build SOQL → Query PricebookEntries Query PricebookEntries → Code in JavaScript Code in JavaScript → Create Opportunity Line Items --- Quick setup checklist 🔐 Credentials: Connect Google Drive, OneDrive, Salesforce, OpenAI. 📂 IDs: Drive Folder ID (watch) OneDrive Parent Folder ID (archive) Salesforce Pricebook2Id (in the JS SOQL builder) 🧠 AI Prompt: Use the strict system prompt; jsonOutput = true. 🧾 Field mappings: Buyer tax id/name → Account upsert fields Invoice code/date/amount → Opportunity fields Product name must equal your Product2.ProductCode in SF. ✅ Test: Drop a sample PDF → verify: AI returns array JSON only Account/Opportunity created OLI records created PDF archived to OneDrive --- Notes & best practices If PDFs are scans, enable OCR in Extract from File. If AI returns non-JSON, keep “Return only a JSON array” as the last line of the prompt and keep jsonOutput enabled. Consider adding validation on parsing.warnings to gate Salesforce writes. For discounts/taxes in OLI: Standard OLI fields don’t support per-line discount amounts directly; model them in UnitPrice or custom fields. Replace the Composite API URL with your org’s domain or use the Salesforce node’s Bulk Upsert for simplicity.

Le NguyenBy Le Nguyen
942