#Connecting with powerpoint

1 messages · Page 1 of 1 (latest)

knotty blade
#

i have setup a cron job where i have shared the RSS Feed URLS it willl run weekly once and fetch the content and summarize that post that i want to add that summarization to power point how to add the skill/tool to make it achievable explain step by step on how to do that ?

lunar yewBOT
#

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:

#
---
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-pptx inside 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):

#

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:

  1. A new .pptx posted weekly (easiest/recommended), or
  2. 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.

knotty blade
#

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

lunar yewBOT
#

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:

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 .pptx on 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:

  1. Discord attachment in a channel, or
  2. 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.

knotty blade
#

Upload to OneDrive/SharePoint (Microsoft 365) (or Google Drive)
this approach and what all apis are required

lunar yewBOT
#

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_access
  • Files.ReadWrite
  • Sites.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.file or drive

Upload + share link flow

  • Upload file: files.create (or files.update to 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)

  1. Cron job generates the .pptx on the VPS (e.g. with python-pptx)
#
  1. Cron calls your custom skill → skill runs an upload script via bash
  2. Script uploads to SharePoint/OneDrive or Google Drive
  3. Script prints the share link
  4. Cron posts that link to your team channel (Discord/Slack/etc)

OpenClaw docs you’ll use:


Quick questions (so I can give you an exact “do this, paste that” recipe)

  1. Microsoft: is this Microsoft 365 work/school tenant (SharePoint Online / OneDrive for Business), or a personal OneDrive?
  2. Google: are you on Google Workspace (company), or personal Gmail Drive?
  3. 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”.)
knotty blade
#

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

lunar yewBOT
#

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:

  1. Generate a .pptx file yourself (from a template) and then
  2. 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:

#

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) or
  • pptxgenjs (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 exec to 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)

  1. Do you want to create a new deck each week, or append slides to an existing deck?
  2. 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).

knotty blade
#

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

lunar yewBOT
#

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:

  1. Fetch all items from RSS_FEEDS from the last TIME_WINDOW_DAYS days.
  2. De-duplicate items across feeds (same canonical URL = same item). If an item has no URL, de-dupe by (title + published date).
  3. 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)
  1. 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.
  2. Save deck locally using FILENAME_FORMAT (based on current week/year).
  3. Upload the PPTX to SHAREPOINT_TARGET (SITE/DRIVE/FOLDER_PATH).
  4. Ensure it is accessible org-wide: