LiquidFiles Documentation
LiquidFiles Documentation
Updated v4.0

User Delivery Actionscripts

User Delivery Actionscripts adds custom delivery options for users. This can be used to automatically trigger actions when a message has been delivered to a user. You can use this to automatically copy files to a SMB share, FTP or SFTP server, trigger API calls to other systems and similar actions.

You can install or upload scripts by going to Admin → Configuration → Actionscripts. Please see the Actionscript Installation instruction for more details. When you have installed the script, you can enable the User Action Actionscript on a per user basis in Admin → Users.

When the script is executed, it will be exectured similar to:

your_actionscript.ext filedata.json

The filedata file (which in reality will be a randomized filename), will have content like the following JSON output:

{
  "id":"8pz77fP8c3gJdQiCd1hqzA",
  "sender":"sender@mycompany.com",
  "recipients":["john.doe@company1.com"],
  "ccs":["jane.doe@company2.com","ken.smith@company3.com"],
  "expires_at":"2018-12-04",
  "expires_after":0,
  "authorization":1,
  "size":12620046,
  "subject":"Example Message Subject",
  "message":"Example Message Body",
  "private_message":false,
  "authorization_description":"Anyone (with access to the randomized link) can access",
  "created_at":"2018-06-07T12:45:25.000Z",
  "attachments":[
    {
      "id":"Ok24eOJA1LuaQHFzNV4GMl",
      "filename":"01-12345 our drawings1of2.pdf",
      "size":10782517,
      "content_type":"application/pdf",
      "checksum":"2a5c809063b5831b3d73e4a294879fd056942b70b967f6ed7767c757a1f5bae2",
      "crc32":"3ad5a39c",
      "created_at":"2018-06-07T12:44:42.000Z",
      "system_file":"/data/domains/default/files/users/604/20180607_Ok24eOJA1LuaQHFzNV4GMl/01-12345_our_drawings1of2.pdf"
    },{
      "id":"mr60K8v511Se0r3Ba9Imn7",
      "filename":"01-12345 our drawings2of2.pdf",
      "size":1837529,
      "content_type":"application/pdf",
      "checksum":"483d57c9cb71b43dc73826579a25624118f0b8f65928524ed8747ebe1dc41d5c",
      "crc32":"a493dc29",
      "created_at":"2018-06-07T12:44:45.000Z",
      "system_file":"/data/domains/default/files/users/604/20180607_mr60K8v511Se0r3Ba9Imn7/01-12345_our_drawings2of2.pdf"
    }
  ]
}

Please see the Message API for a description of each field. The only difference from the Message API is that there's no URL and instead there's a "system_file" for each attachment. It's this "system_file" parameter you can use to process files.

Please see the following example Actionscript that will copy all files to a SMB/Windows server share:

#!/usr/bin/env ruby
require 'json'

#######################################
username="username"
password="password"
share="//10.20.30.44/incoming"
#######################################

message_data = JSON.parse(File.read(ARGV[0]))

message_data["attachments"].each do |attachment|
  system_file = attachment["system_file"]
  %x{cat #{system_file} | \
    env PASSWD='#{password}' smbclient #{share} -U #{username} -d 0 -c 'put - "#{attachment['filename']}"'}
end

If you examine the script, you can see that the script parses the JSON output from the filedata file. It will then iterate over each attachment and copy the files to the SMB share. In the beginning of the script are some handy variables.

Another example would be:

#!/usr/bin/env ruby
require 'json'

##############################################
username="username"
password="password"
hostname="sftp://some_sftp_server_host_or_ip"
##############################################

message_data = JSON.parse(File.read(ARGV[0]))
files = message_data["attachments"].map {|a| a["system_file"] }.join(",")
%x{curl -sS --insecure --user #{username}:#{password} -T "{#{files}}" #{hostname}}

This script is similar but uses curl to upload the files so supports all protocols that curl supports: sftp, scp and ftp.