# Morning Agenda Workflow > n8n mein roz subah Google Calendar se aaj ke events nikalo aur ek Telegram message mein bhejo: step by step Free guide by bloopcommits (@bloopcommits) · https://bloopcommits.pages.dev/agenda/ Aaj class, deadline aur interview kitne baje hai, ye dekhne ke liye har subah Calendar kholna padta hai? Is guide mein ek chhota n8n workflow hai: roz subah n8n tumhare Google Calendar se sirf aaj ke events nikalta hai, unhe time ke order mein ek list banata hai, aur ek hi Telegram message mein bhej deta hai. Subah Calendar kholne ka kaam khatam: schedule seedha phone par. > **Ye workflow kya karta hai** > > - Schedule Trigger roz subah ek tay time par workflow shuru karta hai (starter mein seven baje, tum kuch bhi rakh sakte ho). > - Google Calendar (Event, Get Many) aaj ke events nikalta hai: After = aaj ki shuruaat, Before = kal ki shuruaat, time ke order mein. > - Aggregate saare events ko ek hi list (ek item) bana deta hai, taaki aage sirf ek message jaye. > - Telegram Send Message us list se ek message banata hai: 'Aaj ka schedule:' aur har line mein time aur title. ![n8n ke official preview mein poora workflow: Every Morning > Today's Events > One List > Send Agenda](https://bloopcommits.pages.dev/agenda/workflow.png) _Poora workflow, n8n ke official preview mein (workflow hamara, screen n8n ka)._ Reel mein jo morning ka example (09:00 Class, 14:00 Assignment deadline, 17:00 Interview) aur Telegram message card dikha, wo banaya hua example hai. Hamne ye workflow kisi account par chalaya nahi hai: ye starter workflow hai, n8n ke official preview mein dikhaya gaya. Telegram message ka text (expression) hamara apna design hai, n8n docs se nahi: isliye credentials khud jodo aur ek test se check karo. ## Node by node (n8n ke official docs ke hisaab se) | Node (canvas par naam) | n8n node | Kya karta hai | Tumhe kya set karna hai | | --- | --- | --- | --- | | Every Morning | Schedule Trigger | Workflow ko tay time par shuru karta hai. Days interval mein 'Days Between Triggers' = kitne din baad dobara, 'Trigger at Hour' aur 'Trigger at Minute' = kis time. Docs: workflow save aur publish karna zaroori hai. | Trigger Interval: Days. Days Between Triggers: 1. Trigger at Hour: 7am (ya apna time). Trigger at Minute: 0. | | Today's Events | Google Calendar, Event > Get Many | Calendar se events laata hai. 'After' = is time ke baad ke events, 'Before' = is time se pehle ke. Docs: event ka kam se kam ek hissa is range mein hona chahiye. Default After = abhi ka time, Before = abhi se ek hafta aage. 'Recurring Event Handling' = All Occurrences: roz repeat hone wale events ke us din ke instances bhi aate hain. Order By = Start Time. | Credential (Google Calendar), Calendar (From list). After = {{ $today }}, Before = {{ $today.plus({ days: 1 }) }}, Return All on. Starter mein ye sab pehle se bhara hai. | | One List | Aggregate, All Item Data | Docs: 'All Item Data' saare item data ko ek single list mein jodta hai. 'Put Output in Field' = us list ka field naam. | Put Output in Field: data (starter mein pehle se). Is naam ko Telegram node ka expression padhta hai. | | Send Agenda | Telegram, Send Message | Chat mein message bhejta hai. Text ki limit 4096 characters. 'Append n8n Attribution' by default on hota hai. | Telegram credential (Access Token), Chat ID. Text mein hamara expression hai; Append n8n Attribution starter mein off hai. | ## Kya chahiye - n8n: apne server par self-host (Community Edition) ya n8n Cloud (free trial). Kharche ka section neeche hai. - Google account jisme Calendar ho, aur n8n ke liye Google Calendar credential (neeche 'Google Calendar jodna' mein). - Telegram bot ka Access Token: Telegram par BotFather se chat shuru karo, /newbot likho, naam aur username do (username 'bot' par khatam hona chahiye), aur jo token mile use n8n mein Access Token ki jagah daalo. - Telegram Chat ID: jahan agenda aana chahiye, uska id. Tareeke neeche 'Chat ID kaise nikaalein' mein hain. - n8n roz subah chalu rehna chahiye aur workflow publish hona chahiye: Schedule Trigger tabhi chalta hai. ## Google Calendar jodna (n8n docs ke hisaab se) 1. n8n Cloud: docs kehte hain ki Google Calendar node ke liye 'Managed OAuth2' milta hai. Credentials screen par 'Sign in with Google' dabao, Google Cloud Console mein kuch setup nahi chahiye. (Managed OAuth2 self-hosted par nahi milta.) 2. Self-hosted: apna Google Cloud project banao, wahan Google Calendar API enable karo, 'APIs & Services > OAuth consent screen' set karo, phir 'Create credentials > OAuth client ID' banao. 3. n8n ke credential se 'OAuth Redirect URL' copy karke Google Console ke 'Authorized redirect URIs' mein paste karo. Google ka Client ID aur Client Secret n8n credential mein daalo, phir 'Sign in with Google' dabao. 4. Docs ke hisaab se agar consent screen 'External' hai, to app by default Testing mode mein hota hai: sirf wahi Google accounts login kar sakte hain jo tumne 'Test users' mein add kiye hain. Apna account test user mein jodo. ## Chat ID kaise nikaalein (n8n docs ke hisaab se) n8n ke Telegram docs 'Get the Chat ID' mein ye tareeke dete hain: 1. Telegram Trigger node: apne workflow mein Telegram Trigger lagao. Docs ke hisaab se ye node kamyaab execution par Chat ID wapas deta hai. Bot ko ek message bhejo aur trigger ke output mein chat ka id dekho. 2. Web browser: Telegram ko browser mein kholo aur group chat kholo. Docs: group ka Chat ID us 'g' akshar ke baad ke digits hain. n8n mein daalte waqt group Chat ID ke aage '-' lagao. 3. RawDataBot: docs ke hisaab se Telegram ke @RawDataBot ko group mein invite karo; wo ek JSON bhejta hai jisme 'chat' object ka 'id' hi group Chat ID hai. Ye third-party bot hai, sirf apne group mein aur samajhdari se use karo. ## Step by step 1. n8n kholo (Cloud trial ya apna self-host) aur ek naya workflow banao. 2. Neeche wala starter workflow Import from File se laao, ya JSON copy karke canvas par paste karo. 3. Today's Events node mein Google Calendar credential chuno (ya naya banao) aur Calendar 'From list' se chuno. 4. After aur Before dekho: starter mein After = aaj ki shuruaat ({{ $today }}), Before = kal ki shuruaat ({{ $today.plus({ days: 1 }) }}). 5. Send Agenda node mein Telegram credential chuno (BotFather ka token) aur apna Chat ID daalo. 6. Test ke liye Calendar mein aaj ke liye do-teen events rakho (banaya hua example: 09:00 Class, 14:00 Assignment deadline, 17:00 Interview) aur 'Execute Workflow' chalao. Dekho Telegram par ek message aaya, har line mein time aur title. 7. Message ka format tumhe pasand nahi? Send Agenda ke Text expression mein badlo. Wo hamara design hai, tum apne hisaab se badal sakte ho. 8. Schedule Trigger mein apna time aur n8n ka timezone (neeche 'Timezone' mein) check karo. 9. Test theek lage, tab workflow ko publish karo. Schedule Trigger ke liye docs kehte hain: save aur publish zaroor karo. [Workflow file download karo](https://bloopcommits.pages.dev/agenda/bloopcommits-agenda-workflow.json) - .json file · n8n mein Import from File · download na ho to neeche Copy dabao **starter workflow: n8n mein Import from File / paste karo, Calendar aur Chat ID khud chuno, credentials khud jodo, ek test se check karo** ``` { "name": "Morning Agenda Starter", "nodes": [ {"id": "1", "name": "Every Morning", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.2, "position": [0, 0], "parameters": {"rule": {"interval": [{"field": "days", "daysInterval": 1, "triggerAtHour": 7, "triggerAtMinute": 0}]}}}, {"id": "2", "name": "Today's Events", "type": "n8n-nodes-base.googleCalendar", "typeVersion": 1.3, "position": [300, 0], "parameters": {"resource": "event", "operation": "getAll", "calendar": {"__rl": true, "mode": "list", "value": ""}, "returnAll": true, "timeMin": "={{ $today }}", "timeMax": "={{ $today.plus({ days: 1 }) }}", "options": {"recurringEventHandling": "expand", "orderBy": "startTime"}}}, {"id": "3", "name": "One List", "type": "n8n-nodes-base.aggregate", "typeVersion": 1, "position": [600, 0], "parameters": {"aggregate": "aggregateAllItemData", "destinationFieldName": "data", "options": {}}}, {"id": "4", "name": "Send Agenda", "type": "n8n-nodes-base.telegram", "typeVersion": 1.2, "position": [900, 0], "parameters": {"chatId": "", "text": "={{ 'Aaj ka schedule:\\n' + $json.data.map(e => (e.start.dateTime ? DateTime.fromISO(e.start.dateTime).toFormat('HH:mm') : 'Poora din') + ' ' + e.summary).join('\\n') }}", "additionalFields": {"appendAttribution": false}}} ], "connections": { "Every Morning": {"main": [[{"node": "Today's Events", "type": "main", "index": 0}]]}, "Today's Events": {"main": [[{"node": "One List", "type": "main", "index": 0}]]}, "One List": {"main": [[{"node": "Send Agenda", "type": "main", "index": 0}]]} } } ``` Is JSON mein credentials nahi hain. Calendar ka naam khali hai aur Chat ID khali hai: dono tumhe khud bharne hain. Send Agenda ka Text expression hamara apna design hai (n8n docs se nahi) aur humne ise kisi account par chalaya nahi: pehle test se dekh lo ki message waisa hi banta hai jaisa neeche dikhaya hai. Expression Google Calendar API ke fields padhta hai: 'summary' (event ka title) aur 'start.dateTime' (time wale event ka time). Google ke docs ke hisaab se all-day event mein 'start.date' hota hai, 'start.dateTime' nahi, to message mein time ki jagah 'Poora din' aata hai. > **Banaya hua example: message kaisa dikhega** > > - Aaj ka schedule: > - 09:00 Class > - 14:00 Assignment deadline > - 17:00 Interview > - (Time n8n ke timezone mein, 24 ghante ke format mein. Ye example hai, tumhare events alag honge.) ## Sabse zaroori: sirf aaj ka time range n8n docs ke hisaab se Google Calendar ke Get Many mein 'After' ka default abhi ka time hai aur 'Before' ka default abhi se ek hafta aage hai. Yani agar tum range na badlo, to aaj ke saath aage ke poore hafte ke events bhi aa sakte hain. Isliye starter mein After = {{ $today }} (aaj ke din ki shuruaat, 'rounded down to the day') aur Before = {{ $today.plus({ days: 1 }) }} (agle din ki shuruaat) hai. Docs: event ka kam se kam ek hissa range ke andar hona chahiye, to raat ko shuru hokar aaj subah tak chalne wala event bhi aa sakta hai. ## Timezone check karo n8n docs ke hisaab se Schedule Trigger timezone setting par chalta hai: pehle workflow ka timezone (agar set hai), warna n8n instance ka timezone. Self-hosted par default America/New York hota hai; n8n Cloud signup par owner ka timezone detect karne ki koshish karta hai, nahi mil paye to GMT. Luxon (jisse $today bana hai) bhi n8n ka hi timezone use karta hai. Isliye 'subah seven baje' aur 'aaj' tumhare hisaab se tabhi sahi honge jab timezone sahi ho. 1. Workflow ke Settings mein 'Timezone' apna chuno (docs: workflow timezone Schedule Trigger ke liye important hai). 2. Ya poore instance ka timezone badlo: Cloud par admin dashboard mein, self-hosted par environment variable GENERIC_TIMEZONE se (docs mein 'timezone and localization' page). ## Jis din koi event nahi hai? Ek idea (try karke dekho, pakka recipe nahi, khud try karo) Hamne starter ko khali din par chalaya nahi hai. Ho sakta hai ki jab Calendar se koi event na mile, to Google Calendar node koi item hi na de, aur tab aage ke nodes na chalein aur Telegram par kuch na aaye: apni test run mein khud dekho. Agar tum chahte ho ki khali din par 'Aaj koi event nahi' jaisa message aaye, to ek idea ye hai (ye hamara idea hai, pakka recipe nahi, khud try karo). 1. Today's Events node ki Settings mein 'Always Output Data' on karo. Docs: 'The node returns an empty item even if the node returns no data during execution.' Calendar node par lagana, If node par nahi: docs kehte hain ki If node par lagane se infinite loop ho sakta hai. 2. Today's Events ke baad ek If node lagao: condition 'id exists' ({{ $json.id }}). Asli Google event mein id hota hai, khali item mein nahi. 3. True se One List aur Send Agenda jodo (jaisa abhi hai). False par ek doosra Telegram Send Message node lagao jisme text 'Aaj koi event nahi hai' ho. 4. Test karo: ek din aisa lo jab Calendar mein kuch na ho, aur dekho kaunsa branch chalta hai. Ye idea hai, hamne ise chalaya nahi. ## Google login 7 din mein expire? Testing status ka chakkar Google ke apne docs ke hisaab se: 'A Google Cloud Platform project with an OAuth consent screen configured for an external user type and a publishing status of "Testing" is issued a refresh token expiring in 7 days, unless the only OAuth scopes requested are a subset of name, email address, and user profile.' Google Calendar ka scope us chhoti list mein nahi aata, isliye self-hosted n8n mein apna Google app Testing status par ho to login seven din mein expire ho sakta hai. n8n docs bhi yahi kehte hain ('consent and tokens expire after seven days') aur fix batate hain: n8n ke credentials modal mein app ko dobara connect (reconnect) karo. - Self-hosted par agar login ek hafte baad toot jaye, to credential mein 'Sign in with Google' dobara karo (reconnect). - Consent screen ke publishing status ke Google ke apne rules Google ke official page par hain (neeche links mein): hum yahan us par koi promise nahi karte. - n8n Cloud par Google Calendar ke liye Managed OAuth2 milta hai ('Sign in with Google' se), jisme Google Cloud Console ka setup nahi chahiye. ## Telegram ke special characters (ek check) n8n docs ke hisaab se Telegram node ka Parse Mode by default HTML hai. Telegram ke apne Bot API docs kehte hain: 'All <, > and & symbols that are not a part of a tag or an HTML entity must be replaced with the corresponding HTML entities (< with <, > with > and & with &).' Isliye agar kisi event ke title mein '&', '<' ya '>' ho (jaise 'Q&A'), to ho sakta hai Telegram message ko reject kar de. Ek test event banao jisme '&' ho aur dekho. Agar dikkat aaye, ek idea (pakka recipe nahi, khud try karo): title ko expression mein escape karo. **IDEA (pakka recipe nahi, khud try karo): Send Agenda ka Text expression, title mein & < > escape karke** ``` ={{ 'Aaj ka schedule:\n' + $json.data.map(e => (e.start.dateTime ? DateTime.fromISO(e.start.dateTime).toFormat('HH:mm') : 'Poora din') + ' ' + String(e.summary || '(no title)').replace(/&/g, '&').replace(//g, '>')).join('\n') }} ``` ## Aam galtiyan - Workflow publish nahi kiya. Schedule Trigger ke docs: save aur publish zaroor karo, warna schedule par kuch nahi chalega. - n8n band hai. Docs ke hisaab se instance band ho to us time ka run miss ho jaata hai, aur default mein missed runs baad mein nahi chalte. Yani us subah ka message chhoot jaata hai: n8n subah chalta rakho. - After aur Before default par chhod diye: tab aaj ke saath aage ke hafte ke events bhi aa sakte hain. - Timezone galat hai (self-hosted ka default America/New York): 'aaj' aur 'seven baje' galat ghante se ginne lagte hain. - Chat ID khali ya galat hai, ya Telegram credential ka token galat hai. - Google Calendar credential mein apna account 'Test users' mein add nahi kiya, ya login 7 din baad expire ho gaya: reconnect karo. - Aggregate ki jagah Telegram ko seedha jodna: tab har event ke liye alag message ja sakta hai. Aggregate isi liye hai ki sirf ek message jaye. - Test kiye bina workflow publish kar dena. Pehle ek test se check karo. > **Privacy aur safety** > > - Calendar ke events tumhare n8n se guzar kar Telegram chat tak jaate hain. Event ke title mein aisi private baat mat likho jo us chat mein nahi chahiye. > - Bot token, Google Client Secret aur Chat ID kisi ko share mat karo. > - Telegram chat mein sirf wahi log ho jinhe tum apna schedule dikhana chahte ho. > - Ye starter workflow hai. Ek test se check karo, phir publish karo. > - Ye advice hai, guarantee nahi. ## Kharcha (plans badalte rehte hain, official page dekho) | Option | n8n ke official pages ke hisaab se | | --- | --- | | Self-host (Community Edition) | Free Community edition, almost complete feature set. Infrastructure tum khud provide aur manage karte ho: n8n subah chalta rakhna tumhari zimmedari. | | n8n Cloud | n8n khud host karta hai. Free trial milta hai, uske baad paid plans: plans aur daam official pricing page par dekho. | > **Yaad rakho** > > - Schedule Trigger -> Google Calendar (aaj ka range) -> Aggregate -> Telegram Send Message. > - After aur Before se sirf aaj ka range lagao: default ek hafta aage tak hai. > - n8n ka timezone apna lagao, workflow publish karo aur n8n subah chalta rakho. > - Self-hosted Google login Testing mode mein hai to seven din mein expire ho sakta hai: reconnect. > - Event ke title mein private baat nahi. > - Starter workflow hai: accounts aur credentials khud jodo, ek test se check karo. ## Official links - [n8n docs: Schedule Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/) - [n8n docs: Google Calendar (Event: Get Many)](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlecalendar/event-operations/) - [n8n docs: Aggregate](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/) - [n8n docs: Telegram (Send Message)](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/message-operations/) - [n8n docs: Telegram common issues (Get the Chat ID)](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/common-issues/) - [n8n docs: Telegram credentials](https://docs.n8n.io/integrations/builtin/credentials/telegram/) - [n8n docs: Google credentials (OAuth2 single service)](https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/) - [n8n docs: work with dates and times ($today, timezone)](https://docs.n8n.io/build/work-with-data/handle-special-data-types/work-with-dates-and-times/) - [n8n docs: node settings (Always Output Data)](https://docs.n8n.io/build/understand-workflows/workflow-components/work-with-nodes/) - [n8n docs: choose how to use n8n](https://docs.n8n.io/choose-how-to-use-n8n/) - [n8n: pricing](https://n8n.io/pricing) - [Google Calendar API: Events (summary, start.dateTime, id)](https://developers.google.com/workspace/calendar/api/v3/reference/events) - [Google: OAuth 2.0 (refresh token expiration)](https://developers.google.com/identity/protocols/oauth2) - [Telegram Bot API: HTML style](https://core.telegram.org/bots/api#html-style) --- More free guides: https://bloopcommits.pages.dev/