Hướng dẫn

Google Sheets + Telegram Bot: Gửi Thông Báo Tự Động [Hướng Dẫn 2026]

Tuân HoangTuân Hoang
9 tháng 6, 2026
10 phút đọc
Ảnh minh họa bài viết: Google Sheets + Telegram Bot: Gửi Thông Báo Tự Động [Hướng Dẫn 2026]

Tại Sao Chọn Telegram Thay Vì Email?

Bạn đang vận hành một cửa hàng online, một team bán hàng, hay một dự án cần theo dõi sát sao? Câu hỏi quen thuộc là: làm thế nào để nhận thông báo quan trọng ngay lập tức, không bỏ sót, không phải ngồi nhìn màn hình?

Email từng là lựa chọn mặc định — nhưng thực tế ai cũng biết: email thường bị bỏ qua, nằm trong inbox hàng chục tin chưa đọc, hoặc bị lọc vào spam. Telegram thì khác.

  • Nhận thông báo ngay lập tức — push notification đến điện thoại trong vài giây.
  • Mở trên mobile cực dễ — không cần đăng nhập, không cần mở browser.
  • Group & Channel mạnh — gửi cho cả nhóm, team, hoặc kênh thông báo riêng.
  • Telegram Bot API miễn phí hoàn toàn — không giới hạn số tin nhắn, hỗ trợ HTML/Markdown formatting đẹp.
  • Không cần server riêng — chạy hoàn toàn từ Google Apps Script, không cần deploy gì thêm.

Kết hợp Google Sheets + Telegram Bot là combo cực kỳ mạnh cho những ai muốn tự động hóa thông báo mà không cần kỹ năng lập trình chuyên sâu. Bài này sẽ hướng dẫn bạn từng bước, từ tạo bot đến 6 ứng dụng thực tế có code đầy đủ sẵn sàng copy-paste.

Bước 1: Tạo Telegram Bot Bằng @BotFather

Mọi bot Telegram đều được tạo và quản lý qua @BotFather — bot chính thức của Telegram. Quá trình tạo chỉ mất khoảng 2 phút:

  1. Mở Telegram trên điện thoại hoặc máy tính.
  2. Tìm kiếm @BotFather và mở cuộc trò chuyện (chọn đúng bot có dấu tích xanh xác minh).
  3. /newbot và nhấn Enter.
  4. BotFather hỏi tên hiển thị của bot — nhập ví dụ: Thông Báo Kho Hàng.
  5. Tiếp theo chọn username (phải kết thúc bằng bot) — ví dụ: khohang_notify_bot.
  6. BotFather trả về BOT_TOKEN — chuỗi dạng: 1234567890:ABCdefGHIjklMNO_pqrSTUvwx.

Quan trọng: Sao chép token này ngay và lưu ở nơi an toàn. Token là chìa khóa để điều khiển bot, không được chia sẻ công khai.

Lưu Token Vào Apps Script Properties (Cách An Toàn)

Không bao giờ hardcode token trực tiếp trong code. Thay vào đó, dùng Script Properties — tương đương với biến môi trường trong Apps Script:

// Chạy hàm này 1 lần để lưu token
function luuCauHinh() {
  PropertiesService.getScriptProperties().setProperties({
    'TG_TOKEN': '1234567890:ABCdefGHI...',  // Thay bằng token thật của bạn
    'TG_CHAT_ID': '-1001234567890'           // Thay bằng chat ID thật (xem Bước 2)
  });
  Logger.log('Đã lưu cấu hình thành công!');
}

// Đọc khi cần dùng
function layToken() {
  return PropertiesService.getScriptProperties().getProperty('TG_TOKEN');
}
function layChatId() {
  return PropertiesService.getScriptProperties().getProperty('TG_CHAT_ID');
}

Vào Apps Script → chọn hàm luuCauHinh → nhấn Run. Chỉ cần làm một lần.

Bước 2: Lấy Chat ID

Chat ID là địa chỉ đích để bot gửi tin nhắn đến. Tùy theo đối tượng nhận mà cách lấy khác nhau:

Lấy Chat ID Cá Nhân

  1. Mở Telegram → tìm bot vừa tạo → nhắn bất kỳ tin gì (ví dụ: "xin chào").
  2. Chạy hàm Apps Script dưới đây để đọc chat_id:
