تمام Home Assistant وائس کمانڈز کو ایک کسٹم ایجنٹ کی طرف روٹ کریں

آپ چاہتے ہیں کہ ہر وائس کمانڈ آپ کے اپنے ایجنٹ کے پاس جائے۔ ہو سکتا ہے کہ یہ ایک لوکل LLM ہو یا MCP سپورٹ والا کوئی اسسٹنٹ ہو۔

Home Assistant 2026.5 اور اس سے نئے ورژن میں، اسے کرنے کا روایتی طریقہ ناکام ہو جاتا ہے۔

اگر آپ آٹومیشن میں صرف وائلڈ کارڈ (wildcard) استعمال کرتے ہیں، تو آپ کو HTTP 500 ایرر ملے گا۔ یہ ایرر اس لیے آتا ہے کیونکہ سسٹم ایک ایسی لسٹ تلاش کرتا ہے جو موجود ہی نہیں ہوتی۔

اگر آپ اس ایرر سے بچ بھی جائیں، تب بھی بلٹ ان (built-in) کمانڈز آپ کی درخواستوں کو ہائی جیک کر لیں گی۔ اگر آپ پوچھیں "When is the next low tide" (اگلی کم لہر کب ہے)، تو Home Assistant اس کے بجائے اگلا گانا چلانے کی کوشش کر سکتا ہے۔

یہاں ان دونوں مسائل کا حل دیا گیا ہے۔

مسائل

  1. MissingListError: جب آپ آٹومیشن میں {text} استعمال کرتے ہیں، تو Home Assistant "text" نامی ایک رجسٹرڈ لسٹ کی توقع کرتا ہے۔ چونکہ آپ آٹومیشن میں لسٹیں ڈیفائن نہیں کر سکتے، اس لیے سسٹم کریش ہو جاتا ہے۔

  2. Intent Hijacking: "turn on" یا "play next" جیسی بلٹ ان کمانڈز آپ کے کسٹم ایجنٹ کو موقع ملنے سے پہلے ہی آپ کے الفاظ سے میچ ہو جاتی ہیں۔

حل

آپ کو 'کیچ-آل' (catch-all) لاجک کو آٹومیشنز سے نکال کر کسٹم سینٹینسز (custom sentences) میں منتقل کرنا ہوگا۔ اس سے آپ ایک حقیقی وائلڈ کارڈ ڈیفائن کر سکیں گے اور یہ یقینی ہوگا کہ آپ کی کمانڈ سب سے پہلے لوڈ ہو۔

مرحلہ 1: ایک کسٹم سینٹینس بنائیں اپنے custom_sentences فولڈر میں ایک فائل بنائیں۔ یہ ایک حقیقی وائلڈ کارڈ لسٹ کو رجسٹر کرتا ہے۔

language: "en"
intents:
  NaturaliQuery:
    data:
      - sentences:
          - "{text}"
lists:
  text:
    wildcard: true

مرحلہ 2: intent_script کا استعمال کریں آٹومیشن کے بجائے، اپنی configuration.yaml میں intent_script استعمال کریں۔ یہ جواب کو ہینڈل کرتا ہے اور وائس پائپ لائن کو ہموار رکھتا ہے۔

intent_script:
  NaturaliQuery:
    speech:
      text: "One moment."
    action:
      - action: mqtt.publish
        data:
          topic: my/agent/ask
          payload: '{"text": "{{ text }}"}'

یہ کیوں کام کرتا ہے

• وائلڈ کارڈ لسٹ HTTP 500 ایرر کو روکتی ہے۔ • کسٹم سینٹینسز بلٹ ان انٹینٹس (intents) سے پہلے لوڈ ہوتے ہیں۔ آپ کا ایجنٹ کمانڈ کو سب سے پہلے پکڑ لیتا ہے۔ • intent_script کا استعمال کرنے سے بہت سے ہارڈ ویئر سیٹلائٹس پر وائس ڈیڈ لاک (voice deadlocks) سے بچا جا سکتا ہے۔

نوٹ: ایک مکمل وائلڈ کارڈ ہر چیز کو پکڑ لے گا، بشمول "turn on the lights"۔ اگر آپ نیٹیو کنٹرول برقرار رکھنا چاہتے ہیں، تو اپنے کسٹم سینٹینس میں ایک پری فکس (prefix) لفظ شامل کریں تاکہ یہ صرف تب ہی ٹرگر ہو جب آپ چاہیں۔

Source: https://dev.to/clarkbw--/route-all-home-assistant-voice-to-a-custom-agent-with-a-wildcard-sentence-4iee

Optional learning community: https://t.me/GyaanSetuAi