You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
4.6 KiB

######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Joanna Send Telegram - Shared Telegram delivery helper
# Chunks long messages and sends them through BearClaw's direct Telegram transport.
# -------------------------------------------------------------------
# Notes: Shared helper moved out of packages so cross-file callers resolve from config/script.
# Notes: Primary BearClaw Telegram ingress/delivery now lives directly in the dedicated codex_appliance VM.
# Notes: Keep Joanna/BearClaw decision logic in codex_appliance/server.js; this script is HA-side delivery fallback only.
######################################################################
joanna_send_telegram:
alias: Joanna Send Telegram
description: Sends resilient Telegram messages through BearClaw with chunking and plain-text fallback.
mode: queued
fields:
message:
description: Message body to send.
example: Joanna is online.
parse_mode:
description: Telegram parse mode (`plain_text` or `html`).
example: html
disable_web_page_preview:
description: Whether Telegram should suppress web page previews.
example: true
chat_id:
description: Optional Telegram chat override. Leave empty to use BearClaw defaults.
example: "7976075034"
user:
description: Optional BearClaw user hint for target resolution.
example: carlo
sequence:
- variables:
chunk_size: 3400
requested_parse_mode: >-
{% set raw = parse_mode | default('plain_text', true) | string | lower | trim %}
{% if raw in ['html', 'plain_text'] %}
{{ raw }}
{% else %}
plain_text
{% endif %}
preview_disabled: "{{ disable_web_page_preview | default(true, true) }}"
target_chat_id: "{{ chat_id | default('', true) | string | trim }}"
target_user: "{{ user | default('carlo', true) | string | trim }}"
normalized_message: >-
{% set raw = message | default('', true) | string %}
{{ raw | replace('\r\n', '\n') | replace('\r', '\n') | trim }}
safe_message: >-
{% if normalized_message | length > 0 %}
{{ normalized_message }}
{% else %}
Joanna: (empty message)
{% endif %}
total_chunks: >-
{% set size = chunk_size | int(3400) %}
{% set length = safe_message | length %}
{{ ((length + size - 1) // size) if length > 0 else 1 }}
- repeat:
count: "{{ total_chunks | int(1) }}"
sequence:
- variables:
start: "{{ ((repeat.index | int(1)) - 1) * (chunk_size | int(3400)) }}"
stop: "{{ start + (chunk_size | int(3400)) }}"
chunk_body: "{{ safe_message[start:stop] }}"
chunk_message: >-
{% if (total_chunks | int(1)) > 1 %}
[{{ repeat.index }}/{{ total_chunks }}]
{{ chunk_body }}
{% else %}
{{ chunk_body }}
{% endif %}
fallback_message: >-
{{ chunk_message
| regex_replace(find='[\x00-\x08\x0B\x0C\x0E-\x1F]', replace=' ')
| trim }}
telegram_send_response: null
- service: rest_command.bearclaw_telegram_send
continue_on_error: true
data:
message: "{{ chunk_message }}"
parse_mode: "{{ requested_parse_mode }}"
disable_web_page_preview: "{{ preview_disabled }}"
chat_id: "{{ target_chat_id }}"
user: "{{ target_user }}"
response_variable: telegram_send_response
- choose:
- conditions:
- condition: template
value_template: >-
{% set status = telegram_send_response.status | default(0, true) | int(0) %}
{{ status == 0 or status >= 300 }}
sequence:
- service: rest_command.bearclaw_telegram_send
continue_on_error: true
data:
message: "{{ fallback_message if fallback_message | length > 0 else 'Joanna: message delivery fallback (content omitted)' }}"
parse_mode: plain_text
disable_web_page_preview: "{{ preview_disabled }}"
chat_id: "{{ target_chat_id }}"
user: "{{ target_user }}"

Powered by TurnKey Linux.