function layChatIdTuDong() {
  const token = PropertiesService.getScriptProperties().getProperty('TG_TOKEN');
  const url = `https://api.telegram.org/bot${token}/getUpdates`;
  const response = UrlFetchApp.fetch(url);
  const data = JSON.parse(response.getContentText());

  if (data.result && data.result.length > 0) {
    const chat = data.result[0].message.chat;
    Logger.log('Chat ID: ' + chat.id);
    Logger.log('Tên: ' + (chat.first_name || chat.title));
  } else {
    Logger.log('Chưa có tin nhắn nào. Hãy nhắn tin cho bot trước!');
  }
}

Xem kết quả trong Execution log — số có thể là dương (cá nhân) hoặc âm (nhóm/channel).

Lấy Chat ID Nhóm

  1. Thêm bot vào nhóm Telegram (nhóm → Add member → tìm username bot).
  2. Nhắn một tin vào nhóm.
  3. Chạy hàm layChatIdTuDong() — chat_id của nhóm sẽ là số âm, dạng -100xxxxxxxxxx.

Lấy Chat ID Channel

  1. Thêm bot vào channel với quyền Admin.
  2. Đăng một bài vào channel.
  3. Chat ID channel cũng là số âm, dạng -100xxxxxxxxxx.

Bước 3: Hàm guiTelegram — Nền Tảng Của Mọi Thứ

Đây là hàm cốt lõi bạn sẽ gọi đi gọi lại trong mọi tình huống. Đặt hàm này ở đầu file Apps Script để tái sử dụng:

/**
 * Gửi tin nhắn Telegram với hỗ trợ HTML formatting
 * @param {string} chatId - Chat ID người nhận (cá nhân, nhóm, hoặc channel)
 * @param {string} message - Nội dung tin nhắn (hỗ trợ HTML tags)
 */
function guiTelegram(chatId, message) {
  const token = PropertiesService.getScriptProperties().getProperty('TG_TOKEN');
  const url = `https://api.telegram.org/bot${token}/sendMessage`;

  try {
    const response = UrlFetchApp.fetch(url, {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify({
        chat_id: chatId,
        text: message,
        parse_mode: 'HTML'  // Hỗ trợ <b>, <i>, <code>, <a href=...>
      }),
      muteHttpExceptions: true
    });

    const result = JSON.parse(response.getContentText());
    if (!result.ok) {
      Logger.log('Lỗi Telegram: ' + result.description);
    }
  } catch (err) {
    Logger.log('Lỗi kết nối: ' + err.toString());
  }
}

Hàm này đã bao gồm error handling — nếu gửi thất bại sẽ log lỗi thay vì crash toàn bộ script. Bạn có thể test ngay bằng cách gọi:

