Sha*_*ant 6 javascript collaboration calendar google-calendar-api slack-api
背景:在此处阅读 Reddit 主题
\nSlack 与 Google 日历的集成将于 2023 年 3 月 1 日停止,目前没有替代方案
\nhttps://slack.com/help/articles/360047938054-Google-Calendar-for-Team-Events-for-Slack
我能够使用Google Scripts + Slack 的Incoming Web Hooks功能组装一个基本的机器人,但是它缺少一些我无法弄清楚的功能:
\n其具有的特点:
\n它所缺乏的特点:
\n设置步骤:
\n创建网络钩子
\n然后在此处创建一个 Google 脚本
\n现在,复制以下代码并为 WebhookURL 变量添加自定义 Webhook
\n// Resources https://www.kutil.org/2016/02/integrate-google-apps-and-slack-with.html\n// Slack messages formatting reference https://app.slack.com/block-kit-builder/T0247NYLG9Y\n\n// This is the code for updating the vacations channel with upcoming PTO\n\nfunction UpcomingPTO() {\n\n var WebhookURL = "https://hooks.slack.com/services/XXX/YYYY/ZZZZZZZ";\n \n// Define PTO Calendar ID variables \n var PTOCal = \'PTO@group.calendar.google.com\'\n var cal = CalendarApp.getCalendarById(PTOCal);\n\n// Sets how far in the future to look for events and get the color of the calendar\n var StartTime = new Date();\n var EndTime = new Date(StartTime.getTime() + 7776000000); //90 days from today\n var color = cal.getColor(); \n\n var events = cal.getEvents(StartTime, EndTime);\n\n var EventTitles = [];\n for (var i= 0; i < events.length; i++) {\n \n var NextEvent = [];\n NextEvent.push(events[i].getTitle())\n \n var NextEventStartDate = [];\n NextEventStartDate.push(events[i].getStartTime())\n \n var NextEventEndDate = [];\n NextEventEndDate.push(events[i].getEndTime())\n\n var StartDate = new Date(NextEventStartDate).toLocaleDateString(\'en-us\', { weekday: \'short\', month: \'short\', day: \'numeric\' })\n var EndDate = new Date(NextEventEndDate).toLocaleDateString(\'en-us\', { weekday: \'short\', month: \'short\', day: \'numeric\', year: \'numeric\' })\n \n EventTitles.push("\\n\\n *" + NextEvent + "* \\n" + StartDate + " to " + EndDate);\n }\n\n var payload = {\n "channel" : "#1-vacations", // <-- optional parameter, use if you want to override default channel\n "username" : "Team PTO", // <-- optional parameter, use if you want to override default "robot" name \n "text" : \'There are \' + events.length + \' upcoming PTO events soon\',\n "icon_emoji": ":palm_tree:", // <-- optional parameter, use if you want to override default icon, \n "attachments":[\n {\n "color": color,\n "fields":[\n {\n "title": EventTitles, // The title may not contain markup and will be escaped for you\n "value": String(EventTitles), // Text value of the field. May contain standard message markup and must be escaped as normal and multi-line\n "short":false // Optional flag indicating whether the `value` is short enough to be displayed side-by-side with other values\n }\n ]\n }\n ]\n }\n \n Logger.log(events)\n Logger.log(NextEvent)\n Logger.log(EventTitles)\n sendToSlack_(WebhookURL,payload)\n}\n\n\nfunction sendToSlack_(WebhookURL,payload) {\n var options = {\n "method" : "post",\n "contentType" : "application/json",\n "payload" : JSON.stringify(payload)\n };\n return UrlFetchApp.fetch(WebhookURL, options)\n}\nRun Code Online (Sandbox Code Playgroud)\n
基于 Shant 的实现(顺便说一句,谢谢!),我创建了一个支持每周通知和事件创建通知的版本。
webhookUrl替换、calendarId和的值slackChannel。sendWeeklyEventsSummary()。onEventUpdated()。免责声明:基于事件的触发器将仅回顾 30 秒并发送在此时间段内创建的所有事件。如果您的日历上有很多操作,这可能会导致同一事件收到多个通知。
| 归档时间: |
|
| 查看次数: |
2070 次 |
| 最近记录: |