Todo List == Voicemail Automation
You can use Home Asisstance Todo List integration to create a dope automation that acts like an answering machine. Whenever your smart home needs to send you a message, it can send it to voicemail where it can be replayed later. The best part is that you don't need to wait for an event for something to be placed into voicemail. Anything you manually place in voicemail will be replayed later once you activate the trigger.
Voicemail Automation (With GPT)
This automation has 2 main parts. The first section is the trigger which adds items to the voicemail todo list. This trigger will not add duplicates (most of the time). The second part of the trigger will replay each item in the list and remove them from the list. NOTE: This automation requires the use of AI-Intent Nodes to leveral GPT. Check the menu and search for AI-Intent to learn more.
[{"id":"f4999f1ee13b4648","type":"group","z":"af557af378c3e27d","name":"Leave a voicemail","style":{"fill":"#ffbfbf","label":true,"stroke":"#92d04f"},"nodes":["40afb4f0ce7dbc9f","34ea609c0590180e","7342f7daded838b8","3db05d34bb757d04"],"x":74,"y":639,"w":512,"h":162},{"id":"8b00ca47f62fbc1a","type":"subflow","name":"Save Todo","info":"","category":"","in":[{"x":60,"y":80,"wires":[{"id":"890a8440a7b75a26"}]}],"out":[{"x":960,"y":160,"wires":[{"id":"25744a8a0c141efc","port":0}]}],"env":[{"name":"entity","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}},{"name":"summary","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}},{"name":"description","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}}],"meta":{},"color":"#DDAA99"},{"id":"62c6a8cd8fea534d","type":"api-call-service","z":"8b00ca47f62fbc1a","name":"Get voicemails","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"todo","service":"get_items","areaId":[],"deviceId":[],"entityId":["{{_payload.entity}}"],"data":"{\"status\":\"needs_action\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"results","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":260,"y":120,"wires":[["7cffccaf720e0ac0","4449b09edc20ce09"]]},{"id":"7cffccaf720e0ac0","type":"function","z":"8b00ca47f62fbc1a","name":"does message exist","func":"const {entity, summary} = msg._payload\nconst doesExist = msg.results[entity].items.some(item => {\n return item.summary === summary\n})\n\nif(doesExist){\n return [msg]\n}\n\nreturn [null, msg]","outputs":2,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":240,"y":160,"wires":[["25744a8a0c141efc"],["cd6e923e8c351cb1","49a837db148f7c90"]],"outputLabels":["Message Exists","Does not Exists"]},{"id":"cd6e923e8c351cb1","type":"api-call-service","z":"8b00ca47f62fbc1a","name":"Save Voicemail","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"todo","service":"add_item","areaId":[],"deviceId":[],"entityId":["{{_payload.entity}}"],"data":"{\"item\": msg._payload.summary, \"description\": msg._payload.description}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"results","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":480,"y":200,"wires":[["25744a8a0c141efc"]]},{"id":"890a8440a7b75a26","type":"function","z":"8b00ca47f62fbc1a","name":"normalize","func":"\nmsg._payload = {\n entity: env.get(\"entity\") || msg.payload.entity,\n description: env.get(\"description\") || msg.payload.description,\n summary: env.get(\"summary\") || msg.payload.summary\n}\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":80,"wires":[["62c6a8cd8fea534d"]]},{"id":"25744a8a0c141efc","type":"change","z":"8b00ca47f62fbc1a","name":"","rules":[{"t":"delete","p":"_payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":160,"wires":[[]]},{"id":"4449b09edc20ce09","type":"debug","z":"8b00ca47f62fbc1a","name":"debug 163","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":550,"y":60,"wires":[]},{"id":"49a837db148f7c90","type":"debug","z":"8b00ca47f62fbc1a","name":"debug 164","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":490,"y":320,"wires":[]},{"id":"40afb4f0ce7dbc9f","type":"Register Intent","z":"af557af378c3e27d","g":"f4999f1ee13b4648","name":"leave_voicemail","description":"Leave a message behind for the user to listen to when they enter the master bedroom","excludeFromOpenAi":true,"x":180,"y":720,"wires":[["3db05d34bb757d04"]]},{"id":"34ea609c0590180e","type":"comment","z":"af557af378c3e27d","g":"f4999f1ee13b4648","name":"Leave Voicemail","info":"# Requirements\nThe `Call Intent` node should send the\nfollowing properties\n\n## summary\nThe main title or spark notes of the\nvoicemail\n> Required\n\n## description\nA more detailed note on what the message\nentails\n> Optional","x":180,"y":680,"wires":[]},{"id":"7342f7daded838b8","type":"api-current-state","z":"af557af378c3e27d","g":"f4999f1ee13b4648","name":"In master bedroom","server":"228d3d53.df8e02","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"binary_sensor.master_bedroom_presence_sensor","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":470,"y":760,"wires":[["adca7f011c9d6b89"],[]]},{"id":"3db05d34bb757d04","type":"subflow:8b00ca47f62fbc1a","z":"af557af378c3e27d","g":"f4999f1ee13b4648","name":"","env":[{"name":"entity","value":"todo.voicemail","type":"str"}],"x":190,"y":760,"wires":[["7342f7daded838b8"]]},{"id":"228d3d53.df8e02","type":"server","name":"Home Assistant","addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"","connectionDelay":false,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"","statusSeparator":"","enableGlobalContextStore":false},{"id":"f79298166090a2b9","type":"group","z":"af557af378c3e27d","name":"Play voicemail","style":{"label":true,"stroke":"#ff0000","fill":"#e3f3d3"},"nodes":["f892322659662e07","7a652c9cd79d56e2","27f16b66e2595f8a","7be84dcd4d2d1ffe","97deb471a7150c7f","cf6f4ba3d9908272","4f2b420fc1ff0474","b76b7dd61bbe9860","5eb587f745498a85","e3030dcca13f3096","ad3d81e42bb81996","4a0080362d6ab3ac","1a43aba8f643ce6d","c2235c18c8b35c6d","fb0c1a2b2dc32f6e","adca7f011c9d6b89","c1bec9e8c52c1bf1","5a005732ef7b5c24","866d23745ce938cb","4230bfb7f58ee8df","ab6ce1bc3d3a7b73"],"x":654,"y":619,"w":1032,"h":462},{"id":"656499388a4aa37d","type":"subflow","name":"Telegram Facade","info":"","category":"","in":[{"x":80,"y":40,"wires":[{"id":"44693c7b4594740b"}]}],"out":[{"x":940,"y":140,"wires":[{"id":"c3da1d823169d296","port":0}]}],"env":[{"name":"Method","type":"str","value":"sendMessage","ui":{"type":"select","opts":{"opts":[{"l":{"en-US":"Send Message"},"v":"sendMessage"},{"l":{"en-US":"Edit Message"},"v":"editMessage"},{"l":{"en-US":"Typing Status"},"v":"typing"}]}}},{"name":"Message key","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}},{"name":"Use message key as prompt","type":"bool","value":"false","ui":{"type":"checkbox"}},{"name":"Inline_Keyboard key","type":"str","value":"","ui":{"type":"input","opts":{"types":["str","json"]}}},{"name":"Use inline_keyboard as value","type":"bool","value":"false","ui":{"type":"checkbox"}},{"name":"Keyboard key","type":"str","value":""},{"name":"Use keyboard key as value","type":"bool","value":"false","ui":{"type":"checkbox"}},{"name":"debounce","type":"num","value":"","ui":{"type":"input","opts":{"types":["num"]}}}],"meta":{},"color":"#DDAA99"},{"id":"c71f58691e6b25ac","type":"function","z":"656499388a4aa37d","name":"Normalize Data","func":"const useMessageKeyAsPrompt = env.get(\"Use message key as prompt\");\nconst useKeyboardKeyAsValue = env.get(\"Use keyboard key as value\");\nconst useInlineKeyboardKeyAsValue = env.get(\"Use inline_keyboard as value\");\nlet message = sugar.Object.get(msg, env.get(\"Message key\"))\nlet inline_keyboard = sugar.Object.get(msg, env.get(\"Inline_Keyboard key\")) || []\nlet keyboard = sugar.Object.get(msg, env.get(\"Keyboard key\")) || []\nconst payload = {\n method: env.get(\"Method\"),\n body: { \n chat_id: Number(global.get(\"GROUP_CHAT_ID\")),\n }\n \n}\nlet reply_markup = {}\n\nmsg.telegram = {message, keyboard, inline_keyboard}\n\nif (useMessageKeyAsPrompt) {\n message = env.get(\"Message key\")\n msg.telegram.message = env.get(\"Message key\")\n}\n\nif (useKeyboardKeyAsValue) {\n keyboard = env.get(\"Keyboard key\") || []\n msg.telegram.keyboard = env.get(\"Keyboard key\") || []\n}\n\nif (useInlineKeyboardKeyAsValue) {\n inline_keyboard = env.get(\"Inline_Keyboard key\") || []\n msg.telegram.inline_keyboard = env.get(\"Inline_Keyboard key\") || []\n}\nif(inline_keyboard.length){\n // inline_keyboard = createReplyKeyboard(inline_keyboard)\n msg.telegram.inline_keyboard = inline_keyboard\n delete msg.telegram.keyboard\n reply_markup = {\n keyboard:[],\n inline_keyboard\n }\n}\n\nif (keyboard.length) {\n // keyboard = createReplyKeyboard(keyboard)\n msg.telegram.keyboard = keyboard\n delete msg.telegram.inline_keyboard\n reply_markup = {\n one_time_keyboard: true,\n resize_keyboard: true,\n keyboard: keyboard,\n }\n}\n\nif(!keyboard.length && ! inline_keyboard.length){\n delete msg.telegram.inline_keyboard\n delete msg.telegram.keyboard\n // payload.response.speech.plain.speech\n}\n\n\n\n\nif ([\"sendMessage\", \"editMessage\"].includes(env.get(\"Method\"))) {\n payload.body.text = message;\n payload.body.parse_mode = \"html\",\n msg.telegram.parse_mode = \"html\"\n payload.body.reply_markup = reply_markup\n}else{\n payload.body.action = env.get(\"Method\");\n payload.method = \"sendChatAction\"\n} \n\nif (env.get(\"Method\") === \"editMessage\") {\n payload.body.message_id = global.get(\"message_id\");\n msg.telegram.message_id = global.get(\"message_id\");\n}\n\nmsg.data = payload\n\nreturn msg;\n\n\nfunction createReplyKeyboard(buttons = []){\n const keyboard = []\n \n buttons.forEach(button => {\n if(typeof button === \"string\"){\n const commands = []\n button.split(\",\").forEach(item => {\n const [text =\"\", callback_data =\"\"] = item.split(\":\")\n\n commands.push({ text: text.trim(), callback_data: callback_data?.trim() })\n })\n keyboard.push(commands)\n \n }else if(Array.isArray(button)){\n const keyboardInputs = button.reduce((agg, item) => {\n const buttons = item.split(\",\");\n const commands = [];\n\n buttons.forEach(item => {\n const [text = \"\", callback_data = \"\"] = item.split(\":\")\n \n commands.push({ text: text.trim(), callback_data: callback_data.trim() })\n })\n agg.push(commands)\n \n return agg\n },[]);\n\n keyboard.push(keyboardInputs)\n }\n })\n\n return keyboard\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[{"var":"sugar","module":"sugar"}],"x":260,"y":80,"wires":[["09ece744e725aa5a"]]},{"id":"c3da1d823169d296","type":"change","z":"656499388a4aa37d","name":"Clean up","rules":[{"t":"set","p":"payload","pt":"msg","to":"cache","tot":"msg","dc":true},{"t":"delete","p":"cache","pt":"msg"},{"t":"delete","p":"data","pt":"msg"},{"t":"delete","p":"telegram","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":140,"wires":[[]]},{"id":"44693c7b4594740b","type":"change","z":"656499388a4aa37d","name":"Cache Payload","rules":[{"t":"set","p":"cache","pt":"msg","to":"payload","tot":"msg","dc":true}],"action":"","property":"","from":"","to":"","reg":false,"x":260,"y":40,"wires":[["c71f58691e6b25ac"]]},{"id":"43c30b643c3df338","type":"ha-api","z":"656499388a4aa37d","d":true,"name":"Send Thinking Status","server":"228d3d53.df8e02","version":1,"debugenabled":false,"protocol":"http","method":"post","path":"https://api.telegram.org/bot{{global.TELEGRAM}}/{{data.method}}","data":"msg.data.body","dataType":"jsonata","responseType":"json","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"x":280,"y":220,"wires":[[]]},{"id":"64aba95844f48d22","type":"api-call-service","z":"656499388a4aa37d","name":"Send Message","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"telegram_bot","service":"send_message","areaId":[],"deviceId":[],"entityId":[],"data":"msg.telegram","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":560,"y":100,"wires":[["c3da1d823169d296"]]},{"id":"09ece744e725aa5a","type":"switch","z":"656499388a4aa37d","name":"","property":"Method","propertyType":"env","rules":[{"t":"eq","v":"sendMessage","vt":"str"},{"t":"eq","v":"editMessage","vt":"str"},{"t":"eq","v":"typing","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":290,"y":140,"wires":[["64aba95844f48d22"],["b2cea0faea5a9a9d"],[]]},{"id":"b2cea0faea5a9a9d","type":"api-call-service","z":"656499388a4aa37d","name":"Edit Message","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"telegram_bot","service":"edit_message","areaId":[],"deviceId":[],"entityId":[],"data":"msg.telegram","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":560,"y":140,"wires":[["c3da1d823169d296"]]},{"id":"f892322659662e07","type":"server-state-changed","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"Toggle Occupancy Gate","server":"228d3d53.df8e02","version":5,"outputs":2,"exposeAsEntityConfig":"","entityId":"binary_sensor.master_bedroom_presence_sensor","entityIdType":"exact","outputInitially":false,"stateType":"str","ifState":"on","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"presence","valueType":"str"}],"x":790,"y":700,"wires":[["adca7f011c9d6b89"],[]]},{"id":"7a652c9cd79d56e2","type":"json","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"toString","property":"payload","action":"str","pretty":false,"x":1000,"y":780,"wires":[["27f16b66e2595f8a"]]},{"id":"27f16b66e2595f8a","type":"OpenAI System","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"","instruction":"Pretend you are a voicemail designed to capture\nmessages from my smart-home devices.\n\nHere are messages you should summarize:\n\n{payload}","x":1020,"y":820,"wires":[["7be84dcd4d2d1ffe"]]},{"id":"7be84dcd4d2d1ffe","type":"OpenAI User","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"","content":"what did i missed?","x":1010,"y":860,"wires":[["97deb471a7150c7f"]]},{"id":"97deb471a7150c7f","type":"OpenAI Chat","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"","model":"gpt-4-1106-preview","temperature":0.7,"max_tokens":1200,"top_p":1,"frequency_penalty":0,"presence_penalty":0,"x":1010,"y":900,"wires":[["cf6f4ba3d9908272"]]},{"id":"cf6f4ba3d9908272","type":"OpenAI Response","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"","x":1030,"y":940,"wires":[["4f2b420fc1ff0474"]]},{"id":"4f2b420fc1ff0474","type":"change","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"set message","rules":[{"t":"set","p":"message","pt":"msg","to":"payload[0].args.response","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1270,"y":760,"wires":[["b76b7dd61bbe9860","5eb587f745498a85"]]},{"id":"b76b7dd61bbe9860","type":"api-call-service","z":"af557af378c3e27d","d":true,"g":"f79298166090a2b9","name":"create a scene","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"scene","service":"create","areaId":[],"deviceId":[],"entityId":[],"data":"{\"scene_id\":\"master_speaker\", \"snapshot_entities\": \"media_player.master_bedroom_display\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1280,"y":800,"wires":[["5eb587f745498a85"]]},{"id":"5eb587f745498a85","type":"api-current-state","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"Master Volume","server":"228d3d53.df8e02","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_number.global_volume","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"volume","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1280,"y":840,"wires":[["e3030dcca13f3096"]]},{"id":"e3030dcca13f3096","type":"api-call-service","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"adjust volume","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"media_player","service":"volume_set","areaId":[],"deviceId":[],"entityId":["media_player.master_bedroom_display"],"data":"{\"volume_level\": msg.volume}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1280,"y":880,"wires":[["ad3d81e42bb81996"]]},{"id":"ad3d81e42bb81996","type":"api-call-service","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"tts","service":"cloud_say","areaId":[],"deviceId":[],"entityId":["media_player.master_bedroom_display"],"data":"{\"message\": msg.message}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1270,"y":920,"wires":[["4a0080362d6ab3ac","1a43aba8f643ce6d"]]},{"id":"4a0080362d6ab3ac","type":"ha-wait-until","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"wait until announcement is done","server":"228d3d53.df8e02","version":2,"outputs":1,"entityId":"media_player.master_bedroom_display","entityIdFilterType":"exact","property":"state","comparator":"is","value":"idle","valueType":"str","timeout":"0","timeoutType":"num","timeoutUnits":"seconds","checkCurrentState":true,"blockInputOverrides":false,"outputProperties":[],"entityLocation":"data","entityLocationType":"none","x":1330,"y":960,"wires":[["c2235c18c8b35c6d"]]},{"id":"1a43aba8f643ce6d","type":"subflow:656499388a4aa37d","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"","env":[{"name":"Message key","value":"message","type":"str"}],"x":1570,"y":920,"wires":[[]]},{"id":"c2235c18c8b35c6d","type":"change","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"clear","rules":[{"t":"delete","p":"data","pt":"msg"},{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1250,"y":1000,"wires":[["fb0c1a2b2dc32f6e"]]},{"id":"fb0c1a2b2dc32f6e","type":"api-call-service","z":"af557af378c3e27d","d":true,"g":"f79298166090a2b9","name":"restore scene","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"scene","service":"turn_on","areaId":[],"deviceId":[],"entityId":["scene.master_speaker"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1280,"y":1040,"wires":[[]]},{"id":"adca7f011c9d6b89","type":"api-call-service","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"Get voicemails","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"todo","service":"get_items","areaId":[],"deviceId":[],"entityId":["todo.voicemail"],"data":"{\"status\":\"needs_action\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"results","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":760,"y":760,"wires":[["c1bec9e8c52c1bf1"]]},{"id":"c1bec9e8c52c1bf1","type":"switch","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"has voicemails","property":"results[\"todo.voicemail\"].items","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":760,"y":820,"wires":[["5a005732ef7b5c24"]]},{"id":"5a005732ef7b5c24","type":"change","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"results[\"todo.voicemail\"].items","tot":"msg","dc":true}],"action":"","property":"","from":"","to":"","reg":false,"x":760,"y":860,"wires":[["ab6ce1bc3d3a7b73","7a652c9cd79d56e2"]]},{"id":"866d23745ce938cb","type":"comment","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"Automatically runs voicemail when room is occupied","info":"# Requirements\nThe `Call Intent` node should send the\nfollowing properties\n\n## message\nThe main title or spark notes of the\nvoicemail\n> Required\n\n## description\nA more detailed note on what the message\nentails\n> Optional","x":870,"y":660,"wires":[]},{"id":"4230bfb7f58ee8df","type":"api-call-service","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"delete Voicemail","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"todo","service":"remove_item","areaId":[],"deviceId":[],"entityId":["todo.voicemail"],"data":"{\"item\": msg.payload.summary}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"results","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":760,"y":940,"wires":[[]]},{"id":"ab6ce1bc3d3a7b73","type":"split","z":"af557af378c3e27d","g":"f79298166090a2b9","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":730,"y":900,"wires":[["4230bfb7f58ee8df"]]}]
Voicemail Automation (No GPT)
This automation is the same as the first except it does not require AI-Intent and does not use GPT to summarize the list.
[{"id":"f353644f6db2af5e","type":"group","z":"af557af378c3e27d","name":"Play voicemail","style":{"label":true,"stroke":"#ff0000","fill":"#e3f3d3"},"nodes":["cc0bcf6991d88ba8","bdc86379fa1f607f","fad6b9381207b671","5d8c8f3c45808262","f572b7a381c19d32","967476e3942c2a22","6497dfa58512eb78","7c95c7636bcf36d2","cddae0f48a704668","38e6806a3401c5d6","30a5ca7e3823bbdd","356e80a9772ace27","fb3404fd3b9620d3","49fcc9b199f8a382","b43abed7280ce497","96264b2e86aa7939"],"x":174,"y":2099,"w":1032,"h":462},{"id":"656499388a4aa37d","type":"subflow","name":"Telegram Facade","info":"","category":"","in":[{"x":80,"y":40,"wires":[{"id":"44693c7b4594740b"}]}],"out":[{"x":940,"y":140,"wires":[{"id":"c3da1d823169d296","port":0}]}],"env":[{"name":"Method","type":"str","value":"sendMessage","ui":{"type":"select","opts":{"opts":[{"l":{"en-US":"Send Message"},"v":"sendMessage"},{"l":{"en-US":"Edit Message"},"v":"editMessage"},{"l":{"en-US":"Typing Status"},"v":"typing"}]}}},{"name":"Message key","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}},{"name":"Use message key as prompt","type":"bool","value":"false","ui":{"type":"checkbox"}},{"name":"Inline_Keyboard key","type":"str","value":"","ui":{"type":"input","opts":{"types":["str","json"]}}},{"name":"Use inline_keyboard as value","type":"bool","value":"false","ui":{"type":"checkbox"}},{"name":"Keyboard key","type":"str","value":""},{"name":"Use keyboard key as value","type":"bool","value":"false","ui":{"type":"checkbox"}},{"name":"debounce","type":"num","value":"","ui":{"type":"input","opts":{"types":["num"]}}}],"meta":{},"color":"#DDAA99"},{"id":"c71f58691e6b25ac","type":"function","z":"656499388a4aa37d","name":"Normalize Data","func":"const useMessageKeyAsPrompt = env.get(\"Use message key as prompt\");\nconst useKeyboardKeyAsValue = env.get(\"Use keyboard key as value\");\nconst useInlineKeyboardKeyAsValue = env.get(\"Use inline_keyboard as value\");\nlet message = sugar.Object.get(msg, env.get(\"Message key\"))\nlet inline_keyboard = sugar.Object.get(msg, env.get(\"Inline_Keyboard key\")) || []\nlet keyboard = sugar.Object.get(msg, env.get(\"Keyboard key\")) || []\nconst payload = {\n method: env.get(\"Method\"),\n body: { \n chat_id: Number(global.get(\"GROUP_CHAT_ID\")),\n }\n \n}\nlet reply_markup = {}\n\nmsg.telegram = {message, keyboard, inline_keyboard}\n\nif (useMessageKeyAsPrompt) {\n message = env.get(\"Message key\")\n msg.telegram.message = env.get(\"Message key\")\n}\n\nif (useKeyboardKeyAsValue) {\n keyboard = env.get(\"Keyboard key\") || []\n msg.telegram.keyboard = env.get(\"Keyboard key\") || []\n}\n\nif (useInlineKeyboardKeyAsValue) {\n inline_keyboard = env.get(\"Inline_Keyboard key\") || []\n msg.telegram.inline_keyboard = env.get(\"Inline_Keyboard key\") || []\n}\nif(inline_keyboard.length){\n // inline_keyboard = createReplyKeyboard(inline_keyboard)\n msg.telegram.inline_keyboard = inline_keyboard\n delete msg.telegram.keyboard\n reply_markup = {\n keyboard:[],\n inline_keyboard\n }\n}\n\nif (keyboard.length) {\n // keyboard = createReplyKeyboard(keyboard)\n msg.telegram.keyboard = keyboard\n delete msg.telegram.inline_keyboard\n reply_markup = {\n one_time_keyboard: true,\n resize_keyboard: true,\n keyboard: keyboard,\n }\n}\n\nif(!keyboard.length && ! inline_keyboard.length){\n delete msg.telegram.inline_keyboard\n delete msg.telegram.keyboard\n // payload.response.speech.plain.speech\n}\n\n\n\n\nif ([\"sendMessage\", \"editMessage\"].includes(env.get(\"Method\"))) {\n payload.body.text = message;\n payload.body.parse_mode = \"html\",\n msg.telegram.parse_mode = \"html\"\n payload.body.reply_markup = reply_markup\n}else{\n payload.body.action = env.get(\"Method\");\n payload.method = \"sendChatAction\"\n} \n\nif (env.get(\"Method\") === \"editMessage\") {\n payload.body.message_id = global.get(\"message_id\");\n msg.telegram.message_id = global.get(\"message_id\");\n}\n\nmsg.data = payload\n\nreturn msg;\n\n\nfunction createReplyKeyboard(buttons = []){\n const keyboard = []\n \n buttons.forEach(button => {\n if(typeof button === \"string\"){\n const commands = []\n button.split(\",\").forEach(item => {\n const [text =\"\", callback_data =\"\"] = item.split(\":\")\n\n commands.push({ text: text.trim(), callback_data: callback_data?.trim() })\n })\n keyboard.push(commands)\n \n }else if(Array.isArray(button)){\n const keyboardInputs = button.reduce((agg, item) => {\n const buttons = item.split(\",\");\n const commands = [];\n\n buttons.forEach(item => {\n const [text = \"\", callback_data = \"\"] = item.split(\":\")\n \n commands.push({ text: text.trim(), callback_data: callback_data.trim() })\n })\n agg.push(commands)\n \n return agg\n },[]);\n\n keyboard.push(keyboardInputs)\n }\n })\n\n return keyboard\n}","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[{"var":"sugar","module":"sugar"}],"x":260,"y":80,"wires":[["09ece744e725aa5a"]]},{"id":"c3da1d823169d296","type":"change","z":"656499388a4aa37d","name":"Clean up","rules":[{"t":"set","p":"payload","pt":"msg","to":"cache","tot":"msg","dc":true},{"t":"delete","p":"cache","pt":"msg"},{"t":"delete","p":"data","pt":"msg"},{"t":"delete","p":"telegram","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":140,"wires":[[]]},{"id":"44693c7b4594740b","type":"change","z":"656499388a4aa37d","name":"Cache Payload","rules":[{"t":"set","p":"cache","pt":"msg","to":"payload","tot":"msg","dc":true}],"action":"","property":"","from":"","to":"","reg":false,"x":260,"y":40,"wires":[["c71f58691e6b25ac"]]},{"id":"43c30b643c3df338","type":"ha-api","z":"656499388a4aa37d","d":true,"name":"Send Thinking Status","server":"228d3d53.df8e02","version":1,"debugenabled":false,"protocol":"http","method":"post","path":"https://api.telegram.org/bot{{global.TELEGRAM}}/{{data.method}}","data":"msg.data.body","dataType":"jsonata","responseType":"json","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"x":280,"y":220,"wires":[[]]},{"id":"64aba95844f48d22","type":"api-call-service","z":"656499388a4aa37d","name":"Send Message","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"telegram_bot","service":"send_message","areaId":[],"deviceId":[],"entityId":[],"data":"msg.telegram","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":560,"y":100,"wires":[["c3da1d823169d296"]]},{"id":"09ece744e725aa5a","type":"switch","z":"656499388a4aa37d","name":"","property":"Method","propertyType":"env","rules":[{"t":"eq","v":"sendMessage","vt":"str"},{"t":"eq","v":"editMessage","vt":"str"},{"t":"eq","v":"typing","vt":"str"}],"checkall":"false","repair":false,"outputs":3,"x":290,"y":140,"wires":[["64aba95844f48d22"],["b2cea0faea5a9a9d"],[]]},{"id":"b2cea0faea5a9a9d","type":"api-call-service","z":"656499388a4aa37d","name":"Edit Message","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"telegram_bot","service":"edit_message","areaId":[],"deviceId":[],"entityId":[],"data":"msg.telegram","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":560,"y":140,"wires":[["c3da1d823169d296"]]},{"id":"cc0bcf6991d88ba8","type":"server-state-changed","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"Toggle Occupancy Gate","server":"228d3d53.df8e02","version":5,"outputs":2,"exposeAsEntityConfig":"","entityId":"binary_sensor.master_bedroom_presence_sensor","entityIdType":"exact","outputInitially":false,"stateType":"str","ifState":"on","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"topic","propertyType":"msg","value":"presence","valueType":"str"}],"x":310,"y":2180,"wires":[["38e6806a3401c5d6"],[]]},{"id":"bdc86379fa1f607f","type":"api-call-service","z":"af557af378c3e27d","d":true,"g":"f353644f6db2af5e","name":"create a scene","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"scene","service":"create","areaId":[],"deviceId":[],"entityId":[],"data":"{\"scene_id\":\"master_speaker\", \"snapshot_entities\": \"media_player.master_bedroom_display\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":800,"y":2280,"wires":[["fad6b9381207b671"]]},{"id":"fad6b9381207b671","type":"api-current-state","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"Master Volume","server":"228d3d53.df8e02","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_number.global_volume","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"volume","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":800,"y":2320,"wires":[["5d8c8f3c45808262"]]},{"id":"5d8c8f3c45808262","type":"api-call-service","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"adjust volume","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"media_player","service":"volume_set","areaId":[],"deviceId":[],"entityId":["media_player.master_bedroom_display"],"data":"{\"volume_level\": msg.volume}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":800,"y":2360,"wires":[["f572b7a381c19d32"]]},{"id":"f572b7a381c19d32","type":"api-call-service","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"tts","service":"cloud_say","areaId":[],"deviceId":[],"entityId":["media_player.master_bedroom_display","media_player.office_display"],"data":"{\"message\": msg.message}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":790,"y":2400,"wires":[["967476e3942c2a22","6497dfa58512eb78"]]},{"id":"967476e3942c2a22","type":"ha-wait-until","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"wait until announcement is done","server":"228d3d53.df8e02","version":2,"outputs":1,"entityId":"media_player.master_bedroom_display","entityIdFilterType":"exact","property":"state","comparator":"is","value":"idle","valueType":"str","timeout":"0","timeoutType":"num","timeoutUnits":"seconds","checkCurrentState":true,"blockInputOverrides":false,"outputProperties":[],"entityLocation":"data","entityLocationType":"none","x":850,"y":2440,"wires":[["7c95c7636bcf36d2"]]},{"id":"6497dfa58512eb78","type":"subflow:656499388a4aa37d","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"","env":[{"name":"Message key","value":"message","type":"str"}],"x":1090,"y":2400,"wires":[[]]},{"id":"7c95c7636bcf36d2","type":"change","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"clear","rules":[{"t":"delete","p":"data","pt":"msg"},{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":2480,"wires":[["cddae0f48a704668"]]},{"id":"cddae0f48a704668","type":"api-call-service","z":"af557af378c3e27d","d":true,"g":"f353644f6db2af5e","name":"restore scene","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"scene","service":"turn_on","areaId":[],"deviceId":[],"entityId":["scene.master_speaker"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":800,"y":2520,"wires":[[]]},{"id":"38e6806a3401c5d6","type":"api-call-service","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"Get voicemails","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"todo","service":"get_items","areaId":[],"deviceId":[],"entityId":["todo.voicemail"],"data":"{\"status\":\"needs_action\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"results","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":320,"y":2240,"wires":[["30a5ca7e3823bbdd"]]},{"id":"30a5ca7e3823bbdd","type":"switch","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"has voicemails","property":"results[\"todo.voicemail\"].items","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":320,"y":2280,"wires":[["356e80a9772ace27"]]},{"id":"356e80a9772ace27","type":"change","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"results[\"todo.voicemail\"].items","tot":"msg","dc":true}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":2320,"wires":[["b43abed7280ce497","96264b2e86aa7939"]]},{"id":"fb3404fd3b9620d3","type":"comment","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"Automatically runs voicemail when room is occupied","info":"# Requirements\nThe `Call Intent` node should send the\nfollowing properties\n\n## message\nThe main title or spark notes of the\nvoicemail\n> Required\n\n## description\nA more detailed note on what the message\nentails\n> Optional","x":390,"y":2140,"wires":[]},{"id":"49fcc9b199f8a382","type":"api-call-service","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"delete Voicemail","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"todo","service":"remove_item","areaId":[],"deviceId":[],"entityId":["todo.voicemail"],"data":"{\"item\": msg.payload.summary}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"results","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":320,"y":2400,"wires":[[]]},{"id":"b43abed7280ce497","type":"split","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":350,"y":2360,"wires":[["49fcc9b199f8a382"]]},{"id":"96264b2e86aa7939","type":"function","z":"af557af378c3e27d","g":"f353644f6db2af5e","name":"Create message","func":"const messageBody = msg.payload.map((item, index) => {\n return `${index + 1}: ${item.summary}. \\n` \n}).join(\" \")\n\nconst message = msg.payload.length === 1 ? \"message\" : \"messages\"\nconst messageIntro = `You have ${msg.payload.length} ${message}. `\nconst messageOutro = \"End of messages.\"\n\nmsg.message = `${messageIntro} ${messageBody} ${messageOutro}`\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":2320,"wires":[["fad6b9381207b671","bdc86379fa1f607f"]]},{"id":"228d3d53.df8e02","type":"server","name":"Home Assistant","addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"","connectionDelay":false,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"","statusSeparator":"","enableGlobalContextStore":false},{"id":"039dd303a724b740","type":"group","z":"af557af378c3e27d","name":"Leave a voicemail","style":{"fill":"#ffbfbf","label":true,"stroke":"#92d04f"},"nodes":["00faaf7f543ab772","114db270c9767218","a771ec44fc22b901","314f785a5837a68c"],"x":174,"y":1899,"w":512,"h":162},{"id":"8b00ca47f62fbc1a","type":"subflow","name":"Save Todo","info":"","category":"","in":[{"x":60,"y":80,"wires":[{"id":"890a8440a7b75a26"}]}],"out":[{"x":960,"y":160,"wires":[{"id":"25744a8a0c141efc","port":0}]}],"env":[{"name":"entity","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}},{"name":"summary","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}},{"name":"description","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}}],"meta":{},"color":"#DDAA99"},{"id":"62c6a8cd8fea534d","type":"api-call-service","z":"8b00ca47f62fbc1a","name":"Get voicemails","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"todo","service":"get_items","areaId":[],"deviceId":[],"entityId":["{{_payload.entity}}"],"data":"{\"status\":\"needs_action\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"results","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":260,"y":120,"wires":[["7cffccaf720e0ac0","4449b09edc20ce09"]]},{"id":"7cffccaf720e0ac0","type":"function","z":"8b00ca47f62fbc1a","name":"does message exist","func":"const {entity, summary} = msg._payload\nconst doesExist = msg.results[entity].items.some(item => {\n return item.summary === summary\n})\n\nif(doesExist){\n return [msg]\n}\n\nreturn [null, msg]","outputs":2,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":240,"y":160,"wires":[["25744a8a0c141efc"],["cd6e923e8c351cb1","49a837db148f7c90"]],"outputLabels":["Message Exists","Does not Exists"]},{"id":"cd6e923e8c351cb1","type":"api-call-service","z":"8b00ca47f62fbc1a","name":"Save Voicemail","server":"228d3d53.df8e02","version":5,"debugenabled":false,"domain":"todo","service":"add_item","areaId":[],"deviceId":[],"entityId":["{{_payload.entity}}"],"data":"{\"item\": msg._payload.summary, \"description\": msg._payload.description}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"results","propertyType":"msg","value":"","valueType":"results"}],"queue":"none","x":480,"y":200,"wires":[["25744a8a0c141efc"]]},{"id":"890a8440a7b75a26","type":"function","z":"8b00ca47f62fbc1a","name":"normalize","func":"\nmsg._payload = {\n entity: env.get(\"entity\") || msg.payload.entity,\n description: env.get(\"description\") || msg.payload.description,\n summary: env.get(\"summary\") || msg.payload.summary\n}\n\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":80,"wires":[["62c6a8cd8fea534d"]]},{"id":"25744a8a0c141efc","type":"change","z":"8b00ca47f62fbc1a","name":"","rules":[{"t":"delete","p":"_payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":160,"wires":[[]]},{"id":"4449b09edc20ce09","type":"debug","z":"8b00ca47f62fbc1a","name":"debug 163","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":550,"y":60,"wires":[]},{"id":"49a837db148f7c90","type":"debug","z":"8b00ca47f62fbc1a","name":"debug 164","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":490,"y":320,"wires":[]},{"id":"00faaf7f543ab772","type":"Register Intent","z":"af557af378c3e27d","g":"039dd303a724b740","name":"leave_voicemail","description":"Leave a message behind for the user to listen to when they enter the master bedroom","excludeFromOpenAi":true,"x":280,"y":1980,"wires":[["314f785a5837a68c"]]},{"id":"114db270c9767218","type":"comment","z":"af557af378c3e27d","g":"039dd303a724b740","name":"Leave Voicemail","info":"# Requirements\nThe `Call Intent` node should send the\nfollowing properties\n\n## summary\nThe main title or spark notes of the\nvoicemail\n> Required\n\n## description\nA more detailed note on what the message\nentails\n> Optional","x":280,"y":1940,"wires":[]},{"id":"a771ec44fc22b901","type":"api-current-state","z":"af557af378c3e27d","g":"039dd303a724b740","name":"In master bedroom","server":"228d3d53.df8e02","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"binary_sensor.master_bedroom_presence_sensor","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":570,"y":2020,"wires":[["38e6806a3401c5d6"],[]]},{"id":"314f785a5837a68c","type":"subflow:8b00ca47f62fbc1a","z":"af557af378c3e27d","g":"039dd303a724b740","name":"","env":[{"name":"entity","value":"todo.voicemail","type":"str"}],"x":290,"y":2020,"wires":[["a771ec44fc22b901"]]}]
Voicemail Automation Home Assistant Blueprint (No GPT)
This automation is similar to its node-red counterpart, but it does not have the part of the automation that saves the message into the todo-list. Since home assisant automations are a little different than the node-red version, it is easer if you simply made the service call to store the todo item yourself.
Special thanks to Anderson Imes for creating this blueprint.
Copy the url: https://gist.github.com/andersonimes/1a7aa4771c4ab994a0b95822abdde7f5
On the Blueprints tab, click import and paste the URL.