最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Line API 在谷歌云功能中可能非常慢

网站源码admin36浏览0评论

Line API 在谷歌云功能中可能非常慢

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 项目区域设置为最接近的区域,并将功能区域设置为最接近的可用区域。 我还检查了运行程序所需的一些时间,发现线路消息的发送时间比平时更长。任何输入将不胜感激!谢谢!

回答如下:
发布评论

评论列表(0)

  1. 暂无评论