Từ Văn Bản đến Phương Tiện Truyền Thông: Tự động hóa iMessages bằng AppleScript
By JoeVu, at: 10:42 Ngày 22 tháng 11 năm 2024
Thời gian đọc ước tính: __READING_TIME__ minutes


Sau khi tự động hóa thành công việc gửi tin nhắn văn bản bằng AppleScript, tôi quyết định đẩy giới hạn và khám phá việc gửi nội dung đa phương tiện — hình ảnh, tệp âm thanh và thậm chí cả tin nhắn văn bản ngẫu nhiên. Hành trình mới này đã hé lộ cả những khả năng thú vị và những thách thức bất ngờ.
Bước 1: Tạo tập lệnh
Để gửi hình ảnh hoặc tệp âm thanh, AppleScript cần tương tác với cả ứng dụng Messages và hệ thống tệp macOS. Đây là một phiên bản đơn giản hóa của tập lệnh tôi đã sử dụng ban đầu:
tell application "Messages"
set targetBuddy to "[email protected]"
set targetService to id of 1st service whose service type = iMessage
set theMessage to "Check this out!"
set theFile to POSIX file "/path/to/your/file.jpg"
send theFile to buddy targetBuddy of service id targetService
end tell
Để gửi tin nhắn văn bản ngẫu nhiên, tôi đã tạo một danh sách các tin nhắn đã được viết sẵn và sử dụng một bộ tạo số ngẫu nhiên đơn giản:
set randomMessages to {"Hello!", "How's it going?", "This is automated but still thoughtful!", "Random message time!"}
set theMessage to some item of randomMessage
Bước 2: Thành công ban đầu
Khi tôi lần đầu tiên thử nghiệm tập lệnh, các tệp đã được gửi hoàn hảo, và tôi thấy các tin nhắn đa phương tiện xuất hiện trong iMessage. Mọi thứ dường như hoạt động như mong đợi.
Bước 3: Bí ẩn về các tin nhắn thất bại
Tuy nhiên, sau khi chạy tập lệnh thêm một vài lần nữa, tôi nhận thấy điều gì đó kỳ lạ. Trong khi tin nhắn văn bản được gửi liên tục, các tệp hình ảnh và âm thanh bắt đầu bị lỗi sau vài phút. Các tệp đơn giản là không gửi được, và không có lỗi nào được báo cáo bởi tập lệnh.
Bước 4: Khắc phục sự cố
Sau một vài lần thử gỡ lỗi, tôi phát hiện ra rằng việc thay đổi thư mục tệp đã giải quyết được vấn đề. Ban đầu, tôi đang lấy tệp từ thư mục Music
, nhưng việc chuyển sang Pictures
hoặc Downloads
đã làm cho tập lệnh hoạt động hoàn hảo trở lại. Điều này khiến tôi nghi ngờ rằng vấn đề liên quan đến quyền của macOS, vì một số ứng dụng như Messages có thể đã hạn chế quyền truy cập vào các thư mục cụ thể.
Tập lệnh đã được cập nhật
Đây là tập lệnh đã được sửa đổi với thư mục tệp được hiệu chỉnh:
tell application "Messages"
set targetBuddy to "[email protected]"
set targetService to id of 1st service whose service type = iMessage
set theFile to POSIX file "/Users/joe/Downloads/test_image.jpg" -- Thư mục đã được cập nhật
send theFile to buddy targetBuddy of service id targetService
end tell
Thông tin chi tiết về Quyền
Trải nghiệm này làm nổi bật một khía cạnh quan trọng của bảo mật macOS:
- Hộp cát và Quyền: Một số thư mục, như
Music
, có thể có thêm các hạn chế khi được truy cập bởi các ứng dụng hoặc tập lệnh của bên thứ ba.
- Cách giải quyết: Sử dụng các thư mục cho phép hơn như
Pictures
hoặcDownloads
thường có thể giải quyết các vấn đề như vậy.
Các bước tiếp theo
Quá trình tự động hóa tin nhắn phương tiện với AppleScript đã dạy cho tôi tầm quan trọng của việc hiểu về quyền tệp và thích ứng với các ràng buộc của hệ thống. Trong tương lai, tôi dự định:
- Khám phá việc lựa chọn tệp động để tạo tập lệnh tương tác hơn.
- Thử nghiệm việc kết hợp tin nhắn văn bản và tin nhắn đa phương tiện.
- Kiểm tra tích hợp với Automator để lập lịch trình cho các tập lệnh này.
Kết luận
Việc gửi nội dung đa phương tiện bằng AppleScript là một thử thách bổ ích. Mặc dù vấn đề về quyền đã làm tăng thêm độ phức tạp, nhưng việc khắc phục nó đã giúp tôi hiểu sâu hơn về hoạt động bên trong của macOS. Nếu bạn đang bắt đầu tự động hóa với AppleScript, hãy nhớ rằng: sự kiên trì là chìa khóa, và đôi khi giải pháp đơn giản như việc chọn đúng thư mục.
Toàn bộ nội dung của applescript ở đây
-- Định nghĩa địa chỉ email người nhận
set recipientEmail to "[email protected]"
-- Chỉ định đường dẫn đầy đủ đến tệp âm thanh
-- set audioFilePath to "/Users/joe/Pictures/2345.png"
set audioFilePath to "/Users/joe/Pictures/1.m4a"
--set audioFilePath to "/Users/joe/Pictures/1.mp3"
-- Danh sách các tin nhắn được xác định trước
set messageList to {"Hello from the Glinteco", "This is fun script", "Play around with Glinteco"}
-- Chọn một tin nhắn ngẫu nhiên
set randomIndex to random number from 1 to (count messageList)
set randomMessage to item randomIndex of messageList
-- Đảm bảo tệp âm thanh tồn tại bằng Finder
set audioFile to POSIX file audioFilePath
tell application "Finder"
if not (exists audioFile) then
display dialog "Tệp âm thanh đã chỉ định không tồn tại." buttons {"OK"} default button "OK"
return
end if
end tell
-- Gửi iMessage với tin nhắn ngẫu nhiên và tệp âm thanh
tell application "Messages"
set targetService to 1st account whose service type = iMessage
set targetBuddy to participant recipientEmail of targetService
-- Gửi tin nhắn ngẫu nhiên trước
send randomMessage to targetBuddy
-- Tạm dừng để đảm bảo tin nhắn được gửi trước tệp
delay 1
-- Gửi tệp âm thanh
send file audioFile to targetBuddy
end tell