function testGuiTin() {
  const chatId = PropertiesService.getScriptProperties().getProperty('TG_CHAT_ID');
  guiTelegram(chatId, '✅ <b>Bot đã kết nối thành công!</b>
Google Sheets + Telegram đang hoạt động.');
}

6 Ứng Dụng Thực Tế Với Code Đầy Đủ

1. Thông Báo Đơn Hàng Mới (Trigger onEdit)

Tự động gửi thông báo vào Telegram mỗi khi có đơn hàng mới được nhập vào sheet. Trigger onEdit kích hoạt ngay khi người dùng sửa ô.

/**
 * Trigger: chạy tự động khi có thay đổi trong sheet
 * Cài đặt: Apps Script → Triggers → onEdit → From spreadsheet → On edit
 */
function onEdit(e) {
  const sheet = e.source.getActiveSheet();

  // Chỉ xử lý sheet 'DonHang'
  if (sheet.getName() !== 'DonHang') return;

  // Chỉ kích hoạt khi nhập cột A (Mã đơn), từ hàng 2 trở xuống
  if (e.range.getColumn() !== 1 || e.range.getRow() < 2) return;

  const row = e.range.getRow();
  const maDon = sheet.getRange(row, 1).getValue();
  const ngayDat = sheet.getRange(row, 2).getValue();
  const khach = sheet.getRange(row, 3).getValue();
  const sanPham = sheet.getRange(row, 4).getValue();
  const soLuong = sheet.getRange(row, 5).getValue();
  const tongTien = sheet.getRange(row, 8).getValue();

  // Bỏ qua nếu ô trống hoặc xóa dữ liệu
  if (!maDon) return;

  const chatId = PropertiesService.getScriptProperties().getProperty('TG_CHAT_ID');
  const msg = `🛒 <b>Đơn hàng mới #${maDon}</b>
👤 Khách hàng: ${khach}
📦 Sản phẩm: ${sanPham} (x${soLuong})
💰 Tổng tiền: ${tongTien.toLocaleString('vi-VN')} VNĐ
⏰ Thời gian: ${new Date().toLocaleTimeString('vi-VN')}`;

  guiTelegram(chatId, msg);
}

Lưu ý: Trigger onEdit chạy dưới quyền người dùng hiện tại. Nếu muốn trigger chạy kể cả khi bạn không online, hãy dùng trigger installable thay vì simple trigger.

2. Báo Cáo Doanh Thu Sáng (Tự Động 8h Hàng Ngày)

Mỗi sáng lúc 8h, bot tự tổng hợp doanh số ngày hôm trước và gửi báo cáo vào Telegram nhóm quản lý.

/**
 * Báo cáo doanh thu ngày hôm trước — chạy tự động mỗi sáng 8h
 * Cài đặt: Apps Script → Triggers → baoCaoSangTelegram → Time-driven → Day timer → 8-9am
 */
function baoCaoSangTelegram() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('DonHang');
  const homQua = new Date();
  homQua.setDate(homQua.getDate() - 1); // Ngày hôm qua

  const data = sheet.getDataRange().getValues().slice(1); // Bỏ header

  // Lọc đơn hàng của ngày hôm qua
  const homQuaData = data.filter(r => {
    if (!r[1]) return false;
    const ngayDon = new Date(r[1]);
    return ngayDon.toDateString() === homQua.toDateString();
  });

  const soDon = homQuaData.length;
  const tongDoanhThu = homQuaData.reduce((sum, r) => sum + (Number(r[7]) || 0), 0);
  const doanhThuTrungBinh = soDon > 0 ? Math.round(tongDoanhThu / soDon) : 0;

  // Tính thêm: so sánh với ngày trước đó
  const haiHomTruoc = new Date(homQua);
  haiHomTruoc.setDate(haiHomTruoc.getDate() - 1);
  const haiHomTruocData = data.filter(r => {
    if (!r[1]) return false;
    return new Date(r[1]).toDateString() === haiHomTruoc.toDateString();
  });
  const doanhThuHaiHomTruoc = haiHomTruocData.reduce((sum, r) => sum + (Number(r[7]) || 0), 0);
  const chenh = doanhThuHaiHomTruoc > 0
    ? Math.round((tongDoanhThu - doanhThuHaiHomTruoc) / doanhThuHaiHomTruoc * 100)
    : 0;
  const muiTen = chenh >= 0 ? '📈' : '📉';

  const chatId = PropertiesService.getScriptProperties().getProperty('TG_CHAT_ID');
  const msg = `📊 <b>Báo cáo ngày ${homQua.toLocaleDateString('vi-VN')}</b>
━━━━━━━━━━━━━━━
📦 Tổng đơn: <b>${soDon} đơn</b>
💰 Doanh thu: <b>${tongDoanhThu.toLocaleString('vi-VN')} VNĐ</b>
📊 Đơn TB: ${doanhThuTrungBinh.toLocaleString('vi-VN')} VNĐ
${muiTen} So hôm trước: ${chenh >= 0 ? '+' : ''}${chenh}%
━━━━━━━━━━━━━━━
⏰ Báo cáo tự động lúc 8:00 sáng`;

  guiTelegram(chatId, msg);
}

3. Cảnh Báo Tồn Kho Thấp

Bot quét bảng tồn kho và cảnh báo ngay khi có sản phẩm sắp hết hoặc đã hết hàng — không cần ngồi kiểm tra thủ công.

/**
 * Cảnh báo tồn kho — nên chạy mỗi sáng hoặc mỗi chiều
 * Sheet 'TonKho' cần có cột: A=Mã SP, B=Tên SP, C-E=thông tin khác,
 *   F=Tồn hiện tại (cột 6), G=Tồn tối thiểu (cột 7)
 */
