Khắc phục Bot Telegram không gửi thông báo từ Home Assistant

Hiện nay telegram bị chặn tại Việt Nam gây ảnh hưởng tới rất nhiều Bot Telegram không gửi thông báo tự động hóa từ Home Assistant về. Để khắc phục lỗi bot telegram không gửi tin nhắn về các bạn làm theo cách của mình dưới này nhé.

Yêu cầu

Mở tài khoản trên fly.io để có thể triển khai app kích hoạt gọi API telegram
Máy tính Debian / Ubuntu / Alpine để có thể deploy app cho fly.io

Chuẩn bị máy tính Debian / Ubuntu / Alpine

Các bạn truy cập vào SSH máy tính đang chạy hoặc vào terminal trực tiếp trên máy. Tạo file setup_flyio_env.sh này để khởi tạo môi trường làm việc với fly.io.
Lưu ý: Chỉ nên chạy user bình thường ko nên chạy quyền root nhé

đầu tiên bạn tạo file setup_flyio_env.sh bằng lệnh

Bash
nano setup_flyio_env.sh

dán đoạn mã bên dưới vào trình soạn thảo nano. Sau đó Ctrl+X -> bấm Y -> Enter. File của bạn đã được lưu.

Bash
#!/bin/bash

set -e

echo "Cập nhật và cài công cụ cơ bản..."
sudo apt update
sudo apt install -y curl git build-essential procps file

echo "Cài Homebrew cho Linux..."
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Thêm brew vào môi trường shell
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

echo "Cài Fly.io CLI (flyctl)..."
brew install flyctl

# Đảm bảo flyctl hoạt động trong shell hiện tại
if ! command -v flyctl >/dev/null 2>&1; then
  echo "Đang nạp lại PATH cho flyctl..."
  eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
fi

echo "Đăng nhập Fly.io (sẽ mở trình duyệt)..."
flyctl auth login

echo "Hoàn tất. Bạn có thể chạy lệnh flyctl như: flyctl launch --name your-app-name --region sin --no-deploy"

Cấp quyền thực thi và chạy nó

Bash
chmod +x setup_flyio_env.sh
source ./setup_fly.sh

Nếu thành công bạn sẽ nhận được thông báo: Môi trường đã sẵn sàng. Giờ bạn có thể chạy.

Đăng nhập fly.io và tạo app

Lúc nãy sẽ hiện ra mục Đăng nhập vào fly.io yêu cầu copy link dạng này dán vào cửa sổ trình duyệt mới để tiến hành đăng nhập

Bash
https://fly.io/app/auth/cli/7a32676e6561747a697464776c6e37626464703765326535656e6c653 

Bạn hãy mở liên kết đó ra tiến hành đăng nhập, sau khi đăng nhập xong quay trở lại màn hình terminal sẽ có thông báo thành công là được

Sau khi đăng nhập xong giờ tiến hành tạo app. Đầu tiên bạn sẽ phải tạo file app.py bằng nano với lệnh sau nano app.py hãy dán nội dung sau đây vào trong đó, nhớ thay API và CHAT ID của telegram phù hợp nhé.

Python
from flask import Flask, request, jsonify
import requests
import os

app = Flask(__name__)

BOT_TOKEN = os.getenv("BOT_TOKEN", "")
CHAT_ID = os.getenv("CHAT_ID", "-")

@app.route("/", methods=["POST"])
def notify():
    try:
        data = request.get_json(force=True)
        message = data.get("message", "No message provided")

        url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
        payload = {
            "chat_id": CHAT_ID,
            "text": message,
            "parse_mode": "Markdown"
        }

        res = requests.post(url, json=payload)
        return jsonify({
            "status_code": res.status_code,
            "telegram_response": res.text
        }), res.status_code

    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080)

Sau đó Ctrl+X -> bấm Y -> Enter để lưu lại và tạo file tiếp theo có tên Dockerfile cũng bằng lệnh nano Dockerfile chứa mã dưới này xong lưu lại

Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY app.py .
RUN pip install flask requests
CMD ["python", "app.py"]

Tạo app tren Fly

gõ câu lệnh sau đây để tạo app trên Fly nhưng chưa deploy nó

Bash
flyctl launch --name teleproxy-btn-sgp --region sin --no-deploy

Nó hỏi gì cũng gõ Y hết để nó trả về link cấu hình app

Tương tự ở đây mình cũng copy cái link đó mở ra trình duyệt để cấu hình app. Có một thông số bạn cần quan tâm đó là vùng Region nên chọn sin cho tốc độ phản hồi tốt nhất. Sau đó bấm Comfirm setting để hoàn tất và quay lại cửa sổ Terminal

Nó chạy xong dòng lệnh sẽ tạo ra 1 file có tên là fly.toml. Bạn cần phải sửa 1 chút ở trong file này tránh app nó tự động ngủ. Dùng câu lệnh nano fly.toml mở file ra tìm dòng

Bash
auto_stop_machines = "stop"

# Sửa dòng này thành 

auto_stop_machines = true

Lưu lại file. Giờ chúng ta sẽ đẩy nó lên server bằng lệnh

Bash
flyctl deploy

Đợi 1 tí nếu deploy thành công nó sẽ trả về cho bạn liên kết của máy chủ có dạng https://teleproxy-btn-sing.fly.dev/ có nghĩa là đã triển khai thành công. Các bạn có thể kiểm tra trên trang quản lý của fly.io nếu hiển thị bấm vào bạn thấy lưu lượng ram đang dùng … là ok.

Dưới đây là câu lệnh để thử xem chức năng của app có hoạt động hay chưa. Các bạn dán vào chạy nếu telegram của bạn nhận được thông báo Chúc mừng bạn đã thành công là mọi thứ trên app đều ổn. Chuyển tiếp sang bước cấu hình trên HA

YAML
curl -X POST https://telegram-proxy-sing.fly.dev/send -H "Content-Type: application/json" -d '{"message": "Chúc mừng bạn đã thành công"}'<br>

Cấu hình trên Home assistant

Truy cập vào file configuration.yaml để thêm đoạn mã sau đây

YAML
rest_command:
  send_telegram_fly:
    url: "https://teleproxy-btn-sing.fly.dev/"
    method: POST
    headers:
      Content-Type: application/json
    payload: '{"message": "{{ message }}"}'

Lưu file lại và khởi động lại máy chủ HA. Lưu ý đường link trong code phải khớp với đường link lúc nãy deploy app trả về nha fen.

Tự động hóa gửi thông báo telegram trên Home assistant

Bạn cứ tạo một tự động hóa như bạn muốn. Hành động cuối cùng là gửi tin nhắn bạn hãy tìm hành động có tên rest_command.send_telegram_fly. Nội dung tin nhắn là soạn thảo bằng mã. Dưới đây là 1 ví dụ bạn tham khảo rồi tự sửa cho phù hợp với cá nhân

YAML
alias: Gửi báo cáo cuối tháng qua Telegram
triggers:
  - at: "23:45:00"
    trigger: time
conditions: []
actions:
  - data:
      message: >-
        {{ states('sensor.hien_thang') }}: Sản lượng
        {{states('sensor.tong_tieu_thang_ct2') }} kWh, Điện mua {{
        states('sensor.dien_mua_evn_th') | float | round(2) }} kWh, số tiền là
        {{ states('sensor.tien_evn_doc') }}, tổng tiền dùng {{
        states('sensor.tien_khong_solar_doc') }}
    action: rest_command.send_telegram_fly
mode: single

Chúc các bạn thành công.

5 1 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
1 Bình luận
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận
Duc Vu Van
Duc Vu Van
Tháng 6 4, 2025 4:51 chiều

đã làm theo và thành công

1
0
Rất thích suy nghĩ của bạn, hãy bình luận.x