New to Kestra?
Use blueprints to kickstart your first workflows.
Route new YouTube comments into a Slack review queue with Kestra. A polling trigger surfaces author and text so moderators respond fast.
Comments are where a channel's community lives, and the ones that need a fast response, questions, complaints, spam, are easy to miss across multiple videos. This blueprint attaches io.kestra.plugin.youtube.CommentTrigger to a list of videos: every 30 minutes it fetches recent comments in time order, and whenever it finds ones it has not seen before, it fires an execution that posts a review message to Slack with the author, the comment text, and the video ID already extracted.
on_new_comment (io.kestra.plugin.youtube.CommentTrigger) polls the videos in videoIds on a PT30M interval, fetching up to 20 recent comments per video ordered by time. It fires only when unseen comments appear.authorDisplayName, textDisplay, commentId, videoId, and publishedAt, plus newCommentsCount and an allNewComments array with every detected comment.post_review_message interpolates the scalar outputs into a Slack message for the moderation channel. The allNewComments array stays on the execution's trigger outputs for the full batch.errors block posts a distinct Slack alert when the message fails to send.disabled: true; point videoIds at the videos you moderate and enable it.Comment moderation tooling usually means a browser tab per video or a custom poller someone has to host and babysit. Kestra's trigger does the polling, remembers what it has already surfaced, keeps a full execution history of every comment that entered the queue, and alerts when the credential or webhook breaks, all from one declarative flow.
YOUTUBE_ACCESS_TOKEN: OAuth2 bearer token for the YouTube Data API.SLACK_WEBHOOK_URL: Slack incoming webhook URL.videoIds with the videos you moderate.disabled: false on the on_new_comment trigger and post a test comment to see it arrive in Slack.order to relevance to prioritize comments YouTube ranks as significant instead of newest first.interval for busier channels, keeping API quota in mind.{{ trigger.videoId }}.