GatewayException: Error serializing parameters when passing Python function into message payload

I attempted to create a gateway event message so I could send a message and run scripts on the gateway scope through the designer. Here is the gateway script:

However, when testing this in the script console I got the below error. Is this just not possible to do?

edit: would probably be helpful to include what I have in the script console

version: Ignition 8.1.48

Java Traceback:
Traceback (most recent call last):
  File "<input>", line 4, in <module>
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.newGatewayException(GatewayInterface.java:360)

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:965)

	at com.inductiveautomation.ignition.client.script.DesignerSystemUtilities.sendMessageInternal(DesignerSystemUtilities.java:211)

	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendMessage(SystemUtilities.java:817)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

com.inductiveautomation.ignition.client.gateway_interface.GatewayException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Error serializing parameters.


	at org.python.core.Py.JavaError(Py.java:545)

	at org.python.core.Py.JavaError(Py.java:536)

	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:192)

	at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction.__call__(ScriptManager.java:553)

	at org.python.core.PyObject.__call__(PyObject.java:400)

	at org.python.pycode._pyx269.f$0(<input>:4)

	at org.python.pycode._pyx269.call_function(<input>)

	at org.python.core.PyTableCode.call(PyTableCode.java:173)

	at org.python.core.PyCode.call(PyCode.java:18)

	at org.python.core.Py.runCode(Py.java:1703)

	at org.python.core.Py.exec(Py.java:1747)

	at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:277)

	at org.python.util.InteractiveInterpreter.runcode(InteractiveInterpreter.java:130)

	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:628)

	at com.inductiveautomation.ignition.designer.gui.tools.jythonconsole.JythonConsole$ConsoleWorker.doInBackground(JythonConsole.java:616)

	at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)

	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)

	at java.desktop/javax.swing.SwingWorker.run(Unknown Source)

	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

	at java.base/java.lang.Thread.run(Unknown Source)

Caused by: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Error serializing parameters.

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.newGatewayException(GatewayInterface.java:360)

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:965)

	at com.inductiveautomation.ignition.client.script.DesignerSystemUtilities.sendMessageInternal(DesignerSystemUtilities.java:211)

	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendMessage(SystemUtilities.java:817)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

	at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:190)

	... 18 more

Caused by: java.io.NotSerializableException: org.python.core.ReflectedArgs

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeArray(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source)

	at java.base/java.util.concurrent.ConcurrentHashMap.writeObject(Unknown Source)

	at java.base/jdk.internal.reflect.GeneratedMethodAccessor279.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

	at java.base/java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source)

	at java.base/java.util.concurrent.ConcurrentHashMap.writeObject(Unknown Source)

	at java.base/jdk.internal.reflect.GeneratedMethodAccessor279.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

	at java.base/java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source)

	at java.base/java.util.concurrent.ConcurrentHashMap.writeObject(Unknown Source)

	at java.base/jdk.internal.reflect.GeneratedMethodAccessor279.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

	at java.base/java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source)

	at java.base/java.util.concurrent.ConcurrentHashMap.writeObject(Unknown Source)

	at java.base/jdk.internal.reflect.GeneratedMethodAccessor279.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

	at java.base/java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source)

	at java.base/java.util.concurrent.ConcurrentHashMap.writeObject(Unknown Source)

	at java.base/jdk.internal.reflect.GeneratedMethodAccessor279.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

	at java.base/java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source)

	at java.base/java.util.concurrent.ConcurrentHashMap.writeObject(Unknown Source)

	at java.base/jdk.internal.reflect.GeneratedMethodAccessor279.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

	at java.base/java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeSerialData(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject0(Unknown Source)

	at java.base/java.io.ObjectOutputStream.writeObject(Unknown Source)

	at com.inductiveautomation.ignition.common.Base64.encodeObject(Base64.java:496)

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface$InvokeMessage.setArgs(GatewayInterface.java:1382)

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:963)

	... 25 more

Traceback (most recent call last):
  File "<input>", line 4, in <module>
	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.newGatewayException(GatewayInterface.java:360)

	at com.inductiveautomation.ignition.client.gateway_interface.GatewayInterface.invoke(GatewayInterface.java:965)

	at com.inductiveautomation.ignition.client.script.DesignerSystemUtilities.sendMessageInternal(DesignerSystemUtilities.java:211)

	at com.inductiveautomation.ignition.common.script.builtin.SystemUtilities.sendMessage(SystemUtilities.java:817)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

com.inductiveautomation.ignition.client.gateway_interface.GatewayException: com.inductiveautomation.ignition.client.gateway_interface.GatewayException: Error serializing parameters.

Jython function objects are not transmissible over the network connection between designer and gateway. Code must already exist in the gateway to be callable.

{ Psssst! system.util.runInGateway }

I tried putting the function in a project library script and got the same error. Does the project that the library script lives in need to be configured as the Gateway Scripting Project for my script to work?

No, just in the same project as the message handler. (Look for errors in your gateway log.)