function canhBaoKhoTelegram() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TonKho');
  const data = sheet.getDataRange().getValues().slice(1);

  // Phân loại: hết hàng vs sắp hết
  const hetHang = data.filter(r => Number(r[5]) <= 0 && r[1]);
  const sapHet = data.filter(r => Number(r[5]) > 0 && Number(r[5]) <= Number(r[6]) && r[1]);

  // Không có vấn đề gì thì không gửi (tránh spam)
  if (hetHang.length === 0 && sapHet.length === 0) {
    Logger.log('Kho hàng ổn định, không cần cảnh báo.');
    return;
  }

  let msg = '⚠️ <b>Cảnh báo tồn kho</b>
━━━━━━━━━━━━━━━
';

  if (hetHang.length > 0) {
    msg += `🔴 <b>Hết hàng (${hetHang.length} sản phẩm):</b>
`;
    msg += hetHang.map(r => `• ${r[1]} — còn 0`).join('
');
    msg += '

';
  }

  if (sapHet.length > 0) {
    msg += `🟡 <b>Sắp hết (${sapHet.length} sản phẩm):</b>
`;
    msg += sapHet.map(r => `• ${r[1]} — còn ${r[5]} (tối thiểu: ${r[6]})`).join('
');
  }

  msg += `
━━━━━━━━━━━━━━━
⏰ ${new Date().toLocaleString('vi-VN')}`;

  const chatId = PropertiesService.getScriptProperties().getProperty('TG_CHAT_ID');
  guiTelegram(chatId, msg);
}

4. Báo Cáo Tuần (Thứ 2 Sáng)

Đầu tuần mới, tự động gửi tổng kết tuần trước: doanh số, top sản phẩm, so sánh với tuần trước đó.

/**
 * Báo cáo tuần — cài trigger chạy mỗi Thứ 2, 8-9am
 */
function baoCaoTuanTelegram() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DonHang');
  const data = sheet.getDataRange().getValues().slice(1);

  // Tính ngày đầu/cuối tuần trước
  const homNay = new Date();
  const thu = homNay.getDay(); // 0=CN, 1=T2, ..., 6=T7
  const dauTuanNay = new Date(homNay);
  dauTuanNay.setDate(homNay.getDate() - (thu === 0 ? 6 : thu - 1));
  dauTuanNay.setHours(0, 0, 0, 0);

  const dauTuanTruoc = new Date(dauTuanNay);
  dauTuanTruoc.setDate(dauTuanNay.getDate() - 7);
  const cuoiTuanTruoc = new Date(dauTuanNay);
  cuoiTuanTruoc.setDate(dauTuanNay.getDate() - 1);
  cuoiTuanTruoc.setHours(23, 59, 59, 999);

  // Lọc dữ liệu tuần trước
  const tuanTruocData = data.filter(r => {
    if (!r[1]) return false;
    const d = new Date(r[1]);
    return d >= dauTuanTruoc && d <= cuoiTuanTruoc;
  });

  const soDon = tuanTruocData.length;
  const doanhThu = tuanTruocData.reduce((s, r) => s + (Number(r[7]) || 0), 0);

  // Top 3 sản phẩm bán chạy (cột D = tên sản phẩm, cột E = số lượng)
  const spMap = {};
  tuanTruocData.forEach(r => {
    const sp = r[3] || 'Khác';
    spMap[sp] = (spMap[sp] || 0) + (Number(r[4]) || 1);
  });
  const topSp = Object.entries(spMap)
    .sort((a, b) => (b[1] as number) - (a[1] as number))
    .slice(0, 3)
    .map(([ten, sl], i) => `${i + 1}. ${ten}: ${sl} cái`);

  const chatId = PropertiesService.getScriptProperties().getProperty('TG_CHAT_ID');
  const label = `${dauTuanTruoc.toLocaleDateString('vi-VN')} – ${cuoiTuanTruoc.toLocaleDateString('vi-VN')}`;

  const msg = `📅 <b>Báo cáo tuần ${label}</b>
━━━━━━━━━━━━━━━
📦 Tổng đơn: <b>${soDon} đơn</b>
💰 Doanh thu: <b>${doanhThu.toLocaleString('vi-VN')} VNĐ</b>

🏆 <b>Top sản phẩm:</b>
${topSp.join('
') || '(Chưa có dữ liệu)'}
━━━━━━━━━━━━━━━`;

  guiTelegram(chatId, msg);
}

