#Connecting with powerpoint
1 messages · Page 1 of 1 (latest)
To get a weekly RSS summary into PowerPoint, OpenClaw won’t magically “edit PPT” by itself — you add that capability by creating a custom skill that tells the agent to run a small script (via the built-in bash tool) that generates/updates a .pptx, then you attach it in the cron output.
Below is the most reliable approach (generate a .pptx each week and post it to Discord). If you instead need to append slides to an existing deck in OneDrive/SharePoint, tell me and I’ll outline the Microsoft Graph variant.
Goal (recommended)
Cron job runs weekly → fetch RSS → summarize → generate weekly-summary.pptx → cron delivers it to Discord as an attachment.
Step 1) Create a custom skill folder
Skills live in your workspace, usually:
~/.openclaw/workspace/skills/
Create:
~/.openclaw/workspace/skills/rss-to-pptx/
Docs:
Step 2) Add SKILL.md
Create:
~/.openclaw/workspace/skills/rss-to-pptx/SKILL.md
Example:
---
name: rss-to-pptx
description: Generate a PowerPoint (.pptx) from weekly RSS summaries.
---
# RSS → PowerPoint
When the user (or a cron job) has weekly RSS summaries, do this:
1) Prepare a clean outline:
- Title
- Date range
- For each feed item: headline + 3-6 bullets
2) Call the generator script:
Use the `bash` tool to run:
python3 "{baseDir}/make_pptx.py" \
--title "Weekly RSS Summary" \
--out "/tmp/weekly-summary.pptx"
3) Pass the slide content to the script via STDIN as JSON.
4) After generation, respond with a `MEDIA:` line so the file is sent:
MEDIA:/tmp/weekly-summary.pptx
Key detail: {baseDir} resolves to the skill’s folder path (so you can refer to scripts you ship with the skill).
Step 3) Add the PowerPoint generator script (make_pptx.py)
Create:
~/.openclaw/workspace/skills/rss-to-pptx/make_pptx.py
Use python-pptx (simple + common). Pseudocode structure:
- Read JSON from stdin:
{ "slides": [ { "title": "...", "bullets": [".."] } ] } - Create deck
- Add a title slide + content slides
- Save to
--out
You’ll also need to install deps on the Gateway host:
python3 -m pip install python-pptx
If your agent runs in a sandboxed container, you either:
- install
python-pptxinside the container (preferred via sandbox setup), or - run that job unsandboxed.
(If you tell me whether you have sandboxing enabled, I can give the exact recommended setup.)
Step 4) Make cron deliver the .pptx to Discord
In an isolated cron job, make sure the job’s prompt explicitly says to output the MEDIA: line after creating the file.
Cron docs:
Attachment rule (important):
- Outbound attachments must include a line like:
MEDIA:/path/to/file.pptx
Docs: https://docs.openclaw.ai/help/faq#my-skill-generated-an-imagepdf-but-nothing-was-sent
If you want it posted into this channel, cron delivery targets for Discord are typically channel:<id>.
Step 5) Test once manually
Run the job immediately and inspect output:
openclaw cron run <jobId> --force
openclaw cron runs --id <jobId> --limit 20
You should see the .pptx attached in the Discord message.
Quick clarifying question (so I point you to the right implementation)
Do you want:
- A new
.pptxposted weekly (easiest/recommended), or - Append slides into an existing PowerPoint deck in OneDrive/SharePoint (doable, but you’ll want a Microsoft Graph script + auth)?
If you answer that + where you want the file to end up (Discord upload vs OneDrive folder path), I’ll tailor the exact skill + script interface.
in this approach the ppt will be inside virtual macine right if i am using vps for hosting i want it to be visible to all people in team
It’ll be generated on the machine where the Gateway runs (your VPS), yes — but that does not mean it’s “stuck inside the VM”.
You have 2 good ways to make it visible to your whole team:
Option A (simplest): Post the .pptx to a shared Discord channel every week
- The cron job runs on the VPS, creates
weekly-summary.pptx, and the bot uploads it to Discord. - Everyone in the channel can download/open it.
Key points:
- Don’t write it to
/tmpif you want to keep history. Save under your workspace, e.g.~/.openclaw/workspace/out/weekly-summary-YYYY-MM-DD.pptx. - The agent must output a line like:
MEDIA:/path/to/file.pptx
(that’s how OpenClaw knows to attach the file)
Docs: https://docs.openclaw.ai/help/faq#my-skill-generated-an-imagepdf-but-nothing-was-sent
And make sure your cron job is an isolated job with delivery to the Discord channel (so it posts there), docs:
https://docs.openclaw.ai/automation/cron-jobs
Option B (more “team doc”): Upload to a shared drive (OneDrive/SharePoint/Google Drive) + post the link
- Cron generates the
.pptxon the VPS - Then a script uploads it to your team’s shared folder
- Bot posts the link in Discord
This is better if you want:
- PowerPoint Online viewing
- Versioning in a shared folder
- A “single canonical deck” people always open
If you tell me which “team visibility” you want:
- Discord attachment in a channel, or
- Upload to OneDrive/SharePoint (Microsoft 365) (or Google Drive)
…I’ll give the exact step-by-step cron prompt + the minimal skill script flow for that target.
Upload to OneDrive/SharePoint (Microsoft 365) (or Google Drive)
this approach and what all apis are required
For OneDrive/SharePoint or Google Drive, OpenClaw doesn’t have a built-in “upload to cloud drive” tool yet — you do it by adding a custom skill that runs a small upload script (Python/Node or rclone) from your VPS cron job.
Below are the APIs + credentials you’ll need, and the typical end-to-end flow.
1) Microsoft 365 (OneDrive / SharePoint) — what APIs are required?
Required API
- Microsoft Graph API (this is the official API for both OneDrive and SharePoint)
- Auth is Azure AD OAuth 2.0 (Microsoft Entra ID)
You need to create an Azure “App Registration”
In Azure Portal → App registrations:
- Create app → you get:
- Tenant ID
- Client ID
- Client Secret (or certificate)
Permissions (scopes) you typically need
You choose either Delegated (user login) or Application (server-to-server).
A) Application permissions (recommended for a headless VPS cron job)
- For SharePoint libraries: usually one of:
Sites.ReadWrite.All(broad)- or better (least privilege):
Sites.Selected(then you grant the app access to only the specific site)
- For OneDrive (business): often
Files.ReadWrite.All(broad)
Then you must do Admin consent for the tenant.
B) Delegated permissions (user-based OAuth)
Useful if you’re using a personal Microsoft account or you don’t have tenant admin access.
Typical scopes:
offline_accessFiles.ReadWriteSites.ReadWrite.All(if touching SharePoint)
This requires an OAuth login once to obtain a refresh token (store it securely on the VPS).
Upload + link creation endpoints you’ll call
- Upload small file:
PUT /drives/{driveId}/items/{parentId}:/{filename}:/content - Upload large file:
POST /.../createUploadSession(recommended for PPTX) - Create a shareable link (so team can view):
POST /drive/items/{itemId}/createLink
Net: Microsoft Graph API + Azure AD OAuth is the core requirement.
2) Google Drive — what APIs are required?
Required API
- Google Drive API (v3) from Google Cloud Console
You need a Google Cloud Project
Google Cloud Console:
- Create project
- Enable Google Drive API
- Create credentials:
A) Service Account (best for server cron jobs)
- Create a Service Account
- Download JSON key
- Share the destination folder (or Shared Drive) with the service account’s email
- Scopes typically:
https://www.googleapis.com/auth/drive(broad)- or
.../drive.file(more limited, depends on your workflow)
B) OAuth Client (installed/web app)
- Run OAuth once to get a refresh token
- Store token on VPS
- Scopes: usually
drive.fileordrive
Upload + share link flow
- Upload file:
files.create(orfiles.updateto overwrite) - Optional: set permissions:
permissions.create(to make it viewable by your org/team) - Link:
https://drive.google.com/file/d/<fileId>/view
Net: Google Drive API + Google OAuth/service-account auth is the core requirement.
3) How this plugs into OpenClaw (high-level steps)
- Cron job generates the
.pptxon the VPS (e.g. withpython-pptx)
- Cron calls your custom skill → skill runs an upload script via
bash - Script uploads to SharePoint/OneDrive or Google Drive
- Script prints the share link
- Cron posts that link to your team channel (Discord/Slack/etc)
OpenClaw docs you’ll use:
- Skills creation: https://docs.openclaw.ai/tools/creating-skills
- Skills config / env injection (for secrets): https://docs.openclaw.ai/tools/skills-config
- Cron jobs: https://docs.openclaw.ai/automation/cron-jobs
Quick questions (so I can give you an exact “do this, paste that” recipe)
- Microsoft: is this Microsoft 365 work/school tenant (SharePoint Online / OneDrive for Business), or a personal OneDrive?
- Google: are you on Google Workspace (company), or personal Gmail Drive?
- Do you want to create a new PPTX each week, or overwrite one fixed file in the shared folder? (Overwriting is simplest for “one canonical deck”.)
if i want to connect to powerpoint api and that should be visible to all people of our organization is that possible to achieve that can you explain abit about this thing
Yes—this is possible, but the key detail is: there isn’t really a “PowerPoint API” that you talk to directly to edit slides the way you edit a Google Doc. In practice you usually do one of these:
- Generate a
.pptxfile yourself (from a template) and then - Upload/replace it in SharePoint/OneDrive/Teams using Microsoft Graph
…and then it’s “visible to the whole organization” via SharePoint permissions.
What “visible to everyone in the org” usually means
You publish the resulting deck to a shared location:
- a SharePoint document library, or
- a Teams channel’s “Files” (which is SharePoint under the hood)
Everyone in the org can view it if that SharePoint location is set to “Everyone” (or whatever group).
Auth models (this is the important part)
A) Org-wide bot (recommended): App-only (service principal)
- You create an Entra ID (Azure AD) App Registration
- Grant it Application permissions to write files to SharePoint
- An M365 admin does Admin consent
- OpenClaw uses that app’s credential (client secret or certificate) to upload the PPTX on schedule
- Result: fully automated, no per-user login needed
B) Per-user: Delegated permissions
- Each user signs in
- Upload happens “as that user”
- Harder to run as a weekly cron unless you build a token refresh flow tied to a single service user
If your goal is “weekly job updates one shared deck”, A is what you want.
How this maps to OpenClaw (skills vs tools)
- A Skill is mostly instructions that teach the agent how to do something.
- If you need a new capability like “upload PPTX to Graph”, you typically implement a tool via a plugin (or simpler: call a script via
exec).
Docs:
- Skills overview: https://docs.openclaw.ai/tools/skills
- Creating skills: https://docs.openclaw.ai/tools/creating-skills
- Plugins (if you want a real first-class tool): https://docs.openclaw.ai/tools/plugin
Practical step-by-step approach (works well)
Step 1) Pick a shared destination
Decide where the deck lives:
- SharePoint site + folder (best for “org visible”)
- Teams channel files folder
Step 2) Create an Entra ID app (app-only)
In Azure/Entra:
- App Registration
- Add Graph Application permissions (exact scopes depend on your setup; many orgs use SharePoint site-scoped permissions if possible, otherwise broader like Files/Sites)
- Admin consent
- Create a secret/cert
Step 3) Generate the PPTX
Simplest: generate a fresh PPTX weekly from a template using:
python-pptx(Python) orpptxgenjs(Node)
Step 4) Upload/replace via Microsoft Graph
Upload the generated PPTX to the SharePoint/OneDrive path (Graph driveItem upload). This is what makes it visible to everyone (because SharePoint permissions handle that).
Step 5) Wire into OpenClaw cron
Your cron’s agent prompt becomes something like:
- fetch RSS
- summarize
- call your “create_pptx + upload” tool/script
Implementation choices:
- Quick + easy: skill instructs agent to use
execto run a script that builds+uploads - Clean + reusable: write a plugin that registers a tool (e.g.
powerpoint_publish) and ship a skill that explains how/when to call it
Two quick questions (so the next steps are precise)
- Do you want to create a new deck each week, or append slides to an existing deck?
- Where should the deck live: SharePoint site or Teams channel files?
If you answer those, I can outline the exact recommended architecture (script vs plugin, template strategy, and the minimal permission model you should aim for).
you help me create a prompt i want to have new slides every week and the powerpoint should be shared to organiation and whole people in the organization should be able to access them
Here’s a copy/paste prompt you can use for your weekly cron run. Fill in the placeholders in the top “CONFIG” block.
Weekly “RSS → PowerPoint → SharePoint (Org-wide)” prompt
CONFIG (edit these):
- RSS_FEEDS:
- <feed_url_1>
- <feed_url_2>
- <feed_url_3>
- TIME_WINDOW_DAYS: 7
- PPTX_TITLE: "Weekly RSS Digest"
- TEMPLATE_PATH: "<path-to-your-pptx-template>" (optional, but recommended)
- SHAREPOINT_TARGET:
- SITE: "<sharepoint-site-id-or-url>"
- DRIVE: "<document-library-drive-id>" (or “default” if your tool supports it)
- FOLDER_PATH: "/Shared Documents/Weekly Digests/"
- PUBLISH_MODE: "new-file-each-week" (recommended)
- FILENAME_FORMAT: "Weekly-RSS-Digest-YYYY-WW.pptx"
- ORG_ACCESS_RULE: "All internal users in the organization can view"
PROMPT:
You are running a scheduled weekly job.
Goal: Create a NEW PowerPoint deck each week containing summaries of items from the RSS feeds, then upload it to the organization’s SharePoint folder so everyone in the organization can access it.
Steps:
- Fetch all items from RSS_FEEDS from the last TIME_WINDOW_DAYS days.
- De-duplicate items across feeds (same canonical URL = same item). If an item has no URL, de-dupe by (title + published date).
- For each item, extract:
- Title
- Source/feed name
- Published date
- URL
- Short 3–6 bullet summary (clear, non-hallucinated; only use the article content available)
- “Why it matters” (1–2 bullets)
- Build a PPTX:
- Slide 1: Title slide with PPTX_TITLE + date range (last 7 days)
- Slide 2: Agenda / Top themes (5–8 bullets across all items)
- Then: 1 slide per item (or 2 if needed):
- Title
- Source + date
- Summary bullets
- Why it matters bullets
- URL (as clickable link)
- Final slide: “Links” (all URLs)
Use TEMPLATE_PATH if available for consistent styling.
- Save deck locally using FILENAME_FORMAT (based on current week/year).
- Upload the PPTX to SHAREPOINT_TARGET (SITE/DRIVE/FOLDER_PATH).
- Ensure it is accessible org-wide: