找回密碼
 立即註冊
    查看: 167|回覆: 0

    Webhook 觸發器:讓外部服務一個網址就叫 HA 做事(含外網與安全底線)

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 08:37:55 | 顯示全部樓層 |閱讀模式
    Home Assistant 的 REST API 是「你主動去問它」,要帶長期權杖。Webhook 剛好反過來:讓外面的東西主動推進來,而且一個網址就夠,不需要任何權杖。方便,所以也要小心用。

    Home Assistant 的 REST API 是「你主動去問它」,要帶長期權杖。Webhook 剛好反過來:讓外面的東西主動推進來,而

    這篇從產生一串夠亂的 id 開始,做出第一個會動的 webhook,教你怎麼確認 HA 真的收到了(這是最容易卡住的地方),然後把帶資料、外網存取、安全底線一次做完。

    全程只需要一台電腦和 Home Assistant,不需要任何硬體。

    步驟 1:先產生一個夠亂的 webhook id

    這一步不能跳,也不能自己打一個好記的。 官方文件的原話是:把 webhook ID 當成密碼看待——用一個獨特、猜不到的值,而且保密。

    任何知道那串 id 的人都能觸發你的自動化,沒有第二道關卡。

    三種產生方式,挑一種:

    方法 A:在 Home Assistant 裡產生(最省事,不用開終端機)

    到 設定 → 工具 → 範本,把左邊整個清空,貼上這兩行:
    1. {% set c = 'abcdef0123456789' %}
    2. {% for _ in range(32) %}{{ c | random }}{% endfor %}
    複製代碼

    你會看到右邊出現一串 32 個字元,例如:
    1. 7f3a9c2e4b81d05f6a2c9e7b4d31f8a0
    複製代碼

    每次你改動左邊的內容,右邊就會重算一次,所以不喜歡這串的話隨便加一個空格再刪掉,就換一串。

    右邊出現的是 {% ... %} 原文 → 你貼進去的是純文字欄位而不是範本編輯區,或者中間混進了全形的大括號。整段刪掉重貼。

    方法 B:Linux / macOS / 群暉的終端機
    1. openssl rand -hex 16
    複製代碼

    你會看到一串 32 個字元的十六進位,例如:
    1. 7f3a9c2e4b81d05f6a2c9e7b4d31f8a0
    複製代碼

    方法 C:Windows 的 PowerShell

    按 Win+R 輸入 powershell,貼上:
    1. -join ((48..57) + (97..102) | Get-Random -Count 32 | % {[char]$_})
    複製代碼

    你會看到同樣格式的 32 字元字串。

    產生出來的東西比預期短很多(例如只有幾個字)→ 指令貼上時被換行切斷了,整行重貼一次。

    把它前面加一個看得懂的前綴,方便你以後認出它是做什麼的:
    1. notify-7f3a9c2e4b81d05f6a2c9e7b4d31f8a0
    複製代碼

    ⚠ 不要用 test、webhook1、door、my-hook 這種。 掃描機器人會把常見字串跑一遍,這不是理論上的風險。

    步驟 2:做出第一個 webhook 自動化

    設定 → 自動化與場景 → 建立自動化 → 建立新的自動化,右上三點 → 以 YAML 編輯,整段換成:
    1. alias: "Webhook 測試"
    2. id: webhook_hello
    3. description: "最小可用的 webhook,收到就跳一則通知"
    4. mode: parallel
    5. max: 10
    6. triggers:
    7.   - trigger: webhook
    8.     webhook_id: hello-7f3a9c2e4b81d05f6a2c9e7b4d31f8a0
    9.     allowed_methods:
    10.       - POST
    11.     local_only: true
    12. conditions: []
    13. actions:
    14.   - action: notify.persistent_notification
    15.     data:
    16.       title: "Webhook 進來了"
    17.       message: >
    18.         時間 {{ now().strftime('%H:%M:%S') }},
    19.         方法 {{ trigger.data | default({}) }},
    20.         JSON {{ trigger.json | default('(無)') }}
    複製代碼

    把那串 id 換成你步驟 1 產生的。存檔。

    以下還有約 80% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 00:43 , Processed in 0.142967 second(s), 25 queries .

    快速回覆 返回頂部 返回列表