5. Nhắc Deadline Task Hàng Ngày

Nếu bạn dùng Google Sheets để quản lý task team, hàm này sẽ tự gửi danh sách task đến hạn trong ngày mai vào Telegram nhóm.

/**
 * Nhắc deadline task — chạy mỗi tối lúc 5pm
 * Sheet 'Tasks' cần có: A=Mã task, B=Tên task, C=Người phụ trách, D=Deadline, E=Trạng thái
 */
function nhacDeadlineTelegram() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tasks');
  const data = sheet.getDataRange().getValues().slice(1);

  const ngayMai = new Date();
  ngayMai.setDate(ngayMai.getDate() + 1);

  // Lọc task chưa xong và đến hạn ngày mai
  const sapDenHan = data.filter(r => {
    if (!r[3] || r[4] === 'Hoàn thành' || r[4] === 'Done') return false;
    return new Date(r[3]).toDateString() === ngayMai.toDateString();
  });

  // Lọc task đã quá hạn nhưng chưa xong
  const quaHan = data.filter(r => {
    if (!r[3] || r[4] === 'Hoàn thành' || r[4] === 'Done') return false;
    return new Date(r[3]) < new Date() && new Date(r[3]).toDateString() !== new Date().toDateString();
  });

  if (sapDenHan.length === 0 && quaHan.length === 0) return;

  let msg = `📋 <b>Nhắc nhở deadline</b>
⏰ Ngày mai: ${ngayMai.toLocaleDateString('vi-VN')}
`;

  if (sapDenHan.length > 0) {
    msg += `
🟡 <b>Đến hạn ngày mai (${sapDenHan.length}):</b>
`;
    msg += sapDenHan.map(r => `• <b>${r[1]}</b> — ${r[2]}`).join('
');
  }

  if (quaHan.length > 0) {
    msg += `

🔴 <b>Đã quá hạn (${quaHan.length}):</b>
`;
    msg += quaHan.map(r => `• <b>${r[1]}</b> — ${r[2]} (hạn: ${new Date(r[3]).toLocaleDateString('vi-VN')})`).join('
');
  }

  const chatId = PropertiesService.getScriptProperties().getProperty('TG_CHAT_ID');
  guiTelegram(chatId, msg);
}

6. Alert Khi Dữ Liệu Bất Thường

Hệ thống tự phát hiện khi doanh số giảm mạnh bất thường và gửi cảnh báo ngay — giúp bạn xử lý kịp thời.

/**
 * Cảnh báo doanh số bất thường — chạy mỗi tối sau giờ làm việc
 * Cảnh báo khi doanh thu hôm nay giảm > 30% so với hôm qua
 */
function alertDoanhSoBatThuong() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DonHang');
  const data = sheet.getDataRange().getValues().slice(1);

  const homNay = new Date();
  const homQua = new Date();
  homQua.setDate(homQua.getDate() - 1);

  const tinhDoanhThu = (ngay) => {
    return data
      .filter(r => r[1] && new Date(r[1]).toDateString() === ngay.toDateString())
      .reduce((s, r) => s + (Number(r[7]) || 0), 0);
  };

  const dtHomNay = tinhDoanhThu(homNay);
  const dtHomQua = tinhDoanhThu(homQua);

  // Chỉ cảnh báo khi có đủ dữ liệu để so sánh
  if (dtHomQua === 0) return;

  const phanTram = Math.round((dtHomNay - dtHomQua) / dtHomQua * 100);

  // Cảnh báo khi giảm > 30%
  if (phanTram < -30) {
    const chatId = PropertiesService.getScriptProperties().getProperty('TG_CHAT_ID');
    const msg = `🚨 <b>CẢNH BÁO: Doanh số bất thường!</b>
━━━━━━━━━━━━━━━
📉 Hôm nay: <b>${dtHomNay.toLocaleString('vi-VN')} VNĐ</b>
vs Hôm qua: ${dtHomQua.toLocaleString('vi-VN')} VNĐ
⬇️ Giảm: <b>${Math.abs(phanTram)}%</b>
━━━━━━━━━━━━━━━
⚠️ Cần kiểm tra ngay!`;

    guiTelegram(chatId, msg);
  }
}

Định Dạng Tin Nhắn Đẹp Với HTML

