新聞中心
簡(jiǎn)介
Serverless 是一種云計(jì)算服務(wù)模式,用戶(hù)無(wú)需關(guān)心底層基礎(chǔ)設(shè)施的維護(hù),只需關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn),飛書(shū)是一款企業(yè)級(jí)即時(shí)通訊和協(xié)作平臺(tái),提供了豐富的 API 接口,方便開(kāi)發(fā)者進(jìn)行二次開(kāi)發(fā),本文將介紹如何使用 Serverless 飛書(shū)打造個(gè)性化消息提醒系統(tǒng),包括系統(tǒng)架構(gòu)設(shè)計(jì)、技術(shù)選型、代碼實(shí)現(xiàn)等方面。

成都創(chuàng)新互聯(lián)公司自成立以來(lái),一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開(kāi)發(fā)等基于互聯(lián)網(wǎng)的全面整合營(yíng)銷(xiāo)服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開(kāi)發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開(kāi)發(fā)工程師團(tuán)隊(duì)及專(zhuān)業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。
系統(tǒng)架構(gòu)設(shè)計(jì)
1、前端:使用 React 或 Vue 等框架搭建 Web 應(yīng)用,通過(guò)調(diào)用飛書(shū) API 實(shí)現(xiàn)消息的發(fā)送和接收。
2、后端:采用 Serverless 架構(gòu),可以使用云函數(shù)(如 AWS Lambda、阿里云函數(shù)計(jì)算等)或無(wú)服務(wù)器數(shù)據(jù)庫(kù)(如騰訊云 CDB、阿里云 RDS 等)作為計(jì)算資源。
3、存儲(chǔ):使用云存儲(chǔ)服務(wù)(如阿里云 OSS、騰訊云 COS 等)存儲(chǔ)用戶(hù)的基本信息和消息記錄。
4、通知中心:使用第三方通知服務(wù)(如極光推送、友盟推送等)實(shí)現(xiàn)跨平臺(tái)的消息推送。
技術(shù)選型
1、前端框架:React 或 Vue,根據(jù)項(xiàng)目需求選擇合適的框架。
2、后端框架:Serverless Framework,支持多種云服務(wù)商的函數(shù)計(jì)算服務(wù)。
3、API 調(diào)用:使用飛書(shū)官方提供的 JavaScript SDK,遵循官方文檔規(guī)范進(jìn)行開(kāi)發(fā)。
4、云存儲(chǔ):阿里云 OSS,具有高可用、低延遲、大容量的特點(diǎn)。
5、通知服務(wù):極光推送,支持 iOS、Android、H5、Web等多個(gè)平臺(tái)的消息推送。
代碼實(shí)現(xiàn)
1、前端實(shí)現(xiàn):
import * as fk from '@alifd/plugin-sdk';
// 初始化飛書(shū) SDK
const app = fk.createApp({
appKey: 'your_app_key',
masterSecret: 'your_master_secret',
});
// 獲取飛書(shū)用戶(hù) ID
async function getUserId() {
const res = await app.user.getUserInfo();
return res.userId;
}
// 發(fā)送消息到指定用戶(hù)
async function sendMessageToUser(userId, content) {
const message = {
userIds: [userId],
content: content,
};
const res = await app.message.send(message);
return res;
}
2、后端實(shí)現(xiàn):
// 導(dǎo)入依賴(lài)庫(kù)和組件
const serverless = require('serverless-http');
const axios = require('axios');
const ossClient = new AWS.S3({ accessKeyId: 'your_access_key', secretAccessKey: 'your_secret_key' });
const push = require('@alifd/push');
const PushManager = push.PushManager;
const Message = push.models.Message;
const Target = push.models.Target;
const Payload = push.models.Payload;
const config = {}; // 根據(jù)實(shí)際情況配置推送服務(wù)的相關(guān)參數(shù),如別名、模板ID等
const targetType = 'all'; // all、tag、alias、uid四種類(lèi)型之一,根據(jù)實(shí)際需求選擇
const targetValue = ''; // 標(biāo)簽值、別名值或用戶(hù) ID,根據(jù)實(shí)際需求設(shè)置
const title = ''; // 通知欄標(biāo)題,可選參數(shù),默認(rèn)為應(yīng)用名稱(chēng)或消息內(nèi)容前綴
const body = ''; // 通知欄內(nèi)容,可選參數(shù),默認(rèn)為消息內(nèi)容本身
const contentAvailable = false; // 是否啟用后臺(tái)推流功能,可選參數(shù),默認(rèn)為 false,不啟用時(shí)需設(shè)置 autoplay=true 在 AndroidManifest.xml 中配置相應(yīng)字段以開(kāi)啟自動(dòng)播放功能
const notificationChannelId = ''; // Android 需要單獨(dú)設(shè)置的通知渠道 ID,可選參數(shù),默認(rèn)為空字符串,不設(shè)置時(shí)僅在 iOS 上生效,需在 iOSManifest.xml 中配置相應(yīng)的字段以控制通知展示方式和行為
const badge = ''; // iOS 需要單獨(dú)設(shè)置的應(yīng)用圖標(biāo)上顯示的數(shù)字角標(biāo)數(shù),可選參數(shù),默認(rèn)為空字符串,不設(shè)置時(shí)僅在 iOS 上生效,需在 iOSManifest.xml 中配置相應(yīng)的字段以控制角標(biāo)顯示數(shù)量和樣式
const sound = ''; // iOS 需要單獨(dú)設(shè)置的應(yīng)用啟動(dòng)時(shí)播放的聲音文件名,可選參數(shù),默認(rèn)為空字符串,不設(shè)置時(shí)僅在 iOS 上生效,需在 iOSManifest.xml 中配置相應(yīng)的字段以控制聲音文件名及音量大小等屬性值
const openUrlActions = []; // 點(diǎn)擊通知后需要打開(kāi)的 URL,可選參數(shù),默認(rèn)為空數(shù)組,不設(shè)置時(shí)僅在 Android 上生效,需在 AndroidManifest.xml 中配置相應(yīng)的字段以控制點(diǎn)擊通知后的跳轉(zhuǎn)行為和效果
const interactiveNotificationActions = []; // 點(diǎn)擊通知后需要執(zhí)行的操作列表,可選參數(shù),默認(rèn)為空數(shù)組,不設(shè)置時(shí)僅在 Android 上生效,需在 AndroidManifest.xml 中配置相應(yīng)的字段以控制點(diǎn)擊通知后的交互行為和效果
const data = {}; // 需要傳遞給應(yīng)用程序的數(shù)據(jù)對(duì)象,可選參數(shù),默認(rèn)為空對(duì)象,不設(shè)置時(shí)僅在 Android 上生效,需在 AndroidManifest.xml 中配置相應(yīng)的字段以傳遞數(shù)據(jù)給應(yīng)用程序處理層進(jìn)行后續(xù)操作或驗(yàn)證等場(chǎng)景的需求處理
let payload = {}; // 最終構(gòu)建的推送消息負(fù)載體對(duì)象,包含多個(gè)子對(duì)象用于描述推送消息的各種屬性值和格式信息等細(xì)節(jié)問(wèn)題,具體可參考飛書(shū)官方文檔說(shuō)明或示例代碼中的注釋說(shuō)明部分即可快速掌握其用法和技巧要點(diǎn),payload = Object.assign(payload, ...data); // 將自定義數(shù)據(jù)對(duì)象中的屬性值復(fù)制到負(fù)載體對(duì)象中去,確保所有需要傳遞的數(shù)據(jù)都能正確地被傳輸?shù)侥繕?biāo)設(shè)備上并得到有效處理,payload = Object.assign(payload, ...interactiveNotificationActions); // 將交互式操作所需的額外屬性值也加入到負(fù)載體對(duì)象中去,payload['notification']['title'] = title || content || '自定義消息標(biāo)題'; // 根據(jù)實(shí)際需求設(shè)置通知欄標(biāo)題或消息內(nèi)容前綴,payload['notification']['body'] = body || content || '自定義消息內(nèi)容'; // 根據(jù)實(shí)際需求設(shè)置通知欄內(nèi)容或消息內(nèi)容本身,payload['notification']['contentAvailable'] = contentAvailable; // 根據(jù)實(shí)際需求設(shè)置是否啟用后臺(tái)推流功能,payload['notification']['badge'] = badge || ''; // 根據(jù)實(shí)際需求設(shè)置應(yīng)用圖標(biāo)上顯示的數(shù)字角標(biāo)數(shù),payload['notification']['sound'] = sound || ''; // 根據(jù)實(shí)際需求設(shè)置應(yīng)用啟動(dòng)時(shí)播放的聲音文件名,payload['notification']['openUrlActions'] = openUrlActions || []; // 根據(jù)實(shí)際需求設(shè)置點(diǎn)擊通知后需要打開(kāi)的 URL,payload['notification']['interactiveNotificationActions'] = interactiveNotificationActions || []; // 根據(jù)實(shí)際需求設(shè)置點(diǎn)擊通知后需要執(zhí)行的操作列表,payload['notification']['targetIdentifier'] = targetValue || ''; // 根據(jù)實(shí)際需求設(shè)置目標(biāo)設(shè)備的標(biāo)識(shí)符(標(biāo)簽值、別名值或用戶(hù) ID),payload['notification']['targetType'] = targetType || 'all'; // 根據(jù)實(shí)際需求設(shè)置目標(biāo)設(shè)備的類(lèi)型(all、tag、alias、uid四種類(lèi)型之一),config['region'] = 'ap-guangzhou'; // 根據(jù)實(shí)際情況配置推送服務(wù)的地域?qū)傩灾?如華南區(qū)、華東區(qū)等),config['project'] = 'your_project_id'; // 根據(jù)實(shí)際情況配置推送服務(wù)的項(xiàng)目管理編號(hào),config['appkey'] = 'your_appkey'; // 根據(jù)實(shí)際情況配置推送服務(wù)的 App Key,config['secretKey'] = 'your_secret_key'; // 根據(jù)實(shí)際情況配置推送服務(wù)的 Secret Key,PushManager.initWithConfig(config); // 根據(jù)上述配置項(xiàng)初始化推送管理器實(shí)例對(duì)象,PushManager.subscribe(targetValue || '', (err) => err && console.error('訂閱失敗' + err)); // 根據(jù)目標(biāo)設(shè)備標(biāo)識(shí)符和相關(guān)配置項(xiàng)創(chuàng)建并啟動(dòng)一次推送訂閱請(qǐng)求(如果已存在則會(huì)更新當(dāng)前訂閱狀態(tài)),成功返回 true 否則返回 false,pushManagerPromiseResolved = PushManager.promiseResolved; // 為便于調(diào)試和測(cè)試可以在此處添加一些日志輸出語(yǔ)句或其他輔助工具來(lái)幫助我們更好地了解推送訂閱請(qǐng)求的狀態(tài)和結(jié)果情況,pushManagerPromiseRejected = PushManager.promiseRejected; // 為便于調(diào)試和測(cè)試可以在此處添加一些日志輸出語(yǔ)句或其他輔助工具來(lái)幫助我們更好地了解推送訂閱請(qǐng)求的狀態(tài)和結(jié)果情況,pushManagerPromisePending = PushManager.promisePending; // 為便于調(diào)試和測(cè)試可以在此處添加一些日志輸出語(yǔ)句或其他輔助工具來(lái)幫助我們更好地了解推送訂閱請(qǐng)求的狀態(tài)和結(jié)果情況,pushManagerStateChangeCallback = function (state) {}; // 當(dāng)推送管理器狀態(tài)發(fā)生變化時(shí)的回調(diào)函數(shù)(如成功訂閱、取消訂閱等),可根據(jù)實(shí)際需求進(jìn)行相應(yīng)的處理邏輯,pushManagerErrorCallback = function (error) => console.error('推送管理器錯(cuò)誤' + error); // 當(dāng)推送管理器發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)(如網(wǎng)絡(luò)異常、權(quán)限不足等),可根據(jù)實(shí)際需求進(jìn)行相應(yīng)的處理邏輯,pushManagerOpenNotificationCallback = function (event) {}; // 當(dāng)收到新的通知時(shí)觸發(fā)的回調(diào)函數(shù)(如用戶(hù)點(diǎn)擊了通知欄上的按鈕或鏈接等),可根據(jù)實(shí)際需求進(jìn)行相應(yīng)的處理邏輯,pushManagerCloseNotificationCallback = function (event) {}; // 當(dāng)收到關(guān)閉通知時(shí)觸發(fā)的回調(diào)函數(shù)(如用戶(hù)手動(dòng)關(guān)閉了通知欄上的按鈕或鏈接等),可根據(jù)實(shí)際需求進(jìn)行相應(yīng)的
當(dāng)前文章:飛書(shū)消息提醒怎么設(shè)置
本文來(lái)源:http://www.5511xx.com/article/djhjggp.html


咨詢(xún)
建站咨詢(xún)
