意图脚本

意图脚本集成允许你为意图配置操作和响应。任何支持意图的集成都可以触发这些意图,例如 Alexa(Amazon Echo)、Dialogflow(Google Assistant)和 Snips。在 Home Assistant 内部,也可以通过自定义语句触发它们。

如果你将意图脚本与 LLM 一起使用,并且包含参数,请确保在描述中写明这些参数及其类型。

# configuration.yaml 配置示例
intent_script:
  GetTemperature:  # Intent type
    description: Return the temperature and notify the user
    speech:
      text: We have {{ states('sensor.temperature') }} degrees
    action:
      action: notify.notify
      data:
        message: Hello from an intent!

在一个意图中,你可以定义以下变量:

intent:
  description: 意图名称。可以有多个条目。
  required: true
  type: map
  keys:
    description:
      description: 意图的描述。
      required: false
      type: string
    platforms:
      description: 该实体支持的域列表。
      required: false
      type: list
    action:
      description: 定义在意图触发时要运行的操作。
      required: false
      type: action
    async_action:
      description: 设置为 True 后,Home Assistant 在返回意图响应前不会等待脚本执行完成。
      required: false
      default: false
      type: boolean
    mode:
      description: 运行意图脚本时使用的[脚本模式](https://www.home-assistant.io/integrations/script/#script-modes)。用它来定义该意图是否可以并行运行多次。
      required: false
      default: single
      type: string
    card:
      description: 要显示的卡片。
      required: false
      type: map
      keys:
        type:
          description: 要显示的卡片类型。
          required: false
          default: simple
          type: string
        title:
          description: 要显示的卡片标题。
          required: true
          type: template
        content:
          description: 要显示的卡片内容。
          required: true
          type: template
    speech:
      description: 要返回的文本或模板。
      required: false
      type: map
      keys:
        type:
          description: 语音类型。
          required: false
          default: plain
          type: string
        text:
          description: 要说出的文本。
          required: true
          type: template

使用操作响应

使用 speech 模板时,已执行操作返回的数据可通过 action_response 变量获取。

conversation:
  intents:
    EventCountToday:
      - "How many meetings do I have today"

intent_script:
  EventCountToday:
    action:
      - action: calendar.get_events
        target:
          entity_id: calendar.my_calendar
        data_template:
          start_date_time: "{{ today_at('00:00') }}"
          duration: { "hours": 24 }
        response_variable: result                     # get action response
      - stop: ""
        response_variable: result                     # and return it
    speech:
      text: "{{ action_response['calendar.my_calendar'].events | length }}"   # use the action's response

操作

可用操作:reload

操作:重新加载

intent_script.reload 操作会从 YAML 配置中重新加载意图脚本,这是比重启 Home Assistant 更快的替代方案。

此操作不接受任何数据属性。