Hi Greg,
As i undestood you need to "catch" some "command" from APRS and do an "action".
That's a good proyect!!.
I will try to review your first design.
Let me see if I can help you with some idea.
As you say, APRX it's by design only I-gate and Digi, that's the reason isn't message capable. Don't need it!
In others words, APRX can't send a message and for that don't confirm a message received (a).
But, actually you can recieve messages sended to the callsign of the igate/digi. ;-)
This is an example of aprx-rf.log actually made with my station:
2016-08-27 18:58:40.197 APRSIS R CX8FS-5>APDR13,TCPIP*,qAC,T2ROMANIA::CX8FS-2 :example of command{1
2016-08-27 18:58:43.748 CX8FS-3 T CX8FS-3>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-3*::CX8FS-2 :example of command{1
2016-08-27 18:58:44.757 CX8FS-2 T CX8FS-2>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-2*::CX8FS-2 :example of command{1
2016-08-27 18:58:52.203 APRSIS R CX8FS-5>APDR13,TCPIP*,qAC,T2ROMANIA::CX8FS-2 :example of command{2
2016-08-27 18:58:55.747 CX8FS-3 T CX8FS-3>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-3*::CX8FS-2 :example of command{2
2016-08-27 18:58:56.747 CX8FS-2 T CX8FS-2>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-2*::CX8FS-2 :example of command{2
2016-08-27 18:58:59.196 CX8FS-2 d *CX8FS-5>APDR13,TCPIP,CX8FS-2*::CX8FS-2 :example of command{2
2016-08-27 18:59:28.292 APRSIS R CX8FS-5>APDR13,TCPIP*,qAC,T2ROMANIA::CX8FS-2 :example of command{2
2016-08-27 18:59:31.747 CX8FS-3 T CX8FS-3>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-3*::CX8FS-2 :example of command{2
2016-08-27 18:59:32.747 CX8FS-2 T CX8FS-2>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-2*::CX8FS-2 :example of command{2
2016-08-27 18:59:35.197 CX8FS-2 d *CX8FS-5>APDR13,TCPIP,CX8FS-2*::CX8FS-2 :example of command{2
2016-08-27 19:00:27.238 APRSIS R CX8FS-5>APDR13,TCPIP*,qAC,T2ROMANIA::CX8FS-2 :example of command{2
2016-08-27 19:00:30.747 CX8FS-3 T CX8FS-3>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-3*::CX8FS-2 :example of command{2
2016-08-27 19:00:31.747 CX8FS-2 T CX8FS-2>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-2*::CX8FS-2 :example of command{2
2016-08-27 19:00:34.111 CX8FS-2 d *CX8FS-5>APDR13,TCPIP,CX8FS-2*::CX8FS-2 :example of command{2
2016-08-27 19:00:37.879 APRSIS R CX8FS-5>APDR13,TCPIP*,qAC,T2ROMANIA::CX8FS-2 :example of command{1
2016-08-27 19:00:41.747 CX8FS-3 T CX8FS-3>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-3*::CX8FS-2 :example of command{1
2016-08-27 19:00:42.747 CX8FS-2 T CX8FS-2>APRS,WIDE1-1:}CX8FS-5>APDR13,TCPIP,CX8FS-2*::CX8FS-2 :example of command{1
You can see the command "example of command" arrived from CX8FS-5 (my cel) to CX8FS-2 (my Igate).
But consider this:
1) Isn't confirmed by the protocol because of (a) so the sender will retry the command automatically several times, By design of APRS.
2) Appears in the log multiple times because of several configured interfaces, igating the packet. By design of APRX.
3) It's visible for ALL, so consider somebody else sending your message and executing your "action". :-{ By design of APRS.
It's not the best solution but if you have expertise parsing the file with Perl, Pyton or wherever script or program you are confident, could be a workaround for your problem.
I think it's possible to parse the file and avoid all inconveniences. but i think it's impossible to have feedback of the action with APRX.
Good luck.
Claudio
CX8FS