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

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


咨詢
建站咨詢
