Line Notify 在十月初宣布【LINE Notify结束服务公告】,将于2025年3月31日停止服务,还给了半年的缓冲期,不幸的,因为Line Notify 很好用加上又是免费,不止公司,连我自己都有一堆小服务是用Line Notify 来做告警,从上面Line 官方连结写的「关于发送通知的替代方法,建议可考虑操作Messaging API 透过LINE官方帐号来传送讯息」,只好花点时间,把原来Line Notify 的程式用Messaging API 改写,简单写个笔记纪录
原 Line Notify 程式
会看这篇文章的,应该都是原Line Notify 的用户,对Line Notify 就不多做介绍了,有兴趣可以看旧文:【Line Notify 测试笔记】,然后同样用Google Apps Script 来做测试,先来看一下旧程式,详细内容也可以参考旧文:【[Google Apps Script 测试笔记,实作监控网站发送Line Notify](/blog/google -app-script-monitor)】
/**
* 發送 Line Notify 訊息
*/
function sendLineNotify(lineToken, message) {
let lineUrl = 'https://notify-api.line.me/api/notify';
let option = {
method: 'post',
headers: { Authorization: 'Bearer ' + lineToken },
payload: {
message: message
}
};
UrlFetchApp.fetch(lineUrl, option);
}
从这个程式来看,程式很简单,只需要取得 line notify 的 token (权杖) 就可以了
改写后的 Messaging API
也不难,直接贴程式码
/**
* Messaging API 發送訊息到 Line 群組
*/
function sendLineGroupMsg(accessToken, groupId, messageText) {
const lineUrl = 'https://api.line.me/v2/bot/message/push';
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`
};
const messageData = {
to: groupId,
messages: [
{
type: "text",
text: messageText
}
]
};
let option = {
method: 'post',
headers: headers,
payload: JSON.stringify(messageData)
};
UrlFetchApp.fetch(lineUrl, option);
}
注意一下,这支程式是传送讯息到「群组」的,如果是要传到个人的话,请改成 userId 即可,程式其实是一样的
然后他和原来 Line Notify 的差别主要是它需要两个参数:accessToken 和 groupId,所以基本上只要知道这两个参数该怎么找到,把 function 换掉就完工了
Channel Access Token
请参考【Line Bot Messaging API 测试笔记】这篇文章,需要先注册 Line 官方帐号,然后到 Line Developers 就能取得该官方帐号的 channel access token 了
Group ID / User ID
这个比较麻烦一点,用过Line 官方帐号的人应该知道官方帐号是看不到会员名单的(我还是不理解他们的理由),所以就需要从webhook 的程式着手,同样参考【Line Bot Messaging API 测试笔记】这篇文章,我们先把原来的程式增加一行log
// event handler
function handleEvent(event) {
console.log(event);
}
基本上只要有什么动作,就可以看到这一行印出讯息
将官方帐号加入好 友会看到
{
type: 'follow',
webhookEventId: '',
deliveryContext: { isRedelivery: false },
timestamp: 1730174569813,
source: { type: 'user', userId: '使用者ID' },
replyToken: '',
mode: 'active'
}
将官方帐号 邀请到群组会看到
{
type: 'join',
webhookEventId: '',
deliveryContext: { isRedelivery: false },
timestamp: 1730174437255,
source: { type: 'group', groupId: '群组ID' },
replyToken: '',
mode: 'active'
}
手动 的记录一下 userId 和 groupId 或写支程式去 parser json 就可以取得资料,发送讯息给个人或群组了
其他设定
请到 Line 官方帐号,在帐号设定将加入群组或多人聊天室改成「接受邀请」,要不然是没有办法将官方帐号邀请到群组的
结论
Line Messaging API 要完全取代Line Notify 看起来应该是没有问题,转换过程还算顺利,主要的差别就只有费用,Line Notify 是免费服务,Messaging API 的免费额度则只有200则/月,再来就要付费了,不过使用者付费其实还算合理啦,如果真的还是要找免费服务,大概就只能换Telegram 或Discord 了,但我没打算试就是