n8n-nodes-upload-post 0.5.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -8
- package/dist/nodes/UploadPost/NetworkOperations.d.ts +14 -0
- package/dist/nodes/UploadPost/NetworkOperations.js +1322 -0
- package/dist/nodes/UploadPost/NetworkOperations.js.map +1 -0
- package/dist/nodes/UploadPost/UploadPost.node.js +881 -21
- package/dist/nodes/UploadPost/UploadPost.node.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -65,6 +65,13 @@ The node provides the following operations grouped for clarity:
|
|
|
65
65
|
- **Threads**: Long text as single post option.
|
|
66
66
|
- **Reddit**: Subreddit selection, flair ID.
|
|
67
67
|
|
|
68
|
+
- **Upload Document**: LinkedIn document posts (PDF, PPT/PPTX, DOC/DOCX) and, on Telegram, any file up to 50 MB (audio, voice, sticker, GIF, video note...) with **Telegram Options > Send As**.
|
|
69
|
+
|
|
70
|
+
- **Paid Partnership** (Upload Photo(s), Video and Text): one switch for sponsored posts, mapped to each network's native label (TikTok branded content, YouTube paid promotion, X paid partnership). Facebook and Pinterest also need **Facebook Sponsor ID** / **Pinterest Sponsor ID** (the sponsor's Page / account). Networks without a label publish without it and the response carries a warning; a network-specific field always wins. TikTok refuses it with the Only Me privacy level (`commercial_disclosure_privacy_conflict`) and drafts do not carry it.
|
|
71
|
+
- **Telegram Options** (collection): text and caption override, first comment (as a reply by default), pin after publishing (silent unless Pin Notify), reply to a message (with quote), inline URL buttons (Reply Markup), message effect, link preview options, polls, locations (live too), venues, contacts, dice and rich messages (Upload Text), video cover / thumbnail / start time, album with extra Media URLs, Send As (animation, video note, live photo, audio, voice, sticker, document), caption overflow (split), paid media in Telegram Stars, Send By URL. Names and JSON objects follow the Telegram Bot API.
|
|
72
|
+
- **Bluesky Options** (collection): Tags (up to 8, not shown in the text), Created At (import older posts), Thread Overflow (long text continues as replies), GIF As Video, Captions (WebVTT, video), Video Presentation (GIF-style video).
|
|
73
|
+
- **Google Business Options** (collection): Alert Type, Upload To Gallery, Multiple Media (up to 10 photos), recurring EVENT/OFFER posts (Recurrence, days, day of month, week occurrence, end) and Google's own Scheduled Time.
|
|
74
|
+
|
|
68
75
|
### Status & History Actions
|
|
69
76
|
- **Get Upload Status**: Check the status/result of an async upload by `request_id`.
|
|
70
77
|
- Parameters: Request ID.
|
|
@@ -72,10 +79,11 @@ The node provides the following operations grouped for clarity:
|
|
|
72
79
|
- Parameters: Page (default 1), Limit (default 20). Limit can be 20, 50, or 100.
|
|
73
80
|
- **Get Analytics**: Retrieve aggregated profile analytics.
|
|
74
81
|
- Parameters: Profile Username, Platforms (required — at least one), Facebook Page ID (required when Facebook is selected), LinkedIn Page URN (optional).
|
|
75
|
-
- Supported: Facebook, Instagram, LinkedIn, Pinterest, Reddit, Threads, TikTok, X, YouTube. Analytics are not available for
|
|
82
|
+
- Supported: Facebook, Instagram, LinkedIn, Pinterest, Reddit, Telegram, Threads, TikTok, X, YouTube. Telegram returns subscribers or members, reactions and active boosts (the Bot API has no views). Analytics are not available for Discord.
|
|
76
83
|
- **Get Post Analytics**: Per-post metrics for an upload, by `request_id`.
|
|
77
84
|
- Parameters: Request ID, Platform (optional filter).
|
|
78
|
-
- On TikTok, `post_metrics` also carries `retention`, `impression_sources`, `audience_types`, `new_followers`, `reach` and the watch times
|
|
85
|
+
- On TikTok, `post_metrics` also carries `retention`, `impression_sources`, `audience_types`, `new_followers`, `reach` and the watch times, plus `original_publish_id`.
|
|
86
|
+
- TikTok drafts (`MEDIA_UPLOAD`): metrics arrive once the creator publishes the draft as **public** from the TikTok app (TikTok gives no post ID for private posts). Until then `post_metrics_error` says it is still in the inbox; after 30 days without a post, read it with **Get Post Analytics by Platform ID**.
|
|
79
87
|
- **Get Post Analytics by Platform ID**: Per-post metrics for a post published outside Upload-Post.
|
|
80
88
|
- Parameters: Platform Post ID, Platform, Profile Username.
|
|
81
89
|
- **Get Cached Post Analytics**: Replays per-post metrics already fetched, instead of querying the platforms again, so it is not subject to the live analytics rate limit (100 requests / 5 minutes). Only contains posts previously fetched through a live per-post endpoint; there is no background refresh, so captured_at is the last time that post was read live.
|
|
@@ -90,15 +98,42 @@ The node provides the following operations grouped for clarity:
|
|
|
90
98
|
- Parameters: Profile Username.
|
|
91
99
|
- **Get Media**: List published media for a connected network.
|
|
92
100
|
- **Get Google Business Locations**: List locations for a Google Business Profile.
|
|
101
|
+
- **Resolve LinkedIn Organization**: Turn any LinkedIn company, showcase or school Page (URL, vanity name, numeric ID or `urn:li:organization:ID`) into `{urn, id, name, vanity_name, mention}`.
|
|
102
|
+
- Parameters: User Identifier (its LinkedIn connection makes the lookup), LinkedIn Page.
|
|
103
|
+
- Paste `mention` (`@[Exact Name](urn:li:organization:ID)`) into the LinkedIn post text. LinkedIn only links a company mention whose name matches the Page **exactly, capitals included**; otherwise it is published as plain text. `@company-vanity` in the post text is also resolved on publish.
|
|
104
|
+
- Person profiles (`/in/…`) cannot be resolved (`400 linkedin_person_not_resolvable`). Live lookups count against 60 per hour per account; cached Pages (`cached: true`) are free.
|
|
93
105
|
- **Get TikTok Trending Music / Search TikTok Music / Get TikTok Locations / Get TikTok Publishing Settings**: TikTok discovery helpers (music IDs, location IDs, creator capabilities).
|
|
94
106
|
|
|
95
107
|
### Post Actions
|
|
96
108
|
- **Retry Post**: Re-enqueue failed platforms of an upload without re-uploading media (`request_id` or `job_id`).
|
|
97
|
-
- **Unpublish Post**: Delete a live post. Not available for Instagram, TikTok or Threads.
|
|
98
|
-
- **Edit Post**: Update caption/metadata on a live post.
|
|
99
|
-
- **Repost**: Repost on LinkedIn or
|
|
109
|
+
- **Unpublish Post**: Delete a live post. Not available for Instagram, TikTok or Threads. Telegram: **Telegram Delete All Messages** removes every message of the post (album items, caption rest, first comment), not only Post ID.
|
|
110
|
+
- **Edit Post**: Update caption/metadata on a live post. Telegram: new text or caption, **Telegram Action** (pin, unpin, stop poll, stop live location); Google Business: Message becomes the post summary. **Extra Fields (JSON)** passes any other documented field (buttons, media replacement, call to action...).
|
|
111
|
+
- **Repost**: Repost on LinkedIn, X or Threads, or forward / copy a Telegram post (**Telegram Mode**, **Telegram Target Chat ID**, **Telegram All Messages**; Message is the new caption of a copy).
|
|
100
112
|
- **Save Pin**: Save a Pinterest pin to a board.
|
|
101
113
|
|
|
114
|
+
### Queue & Best Time
|
|
115
|
+
- **Get Best Times**: Best hours to publish for a connected account (Bluesky, Facebook, Instagram, LinkedIn, Pinterest, Threads, TikTok, YouTube), with `source` (`audience_activity`, `account_posts`, `upload_post_history`, `none`) and `confidence`.
|
|
116
|
+
- Parameters: Profile, Platform, Time Zone, Top Hours, Refresh; LinkedIn Page URN / Facebook Page ID.
|
|
117
|
+
- **Get Queue Settings / Get Queue Preview / Get Next Queue Slot**: read the profile queue (`slots_mode`, `auto_slots`, `effective_slots`).
|
|
118
|
+
- **Update Queue Settings**: **Slots Mode = Automatic** (`slots=auto`) fills the queue with the best hours of the profile's networks (Automatic Slots per Day, Automatic Slots Platforms, Refresh); **Fixed** goes back to fixed slots (Fixed Slots JSON). Also Time Zone, Days of Week and Max Posts per Slot. Posts already scheduled do not move.
|
|
119
|
+
|
|
120
|
+
### Telegram Actions
|
|
121
|
+
Your own bot in the connected chat, group or channel.
|
|
122
|
+
- **Get Chat Info / Update Chat Info**: details, subscribers or members and administrators; change title, description and (Extra Fields) permissions, slow mode...
|
|
123
|
+
- **Get Boosts**, **Get Member** (one member, or the administrators), **Moderate Member** (ban, unban, restrict, promote, demote, custom title; ban/promote/demote need **Confirm**).
|
|
124
|
+
- **Create Invite Link / Revoke Invite Link** (revoke needs Confirm).
|
|
125
|
+
- **Get Bot Profile / Update Bot Profile**, **Get Bot Commands / Set Bot Commands**.
|
|
126
|
+
|
|
127
|
+
### Bluesky Actions
|
|
128
|
+
- **Get Profile** (one or several handles/DIDs, or the connected account), **Get Notifications**, **Get Unread Count**, **Search Posts**, **Search Accounts**.
|
|
129
|
+
- **List Drafts / Create Draft / Delete Draft**: drafts shown in the Bluesky app (text only; delete needs **Confirm**).
|
|
130
|
+
|
|
131
|
+
### Google Business Actions
|
|
132
|
+
- **List Posts / Get Post**: the location's posts. Edit them with Post Action > Edit Post and delete them with Unpublish Post (platform Google Business).
|
|
133
|
+
- **List Reviews / Get Review**.
|
|
134
|
+
- **Get Performance** (daily metrics for a date range) and **Get Search Keywords** (monthly).
|
|
135
|
+
- **Get Location Info / Update Location Info**: `edit_mode` legacy (default) or strict (title, address, categories, open status; Dry Run and Confirm), Extra Fields for hours and the rest.
|
|
136
|
+
|
|
102
137
|
### Scheduled Posts
|
|
103
138
|
- **List Scheduled Posts**: Lists future scheduled jobs.
|
|
104
139
|
- **Cancel Scheduled Post**: Cancels a scheduled job by its Job ID.
|
|
@@ -124,13 +159,21 @@ The node provides the following operations grouped for clarity:
|
|
|
124
159
|
- **Validate JWT (for platform integration)**: Validate a connection token from your backend.
|
|
125
160
|
- Parameters: JWT token (password field).
|
|
126
161
|
- The API response is returned as-is; its `profile` object also carries the `ui_labels` map configured for that profile.
|
|
162
|
+
- **Get / Update Notification Preferences, Test Notifications**: Webhook URL and events (`upload_completed`, `social_account.*`, `dm_received`, `comment_received`).
|
|
163
|
+
- Webhooks are delivered **at least once**: a timeout, connection error, `5xx`, `408` or `429` is retried up to 6 attempts over about 8.5 hours (+1 min, +5 min, +30 min, +2 h, +6 h) with the same body and the same `X-Upload-Post-Delivery` header, so deduplicate by that header. `X-Upload-Post-Attempt` carries the attempt number. Other `4xx` answers are final.
|
|
164
|
+
- **List Webhook Deliveries**: The last 7 days of outgoing webhooks, newest first, with status (`pending`, `delivered`, `failed`, `cancelled`), attempts and the HTTP code your endpoint answered.
|
|
165
|
+
- Parameters: Event, Status, Request ID, Job ID, Profile Username (all optional filters), Page Size (1-100, default 20), Page (1-50), Include Payload.
|
|
166
|
+
- **Get Webhook Delivery**: One delivery with its attempts and the exact payload that was sent.
|
|
167
|
+
- **Redeliver Webhook**: Send a logged delivery again now, to the webhook URL configured today. It is a new delivery with its own ID (`X-Upload-Post-Redelivery-Of` names the original). `409` when there is no webhook, event subscription or allowed URL to send it to.
|
|
127
168
|
|
|
128
169
|
### Comment Actions
|
|
129
170
|
The comment endpoints are shaped like the rest of the API: **one endpoint per question, with a `platform` parameter** that says which connected network is being asked. There is no endpoint per social network.
|
|
130
|
-
- **Get Post Comments**: Comments on a post from the network given by `Platform
|
|
131
|
-
- Parameters: User Identifier, Platform, Post ID or URL, Comment ID (optional).
|
|
171
|
+
- **Get Post Comments**: Comments on a post from the network given by `Platform`.
|
|
172
|
+
- Parameters: User Identifier, Platform, Post ID or URL, Comment ID (optional), Page Size (optional, 1-50), After (Cursor) (optional, the `pagination.next_cursor` of the previous page).
|
|
132
173
|
- Instagram and Facebook accept the media ID or the post URL, YouTube the video ID, LinkedIn the post URN, TikTok the video ID. TikTok has no URL lookup, so pasting a URL fails with a descriptive error instead of an upstream one.
|
|
133
|
-
- Fill **Comment ID** to get the replies to that comment instead of the top-level comments of the post. It is the same question with one parameter more, not a separate operation.
|
|
174
|
+
- Fill **Comment ID** to get the replies to that comment instead of the top-level comments of the post. It is the same question with one parameter more, not a separate operation. Replies work on Instagram, Facebook, LinkedIn (company Pages), TikTok, Threads and YouTube; X and Bluesky answer `platform_not_supported`.
|
|
175
|
+
- Instagram: the numeric comment ID. Facebook: the `{post}_{comment}` ID; Post ID is still needed (its `{page_id}_` prefix picks the Page). LinkedIn: preferably the `comment_urn` from the listing; a bare ID is only looked up among the post's first 250 comments (`404 linkedin_comment_not_found` otherwise).
|
|
176
|
+
- Errors: `400 invalid_comment_id` (wrong format), `404 comment_not_found` (Instagram/Facebook), `403 linkedin_personal_not_supported` / `linkedin_page_access_denied`. A comment without replies is a `200` with an empty list.
|
|
134
177
|
- **Comment Action**: Moderate one comment — hide, unhide, like, unlike, pin or unpin it.
|
|
135
178
|
- Parameters: User Identifier, Platform, Comment ID, Action, Post ID (shown only when it is needed).
|
|
136
179
|
- Each action carries its own inverse, so there is no separate toggle: `hide`/`unhide`, `like`/`unlike`, `pin`/`unpin`.
|
|
@@ -140,6 +183,22 @@ The comment endpoints are shaped like the rest of the API: **one endpoint per qu
|
|
|
140
183
|
- **Public Reply to Comment**: Public reply under the comment. Instagram only.
|
|
141
184
|
- **Create Comment**: Top-level comment or reply (Instagram replies only; TikTok always needs the video ID).
|
|
142
185
|
- **Delete Comment**: Delete a comment you own or that is on your post.
|
|
186
|
+
- **Create / List / Pause / Resume / Delete AutoDM Rule** (Instagram, account-wide): one rule answers with a DM every comment on any post or reel of the account, present and future, plus story replies, story mentions and DMs with a keyword. Rules never expire, do not count towards the 2 monitors per profile per day, and work from Meta webhooks only.
|
|
187
|
+
- Create parameters: User Identifier, Reply Message (max 1,000 characters; 640 with buttons), Triggers (`comment`, `story_reply`, `story_mention`, `dm_keyword`), Trigger Keywords (comma-separated, up to 20; required for `dm_keyword`), Buttons (up to 3), Per-User Cooldown (whole hours, 0-720, default 24; story and DM triggers always wait at least 24 h).
|
|
188
|
+
- Up to 10 rules per Instagram account. A post with its own monitor is answered by that monitor only. Pace: 25 DMs per account every 15 minutes plus the plan's daily DM allowance; what does not fit is queued for up to 24 hours.
|
|
189
|
+
- List shows each rule's `status` (`active`, `paused`, `reconnect_required`, `stopped` with `stop_reason`, `disabled`), `stats`, `pending` and `webhook` (`receiving_events`, `last_event_at`, `hint`): if Meta stops sending events to an account, you see it there.
|
|
190
|
+
- Errors: `502 webhook_subscription_failed` (reconnect Instagram), `409 duplicate_rule` / `rule_limit_reached` / `rule_creation_in_progress` / `rule_stopped`, `503 account_rules_disabled`.
|
|
191
|
+
|
|
192
|
+
### Direct Message Actions
|
|
193
|
+
- **Send DM**: Send a direct message from the Instagram or Bluesky account of a profile, or a sender action.
|
|
194
|
+
- Parameters: User Identifier, Platform, Recipient ID, Message, Reply To, Sender Action, Message ID, Reaction; Instagram: Buttons, Extra Fields (JSON: `attachments`, `quick_replies`, `generic_template`); Bluesky: Conversation ID, Share Bluesky Post URL.
|
|
195
|
+
- Instagram: the person must have written to the account in the last 24 hours. Sender actions: `typing_on`, `typing_off`, `mark_seen`, `react`, `unreact`.
|
|
196
|
+
- Bluesky: the account must be connected with an app password created with **"Allow access to your direct messages"** (otherwise `403 bluesky_dm_scope_missing`: create one in Bluesky > Settings > Privacy and security > App passwords and reconnect). Recipient ID is a handle, DID or profile link. Messages up to 1,000 characters, up to 10 clickable `@mentions`; a Bluesky post can be shared; no images or files. Sender actions: `mark_read`, `react`/`unreact` (a single emoji), `delete` (for you), `accept`, `mute`, `unmute`, `leave`.
|
|
197
|
+
- Bluesky `504 bluesky_send_unconfirmed` (`retryable: false`) means the DM may have gone out: read the conversation before sending again. `403 bluesky_recipient_unavailable` carries the `reason` and spends no quota.
|
|
198
|
+
- **List Conversations**: DM conversations newest first, with participants and recent messages.
|
|
199
|
+
- Parameters: User Identifier, Platform, Page Size, Messages per Conversation, Cursor, Since, Participant ID; Bluesky: Conversation ID, Messages Cursor, Status (`request`/`accepted`), Read State (`unread`).
|
|
200
|
+
- Bluesky returns at most 25 conversations per page; when a page takes too long the rest come with only their latest message and `messages_truncated: true`.
|
|
201
|
+
- New DMs can also reach you as the `dm_received` webhook (Bluesky is checked every 5 minutes).
|
|
143
202
|
|
|
144
203
|
### Insight Actions
|
|
145
204
|
Two more questions with a `platform` parameter, not two TikTok endpoints. A network that cannot answer a question replies with `platform_not_supported` and the list of the ones that can; today that network is TikTok, whose profile needs the `profile_analytics` capability (see the `capabilities` array returned by **List Users**).
|
|
@@ -192,6 +251,7 @@ If you saw duplicate posts on an older version of this node, upgrade: versions b
|
|
|
192
251
|
- **Link (Text)**: URL for link preview in text posts.
|
|
193
252
|
|
|
194
253
|
#### LinkedIn
|
|
254
|
+
- **Mentions**: write `@[Exact Page Name](urn:li:organization:ID)`, `@[Name](urn:li:person:ID)` or `@company-vanity` in the LinkedIn post text (put them in the description for photos and videos). Get the URN and exact name with **Resolve LinkedIn Organization**.
|
|
195
255
|
- **Page Selection**: Dynamic picker for organization pages ("Me" option for personal profiles).
|
|
196
256
|
- **Visibility (Photos/Video)**: Public, Connections, Logged In, Container (video only).
|
|
197
257
|
- **Video Description**: User commentary for video posts.
|
|
@@ -273,6 +333,9 @@ If you saw duplicate posts on an older version of this node, upgrade: versions b
|
|
|
273
333
|
#### Reddit
|
|
274
334
|
- **Text Options**: Subreddit (without r/), flair ID for post categorization.
|
|
275
335
|
|
|
336
|
+
#### Bluesky
|
|
337
|
+
- **Images**: 4 per post by default (more are dropped with a warning). Turn on **Bluesky Gallery** (Upload Photo(s)) to publish up to 10 images as a gallery; with more than 10 the first 10 are published and the response carries a warning.
|
|
338
|
+
|
|
276
339
|
### Validation Rules & Restrictions
|
|
277
340
|
|
|
278
341
|
#### X (Twitter) Poll Validation
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IDataObject, IExecuteFunctions, INodeProperties } from 'n8n-workflow';
|
|
2
|
+
export type NetworkRequest = {
|
|
3
|
+
endpoint: string;
|
|
4
|
+
method: 'GET' | 'POST' | 'PATCH' | 'DELETE';
|
|
5
|
+
body?: IDataObject;
|
|
6
|
+
qs?: IDataObject;
|
|
7
|
+
isUploadOperation: boolean;
|
|
8
|
+
waitForCompletion: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare const NETWORK_RESOURCES: string[];
|
|
11
|
+
export declare const applyNetworkUploadOptions: (node: IExecuteFunctions, itemIndex: number, operation: string, platforms: string[], formData: IDataObject) => void;
|
|
12
|
+
export declare const uploadExtraProperties: INodeProperties[];
|
|
13
|
+
export declare const networkProperties: INodeProperties[];
|
|
14
|
+
export declare const buildNetworkRequest: (node: IExecuteFunctions, itemIndex: number, resource: string, operation: string) => NetworkRequest;
|