Telegram Bot API hỗ trợ HTML formatting — giúp tin nhắn rõ ràng và chuyên nghiệp hơn nhiều so với plain text. Khi dùng parse_mode: 'HTML', bạn có thể dùng các thẻ sau:

HTML Tag Kết quả hiển thị Ví dụ
<b>...</b> Chữ đậm <b>Quan trọng</b>
<i>...</i> Chữ nghiêng <i>Ghi chú</i>
<code>...</code> Monospace <code>ERROR_404</code>
<u>...</u> Gạch chân <u>Khẩn cấp</u>
<a href="...">...</a> Link có thể click <a href="https://...">Xem chi tiết</a>
Xuống dòng Dòng 1 Dòng 2

Mẹo với emoji: Thêm emoji trực tiếp vào string JavaScript, không cần encode. Các emoji hay dùng: 📊 📦 💰 ⚠️ 🚨 ✅ ❌ 🛒 📈 📉 ⏰ 🔴 🟡 🟢

Dấu phân cách đẹp: Dùng ━━━━━━━━━━━━━━━ hoặc ───────────── để tạo đường kẻ ngang trong tin nhắn, giúp phân tách các phần rõ ràng.

Cài Đặt Trigger Tự Động

Để các hàm báo cáo chạy đúng giờ mà không cần can thiệp thủ công, cài đặt Time-driven Trigger:

  1. Mở Apps Script Editor → chọn biểu tượng đồng hồ (Triggers) ở sidebar trái.
  2. Nhấn + Add Trigger ở góc dưới phải.
  3. Điền thông tin:
Hàm Event source Time-based type Thời gian
baoCaoSangTelegram Time-driven Day timer 8am–9am
canhBaoKhoTelegram Time-driven Day timer 9am–10am
nhacDeadlineTelegram Time-driven Day timer 5pm–6pm
baoCaoTuanTelegram Time-driven Week timer Thứ 2, 8am–9am
alertDoanhSoBatThuong Time-driven Day timer 6pm–7pm

Lưu ý về Authorization: Lần đầu cài trigger, Google yêu cầu bạn cấp quyền cho script truy cập Spreadsheet và gọi URL bên ngoài. Nhấn Allow và đăng nhập bằng tài khoản Google của bạn.

Xử Lý Lỗi Và Debug

Một số lỗi thường gặp và cách xử lý:

  • "Unauthorized" (401): Token sai hoặc bot chưa được khởi tạo đúng. Kiểm tra lại token trong Script Properties.
  • "Bad Request: chat not found" (400): Chat ID sai. Đảm bảo bạn đã nhắn tin cho bot trước khi lấy chat_id.
  • "Forbidden: bot was blocked by the user": Người dùng đã block bot. Không thể gửi cho cá nhân này nữa.
  • Không nhận được tin nhắn dù không có lỗi: Kiểm tra lại chat_id — nhóm thường là số âm (-100xxxxxxxxxx).

Để debug, thêm dòng này vào hàm guiTelegram để xem response đầy đủ:

Logger.log('Response: ' + response.getContentText());

Kết Luận

Chỉ với vài chục dòng Apps Script, bạn đã có một hệ thống thông báo tự động hoàn chỉnh: thông báo đơn hàng tức thì, báo cáo doanh thu hàng ngày/hàng tuần, cảnh báo kho hàng, nhắc deadline, và phát hiện bất thường — tất cả đổ thẳng vào Telegram mà bạn luôn mở trên điện thoại.

So với các giải pháp SaaS tốn phí hàng tháng, cách này hoàn toàn miễn phí, dữ liệu nằm trong Google Sheets của bạn, và dễ tùy chỉnh theo đúng nhu cầu thực tế.

Gợi ý bắt đầu: copy hàm guiTelegram vào Apps Script hiện có của bạn, tạo bot qua @BotFather, lấy chat_id, và test ngay hàm testGuiTin(). Khi đã thấy tin nhắn xuất hiện trên Telegram, bạn sẽ biết hệ thống đang hoạt động và có thể tiếp tục tích hợp với dữ liệu thực tế.

Tham khảo thêm: Telegram Bot API Documentation | Google Apps Script Triggers Guide

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp

Google Workspace Certified, 5+ years experience

Bạn thấy bài viết hữu ích?

Đăng ký nhận thông báo khi có bài viết mới.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận