Extracting Voicemails from email
Home Assistant Automation
Having given up my landline and moved to a voip system. I wanted to grab the information about missed calls and voicemails to Home assistant to send local messages and store the files into the media folder.
Step 1
Reading emails from GMail is quite tricky so I ended up setting up a Zoho account and setting filters in GMail to forward the relevant emails. The reason for this is Zoho allow you to generate Web Hooks when emails arrive, so I was able to set up a simple Web Hook automation triggered when mail arrived.
See dev-platform/webhook at Zoho for instructions.
Step 2
Having extracted the link to the file I set up the folder integration to download to a folder in media. I also needed to add the folder to the allowed list:
homeassistant:
allowlist_external_dirs:
- /media/
- /media/downloads
downloader:
download_dir: /media/downloads
Step 3
I have used variables defined in the automation to extract the information I need from the Json sent in the web hook which then keeps the rest of the automation very clean.
alias: Voicemail
description: ""
trigger:
- platform: webhook
allowed_methods:
- POST
- PUT
- GET
local_only: false
webhook_id: voicemail-has-arrived
condition: []
action:
- service: script.messages_update
data:
action: create_message
message: "{{subject}}"
- if:
- condition: template
value_template: "{{type == 'missed_call'}}"
then:
- service: notify.mobile_app_jane_s_phone
data:
message: "{{subject}}"
data:
actions:
- action: URI
title: Call Number
uri: >-
intent:tel:{{phone_no}}///#Intent;action=android.intent.action.DIAL;end
- service: notify.mobile_app_stephen_phone
data:
message: "{{subject}}"
data:
actions:
- action: URI
title: Call Number
uri: >-
intent:tel:{{phone_no}}///#Intent;action=android.intent.action.DIAL;end
- service: script.messages_update
data:
action: create_message
message: "{{subject}}"
- stop: Missed call - message only
- service: notify.mobile_app_jane_s_phone
data:
data:
actions:
- action: URI
title: View Voicemail
uri: "{{filename}}"
- action: URI
title: Call Number
uri: >-
intent:tel:{{phone_no}}///#Intent;action=android.intent.action.DIAL;end
message: "{{subject}}"
enabled: true
- service: notify.mobile_app_stephen_phone
data:
data:
actions:
- action: URI
title: View Voicemail
uri: "{{filename}}"
- action: URI
title: Call Number
uri: >-
intent:tel:{{phone_no}}///#Intent;action=android.intent.action.DIAL;end
message: "{{subject}}"
enabled: true
- service: downloader.download_file
data:
url: "{{filename}}"
enabled: true
variables:
filename: |-
{% set list = trigger.json.summary |
regex_findall('(https\:\/\/secure.live.sipgate.co.uk\/download.*voice.*mp3)','') %}
{{list[0] or 'NA'}}
matchtable: |-
{% set list = trigger.json.summary |
regex_findall('(https\:\/\/secure.live.sipgate.co.uk\/download.*voice.*mp3)','') %}
{{list}}
subject: >-
{{trigger.json.subject | replace('Fwd:','')}} - {{
as_timestamp(states('sensor.date_time_iso')) | timestamp_custom('%a %B %-d,
%H:%M') }}
type: >-
{% if 'New message' in trigger.json.subject %}voicemail{% else
%}missed_call{% endif %}
phone_no: "{{trigger.json.subject | regex_findall_index('\\d+.?\\d+') }}"
mode: single
Code above updated, so you can now click a button to load the phone dialler ready to call the number. The HA app needs the Phone permission turned on.