Can't get announce to work with conversation.process

I am trying to create a TTS announcement using OpenAI as a conversation agent to generate and send to my Sonos Speaker as an announcement.

I have a conversation.process service call that looks like this

service: conversation.process
metadata: {}
data:
  agent_id: c0db164c2385ed1d4315b51db51475b3
  text: >-
    Skriv ett glatt och possitivt meddelande till familjen, på Svenska i löptext
    utan emojis. Just nu är det {{ states('sensor.date_time') }}. {% if
    states('binary_sensor.workday_sensor') == 'off' %}Idag är en helgdag och vi
    är lediga{%- endif %}{% if states('binary_sensor.workday_sensor') == 'on'
    %}Idag är en vardag och vi arbetar och går i skola{%- endif %}. Texten
    kommer läsas upp genom text to speach i en högtalare vid köksbordet.
    Familjen består av mamma, pappa och en 9 årig son som heter Albin.
    Meddelandet skall beskriva dagens väder på ett roligt sätt med temperatur
    och vad det är för väder nu och hur vädret kommer bli idag. Vi tycker om
    värme och sol och gillar inte regn och snö så mycket. Vädret är {{
    states('weather.smhi_home') }} med {{
    states('sensor.outside_filtered_realistic_temperature') | round }} grader
    ute. Det kommer bli {{ state_attr('weather.forecast_home',
    'forecast')[0].condition }} med högsta temperatur på {{
    state_attr('weather.forecast_home', 'forecast')[0].temperature | round}}
    grader. Meddelandet skall även innehåll vad det är för dag och dagens datum
    och vilka som har namnsdag. Det är idag {{
    state_attr('sensor.template_sidebar', 'dag') }} den {{
    state_attr('sensor.template_sidebar', 'datum') }} och {{
    states('sensor.nameday_se') }} har namnsdag. Meddelandet skall även
    innehålla vad som står på kalendern idag, i närtid och kommande veckan. I
    kalendern står det {% for event in H16["calendar.gympa_local"]["events"] %}
    {{ event.summary }} {{ as_timestamp(event.start) | timestamp_custom('%H:%M')
    }} {% endfor %}{% for event in H16["calendar.pascal_local"]["events"] %} {{
    event.summary }} {{ as_timestamp(event.start) | timestamp_custom('%H:%M') }}
    {% endfor %} {%for event in H16["calendar.victoriaskolan_local"]["events"]
    %} {{ event.summary }} {{ as_timestamp(event.start) | timestamp_custom('%A
    %H:%M')}} {% endfor %} {% for event in
    H16["calendar.fam_vilnersson"]["events"] %} {{ event.summary }} {{
    as_timestamp(event.start) | timestamp_custom('%H:%M') }} {% endfor %} {% for
    event in H36["calendar.stad_local"]["events"] %} {{ event.summary }} {{
    as_timestamp(event.start) | timestamp_custom('%A %H:%M')}} {% endfor %}  {%
    if state_attr('sensor.template_sidebar', 'dag') == 'Söndag' %} {% for event
    in H120["calendar.victoriaskolan_local"]["events"] %} {{ event.summary }} {{
    as_timestamp(event.start) | timestamp_custom('%A %H:%M') }} {% endfor %}  {%
    for event in H120["calendar.fam_vilnersson"]["events"] %} {{ event.summary
    }} {{ as_timestamp(event.start) | timestamp_custom('%A %H:%M') }} {% endfor
    %} {%- endif %} {% for event in H16["calendar.ical_middag"]["events"]
    %}Meddelandet skall även innehålla vad som är planerat som middag idag, idag
    är det planerat {{ event.summary  | regex_replace('Middag: ' ) |
    replace('&', 'och') }}{% endfor %} {% if not
    states('skolmat.victoriaskolan') == 'Ingen mat' and not
    states('input_boolean.skollov') == 'on' %}Meddelandet skall även innehålla
    vad är för mat på Victoriaskolan idag, om det inte är helg. Idag är det {{
    states('skolmat.victoriaskolan') | regex_replace('\n.+') | replace('&',
    'och') }} till lunch.{%- endif %}
response_variable: chatgpt
enabled: true

If I send this to a notification or even by tts.speak it works perfectly but when I try to use it as an announcement on the media_speker platform I do not work.

This now works perfectly

service: tts.speak
metadata: {}
data:
  cache: true
  media_player_entity_id: media_player.play_1_koket
  message: "{{ chatgpt.response.speech.plain.speech }}"
target:
  entity_id: tts.home_assistant_cloud
enabled: true

This one does not work,

service: media_player.play_media
target:
  entity_id: media_player.lilla_rummet_ikea
data:
  announce: true
  media_content_id: >
    media-source://tts/cloud?message="{{ chatgpt.response.speech.plain.speech
    }}"
  media_content_type: music
  extra:
    volume: 15
enabled: true

I can’t find any error anywhere, can someone please help me with what I am missing?

The combination of block-scalar > and quotes is the issue. There are few ways to work around the problem.

Use \ to escape the quotation marks:

media_content_id: |
  media-source://tts/cloud?message=\"{{ chatgpt.response.speech.plain.speech }}\"

Concatenate the strings in an expression:

media_content_id: >
    {{ 'media-source://tts/cloud?message="' ~ chatgpt.response.speech.plain.speech ~ '"'}} %}

Use raw statements to demarcate raw text:

media_content_id: >
    {% raw %}media-source://tts/cloud?message="{%- endraw %}
    {{- chatgpt.response.speech.plain.speech }}{%- raw %}"{% endraw %}
1 Like

Ok, that makes sense. The second one here worked perfectly. Thanks @Didgeridrew I appreciate your help!