功能中可能非常慢"/>
Line API 在谷歌云功能中可能非常慢
我在 Node 中有一个由 firebase 函数托管的线路机器人,由于某种原因,从机器人向用户发送消息通常需要 5 秒以上。我也在连接到工作表 API,但我想知道是否有人遇到过类似的问题,或者他们是否会在我的示例代码中看到一些浪费大量时间的东西。
'use strict';
//Sheets dependencies
const { google } = require('googleapis');
const key = require('./key.json');
//functions + line dependencies
const functions = require('firebase-functions');
const express = require('express');
const line = require('@line/bot-sdk');
const config = {
channelSecret: '$channelSecret', // LINE Developersでの準備②でメモったChannel Secret
channelAccessToken: '$accessToken' // LINE Developersでの準備②でメモったアクセストークン
};
const app = express();
//initialize sheets auth
const sheetsClient = new google.auth.JWT(key.client_email, null, key.private_key, [
''
]);
app.post('/webhook', line.middleware(config), (req, res) => {
console.log(req.body.events);
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result))
.catch((result) => console.log('error!!!'));
});
const client = new line.Client(config);
async function handleEvent(event) {
if (event.type !== 'message' || event.message.type !== 'text') {
return Promise.resolve(null);
}
var message = event.message.text;
console.log("message recieved " + message);
// console.log(message.startsWith("!"));
if(message.startsWith("!")){
var args = message.split(" ");
var names = ["@123","@1234","@12345","@123456","@123","@12340","@12345","@123456"];
if(args[0] == "!names") {
console.log("args length " + args.length.toString());
// console.log(args[1]);
//give 5 names
//cant return more than 10 names in
if(args.length > 1) {
if(parseInt(args[1]) != NaN) {
var numOfNames = parseInt(args[1]);
if(numOfNames > 0 && numOfNames <= 10) {
//check if theres enough names
if (numOfNames > names.length) return client.replyMessage(event.replyToken, {
type: 'text',
text: `Don't have enough names! (${names.length.toString()})`
});
//send push messages
console.log(event);
console.log(event.source);
for(var i = 0; i<numOfNames; i++) {
client.pushMessage(event.source['userId'], {
type: 'text',
text: names[0]
});
names.shift();
}
}
}
} else {
//if arg length is not > 1
return client.replyMessage(event.replyToken, {
type: 'text',
text: event.message.text + 'を受け取りました。'
});
}
} else if(args[0] == "!put") {
const putSheet = async auth => {
const gsapi = google.sheets({
version: 'v4',
auth
});
let values = [
[
'Chris',
'Male',
'4. Senior',
'FL',
'Art',
'Baseball'
],
];
const resource = {
values,
};
gsapi.spreadsheets.values.update({
spreadsheetId: '$sheetID',
range: 'sheet1!A5:F5',
valueInputOption: 'RAW',
resource: resource,
}, (err, result) => {
if (err) {
// Handle error
console.log(err);
client.pushMessage(event.source['userId'], {
type: 'text',
text: "There was an error"
})
} else {
console.log("Updated!");
client.pushMessage(event.source['userId'], {
type: 'text',
text: "updated the table"
})
}
});
};
sheetsClient.authorize((err, tokens) => {
if (err) {
console.error(err);
return;
}
putSheet(sheetsClient);
});
}
// if message does not start with !
} else {
const readSheet = async auth => {
const gsapi = google.sheets({
version: 'v4',
auth
});
const options = {
spreadsheetId: '$sheetId',
range: 'sheet1!A2:C2'
};
const { data } = await gsapi.spreadsheets.values.get(options);
console.log(data.values);
client.pushMessage(event.source['userId'], {
type: 'text',
text: JSON.stringify(data.values)
})
};
sheetsClient.authorize((err, tokens) => {
if (err) {
console.error(err);
return;
}
readSheet(sheetsClient);
});
}
}
exports.app = functions.region('asia-northeast1').https.onRequest(app);
我在日本,所以我将 firebase 项目区域设置为最接近的区域,并将功能区域设置为最接近的可用区域。 我还检查了运行程序所需的一些时间,发现线路消息的发送时间比平时更长。任何输入将不胜感激!谢谢!
回答如下:更多推荐
Line API 在谷歌云功能中可能非常慢
发布评论