Category Archives: Uncategorized

More automatic texting

cat <<‘EOF’ > “$HOME/Desktop/imessage_blast.sh”
#!/bin/bash

csv=”$HOME/Desktop/contacts.csv”
default_message=”Hi, this is Ray! Just reaching out—feel free to reply here or text me back directly. Hope all is well.”

# Check for CSV existence
if [ ! -f “$csv” ]; then
echo “contacts.csv not found on Desktop. Please run the setup script first.” exit 1
fi

# Loop through the CSV, skipping header
while IFS=, read -r number; do
[[ -z “$number” ]] && continue
number=$(echo “$number” | xargs)

echo “Sending to $number…”

osascript <

Update script enhancement

#!/bin/bash

csv=”$HOME/Desktop/contacts.csv”

# Check for CSV
if [ ! -f “$csv” ]; then
echo “contacts.csv not found on Desktop. Please run the setup script first.” exit 1
fi

while IFS=, read -r name number message; do
# Skip empty fields
[[ -z “$name” || -z “$number” || -z “$message” ]] && continue

# Trim whitespace
name=$(echo “$name” | xargs)
number=$(echo “$number” | xargs)
message=$(echo “$message” | xargs)

echo “Sending to $name ($number)…”

# AppleScript to send SMS
osascript <

Script to automate SMS to contacts

#!/bin/bash

csv=”$HOME/Desktop/contacts.csv”

if [ ! -f “$csv” ]; then
echo “contacts.csv not found on Desktop. Please run the setup script first.” exit 1
fi

while IFS=, read -r name number message; do
# Skip empty lines or header
[[ “$name” == “Name” || -z “$name” || -z “$number” || -z “$message” ]] && continue

echo “Sending to $name ($number)…”

osascript <

Create contacts.CSV on desktop with two number

#!/bin/bash

csv=”$HOME/Desktop/contacts.csv”

# Check if file already exists
if [ -f “$csv” ]; then
echo “contacts.csv already exists on your Desktop. Not overwriting.” else
# Create file and add headers and sample data
cat < “$csv”
Name,Phone,Message
Alice,+16781234567,Hey Alice! Ray here, just checking in.
Bob,+14085551234,Hi Bob—hope all’s well!
EOF
echo “contacts.csv created on your Desktop with sample entries.” fi

Workflow prompt Wednesday

Got it! You’re aiming to import a text file (likely CSV or tab-delimited) into your iPhone that contains fields like **name, phone number, and email**, and then automate texting those contacts—right?

Here’s a clearer prompt that reflects your goal:

**Prompt**: _“My objective is to import a plain text file into my iPhone that includes contact data—specifically full name, phone number, and email address. Once imported, I want to automate sending an SMS or iMessage to each contact. The workflow should map each row of the file to a new or existing contact, then send a customized message using Shortcuts, Scriptable, or other iOS-compatible tools.”_

This sets the stage for importing structured contact info and scaling personal messages. From here, we can break it down into parts like:

1. **File format** – CSV, tab-delimited, or even .vcf?
2. **Import method** – Files app, iCloud, Shortcuts, or manual?
3. **Contact creation or sync** – Apple Contacts API, Scriptable, or Shortcut-based automation? 4. **Messaging** – Static vs dynamic message body per contact?

Want to roll with a CSV example and explore how to parse and act on it using Shortcuts or Scriptable? Or are you leaning toward a different method of automation? Let’s fine-tune it together. Sent from my iPhone

v2 JSON V2

{
“WFWorkflowClientRelease”: “2.1”,
“WFWorkflowImportQuestions”: [],
“WFWorkflowTypes”: [],
“WFWorkflowActions”: [
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.documentpicker.open”, “WFWorkflowActionParameters”: {
“WFDocumentPickerMode”: “Import”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.file.read” },
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.split”, “WFWorkflowActionParameters”: {
“WFSeparator”: “,”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.setvariable”, “WFWorkflowActionParameters”: {
“WFVariableName”: “PhoneNumbers”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.remove.duplicates”, “WFWorkflowActionParameters”: {
“WFText”: {
“Type”: “Variable”,
“VariableName”: “PhoneNumbers”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.setvariable”, “WFWorkflowActionParameters”: {
“WFVariableName”: “UniqueNumbers”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.choosefrommenu”, “WFWorkflowActionParameters”: {
“WFMenuItems”: [
{
“WFMenuItemTitle”: “Run Dry Test”,
“WFMenuItemActions”: []
},
{
“WFMenuItemTitle”: “Send Messages”,
“WFMenuItemActions”: []
}
],
“WFMenuPrompt”: “Choose mode:”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.repeat.each”, “WFWorkflowActionParameters”: {
“WFRepeatInput”: {
“Type”: “Variable”,
“VariableName”: “UniqueNumbers”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.getitem”, “WFWorkflowActionParameters”: {
“WFItems”: [
“Hi! This is [Your Name] from [Your Business]. Just reaching out and hope you’re doing well.”,
“Håfa adai! We wanted to touch base and say hello from [Business Name]. Stay safe!”,
“Greetings from [Your Team]—just checking in to share a quick update and warm wishes.”,
“Hello! [Your Business] is reaching out with some exciting news. Let us know how you’ve been!”,
“Hey there! A quick message from [Your Name]—thanks for being part of our journey.” ],
“WFIndex”: {
“Value”: {
“Value”: “Random”,
“Type”: “Magic”
}
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.setvariable”, “WFWorkflowActionParameters”: {
“WFVariableName”: “RandomMessage”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.conditional”, “WFWorkflowActionParameters”: {
“WFCondition”: {
“Value”: {
“Value”: “Provided Input”,
“Type”: “ActionOutput”
},
“Condition”: “is”,
“Value2”: “Run Dry Test”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.comment”, “WFWorkflowActionParameters”: {
“WFCommentActionText”: “Dry run mode: Preview only”
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.showresult”, “WFWorkflowActionParameters”: {
“WFInput”: {
“Value”: “Sending ‘{{RandomMessage}}’ to {{Repeat Item}}”, “Type”: “String”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.nothing” },
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.else” },
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.sendmessage”, “WFWorkflowActionParameters”: {
“WFSendMessageText”: {
“Type”: “Variable”,
“VariableName”: “RandomMessage”
},
“WFSendMessageRecipient”: {
“Type”: “Variable”,
“VariableName”: “Repeat Item”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.getcurrentdate” },
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.combine”, “WFWorkflowActionParameters”: {
“WFText”: [
{
“Type”: “Magic”,
“VariableName”: “RandomMessage”
},
” → “,
{
“Type”: “Magic”,
“VariableName”: “Repeat Item”
},
” @ “,
{
“Type”: “Magic”,
“VariableName”: “Current Date”
}
]
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.text.append”, “WFWorkflowActionParameters”: {
“WFText”: {
“Value”: “Bulk SMS Log”,
“Type”: “String”
}
}
},
{
“WFWorkflowActionIdentifier”: “is.workflow.actions.repeat.end” }
]
}