Module- Twilio Integration and Alarm Notification

I have installed the module and configured all of the gateway setup needed. I have verified that system.twilio.getAccounts() returns as expected. (this is all within the Script Console)

When attempting to run .sendSms, .sendFreeformWhatsApp, or .sendWhatsAppTemplate I am getting errors starting with at jdk.proxy2/jdk.proxy2.$Proxy83.sendSms(Unknown Source).

Any strings, matching the account name or not, return the above the error.

When testing with non-string inputs for the accountName the error is as expected- NameError: name 'YouCantSeeMyAccountName' is not defined

Please advise if this could be a user error or bug. Thanks!

Can you attach your log files please?

File is to large for here. I will work on it. This did lead to me notice that the gateway logged that the designer was not in the correct mode. I changed to read/write and get the same error. Gateway log message is 'Handler for RPC call threw an exception'.

Can you copy just the full stacktrace of (any) logged messages on the gateway that correspond to you running the script?

WARN

route

30Jul2025 17:05:22

Handler for RPC call threw an exception

com.digitalpetri.ignition.twilio.common.rpc.TwilioRpc$TwilioRpcException: java.util.concurrent.ExecutionException: com.digitalpetri.ignition.twilio.common.util.TwilioAccountException: 'To' number cannot be a Short Code: +618562XXXX

at com.digitalpetri.ignition.twilio.rpc.TwilioRpcImpl.sendSms(TwilioRpcImpl.java:67)

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 com.inductiveautomation.ignition.gateway.rpc.RpcDelegate$DelegateRpcHandler.handle(RpcDelegate.java:271)

at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.lambda$handle$1(RpcRoutes.java:199)

at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.safelyHandle(RpcRoutes.java:219)

at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:198)

at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:361)

at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:120)

at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:133)

at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)

at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)

at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1379)

at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736)

at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1614)

at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:116)

at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)

at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:208)

at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1586)

at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1547)

at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:819)

at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:436)

at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:464)

at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)

at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)

at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1060)

at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)

at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

at org.eclipse.jetty.server.Server.handle(Server.java:182)

at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:662)

at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:418)

at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)

at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:478)

at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:441)

at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)

at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)

at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:979)

at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1209)

at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1164)

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

Caused by: java.util.concurrent.ExecutionException: com.digitalpetri.ignition.twilio.common.util.TwilioAccountException: 'To' number cannot be a Short Code: +618562XXXX

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

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

at com.digitalpetri.ignition.twilio.accounts.TwilioAccount$ConnectedTwilioAccount.sendSms(TwilioAccount.java:701)

at com.digitalpetri.ignition.twilio.rpc.TwilioRpcImpl.sendSms(TwilioRpcImpl.java:63)

... 55 common frames omitted

Caused by: com.digitalpetri.ignition.twilio.common.util.TwilioAccountException: 'To' number cannot be a Short Code: +618562XXXX

at com.digitalpetri.ignition.twilio.accounts.TwilioAccount$ConnectedTwilioAccount.lambda$sendSms$10(TwilioAccount.java:697)

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

at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)

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

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

... 1 common frames omitted

1 Like

Sorry, these aren't pretty. Cant a log download small enough.

com.digitalpetri.ignition.twilio.common.rpc.TwilioRpc$TwilioRpcException: java.util.concurrent.ExecutionException: com.digitalpetri.ignition.twilio.common.util.TwilioAccountException: Twilio could not find a Channel with the specified From address

at com.digitalpetri.ignition.twilio.rpc.TwilioRpcImpl.sendFreeformWhatsApp(TwilioRpcImpl.java:87)

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 com.inductiveautomation.ignition.gateway.rpc.RpcDelegate$DelegateRpcHandler.handle(RpcDelegate.java:271)

at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.lambda$handle$1(RpcRoutes.java:199)

at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.safelyHandle(RpcRoutes.java:219)

at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:198)

at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:361)

at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:120)

at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:133)

at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)

at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)

at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1379)

at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736)

at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1614)

at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:116)

at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)

at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:208)

at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1586)

at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1547)

at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:819)

at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:436)

at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:464)

at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)

at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)

at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1060)

at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)

at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

at org.eclipse.jetty.server.Server.handle(Server.java:182)

at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:662)

at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:418)

at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)

at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:478)

at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:441)

at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)

at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)

at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)

at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:979)

at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1209)

at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1164)

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

Caused by: java.util.concurrent.ExecutionException: com.digitalpetri.ignition.twilio.common.util.TwilioAccountException: Twilio could not find a Channel with the specified From address

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

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

at com.digitalpetri.ignition.twilio.accounts.TwilioAccount$ConnectedTwilioAccount.sendFreeformWhatsApp(TwilioAccount.java:800)

at com.digitalpetri.ignition.twilio.rpc.TwilioRpcImpl.sendFreeformWhatsApp(TwilioRpcImpl.java:83)

... 55 common frames omitted

Caused by: com.digitalpetri.ignition.twilio.common.util.TwilioAccountException: Twilio could not find a Channel with the specified From address

at com.digitalpetri.ignition.twilio.accounts.TwilioAccount$ConnectedTwilioAccount.lambda$sendFreeformWhatsApp$14(TwilioAccount.java:796)

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

at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)

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

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

... 1 common frames omitted


1 Like

Is this a north american number? I think you need to either drop the "+" or include the "1".

Yep! SMS sent as expected, + needed replaced with a 1.

Making the same update and re-testing sending WhatsApp is resulting in the same error as before.
from the script console output-

Java Traceback:
Traceback (most recent call last):
  File "<input>", line 5, in <module>
	at jdk.proxy2/jdk.proxy2.$Proxy83.sendFreeformWhatsApp(Unknown Source)

	at com.digitalpetri.ignition.twilio.client.scripting.ScriptModule.onSendFreeformWhatsApp(ScriptModule.java:41)

	at com.digitalpetri.ignition.twilio.common.scripting.AbstractTwilioScriptModule.sendFreeformWhatsApp(AbstractTwilioScriptModule.java:85)

	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)

java.lang.reflect.UndeclaredThrowableException: java.lang.reflect.UndeclaredThrowableException


	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:563)

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

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

	at org.python.pycode._pyx76.f$0(<input>:5)

	at org.python.pycode._pyx76.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: java.lang.reflect.UndeclaredThrowableException

	at jdk.proxy2/jdk.proxy2.$Proxy83.sendFreeformWhatsApp(Unknown Source)

	at com.digitalpetri.ignition.twilio.client.scripting.ScriptModule.onSendFreeformWhatsApp(ScriptModule.java:41)

	at com.digitalpetri.ignition.twilio.common.scripting.AbstractTwilioScriptModule.sendFreeformWhatsApp(AbstractTwilioScriptModule.java:85)

	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)

	... 19 more

Caused by: com.inductiveautomation.ignition.common.rpc.proto.ProtoWrappedException: java.util.concurrent.ExecutionException: com.digitalpetri.ignition.twilio.common.util.TwilioAccountException: Twilio could not find a Channel with the specified From address

	at com.digitalpetri.ignition.twilio.rpc.TwilioRpcImpl.sendFreeformWhatsApp(TwilioRpcImpl.java:87)

	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(:0)

	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(:0)

	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(:0)

	at java.lang.reflect.Method.invoke(:0)

	at com.inductiveautomation.ignition.gateway.rpc.RpcDelegate$DelegateRpcHandler.handle(RpcDelegate.java:271)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.lambda$handle$1(RpcRoutes.java:199)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.safelyHandle(RpcRoutes.java:219)

	at com.inductiveautomation.ignition.gateway.rpc.RpcRoutes.handle(RpcRoutes.java:198)

	at com.inductiveautomation.ignition.gateway.dataroutes.Route.service(Route.java:361)

	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupImpl.service(RouteGroupImpl.java:120)

	at com.inductiveautomation.ignition.gateway.dataroutes.RouteGroupCollectionServlet.serviceInternal(RouteGroupCollectionServlet.java:133)

	at com.inductiveautomation.ignition.gateway.dataroutes.AbstractRouteGroupServlet.service(AbstractRouteGroupServlet.java:40)

	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)

	at org.eclipse.jetty.ee10.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1379)

	at org.eclipse.jetty.ee10.servlet.ServletHolder.handle(ServletHolder.java:736)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1614)

	at com.inductiveautomation.catapult.filters.GatewayFilter.doFilter(GatewayFilter.java:116)

	at jakarta.servlet.http.HttpFilter.doFilter(HttpFilter.java:97)

	at org.eclipse.jetty.ee10.servlet.FilterHolder.doFilter(FilterHolder.java:208)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1586)

	at org.eclipse.jetty.ee10.servlet.ServletHandler$MappedServlet.handle(ServletHandler.java:1547)

	at org.eclipse.jetty.ee10.servlet.ServletChannel.dispatch(ServletChannel.java:819)

	at org.eclipse.jetty.ee10.servlet.ServletChannel.handle(ServletChannel.java:436)

	at org.eclipse.jetty.ee10.servlet.ServletHandler.handle(ServletHandler.java:464)

	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:575)

	at org.eclipse.jetty.ee10.servlet.SessionHandler.handle(SessionHandler.java:717)

	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1060)

	at org.eclipse.jetty.rewrite.handler.RewriteHandler$LastRuleHandler.handle(RewriteHandler.java:159)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.HeaderPatternRule$1.handle(HeaderPatternRule.java:89)

	at org.eclipse.jetty.rewrite.handler.Rule$Handler.handle(Rule.java:108)

	at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:143)

	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

	at org.eclipse.jetty.server.Handler$Sequence.handle(Handler.java:805)

	at org.eclipse.jetty.server.Server.handle(Server.java:182)

	at org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:662)

	at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:418)

	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:322)

	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:99)

	at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:478)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:441)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:293)

	at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:201)

	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:311)

	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:979)

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1209)

	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1164)

	at java.lang.Thread.run(:0)

Caused by: com.inductiveautomation.ignition.common.rpc.proto.ProtoWrappedException: com.digitalpetri.ignition.twilio.common.util.TwilioAccountException: Twilio could not find a Channel with the specified From address

	at java.util.concurrent.FutureTask.report(:0)

	at java.util.concurrent.FutureTask.get(:0)

	at com.digitalpetri.ignition.twilio.accounts.TwilioAccount$ConnectedTwilioAccount.sendFreeformWhatsApp(TwilioAccount.java:800)

	at com.digitalpetri.ignition.twilio.rpc.TwilioRpcImpl.sendFreeformWhatsApp(TwilioRpcImpl.java:83)

	... 55 more

Caused by: com.digitalpetri.ignition.twilio.common.util.TwilioAccountException: Twilio could not find a Channel with the specified From address

	at com.digitalpetri.ignition.twilio.accounts.TwilioAccount$ConnectedTwilioAccount.lambda$sendFreeformWhatsApp$14(TwilioAccount.java:796)

	at java.util.concurrent.FutureTask.run(:0)

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(:0)

	at java.util.concurrent.ThreadPoolExecutor.runWorker(:0)

	at java.util.concurrent.ThreadPoolExecutor$Worker.run(:0)

	... 1 more

Traceback (most recent call last):
  File "<input>", line 5, in <module>
	at jdk.proxy2/jdk.proxy2.$Proxy83.sendFreeformWhatsApp(Unknown Source)

	at com.digitalpetri.ignition.twilio.client.scripting.ScriptModule.onSendFreeformWhatsApp(ScriptModule.java:41)

	at com.digitalpetri.ignition.twilio.common.scripting.AbstractTwilioScriptModule.sendFreeformWhatsApp(AbstractTwilioScriptModule.java:85)

	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)

java.lang.reflect.UndeclaredThrowableException: java.lang.reflect.UndeclaredThrowableException

Ok, I don't know enough about the WhatsApp stuff to give advice, but this seems like a configuration issue still. Something on the Twilio side maybe.

It's using the same Twilio account and from number, just with the different notification profiles.

When testing from the gateway web page the same notification profiles return status 'Evaluation Complete' in green with no gateway event in the logs.

I'll keep digging and follow up with any findings.

You might need some specific 'from' address format?

(No idea if we "should" be handling this for you)

We are prepending "whatsapp:" to both the "To" and "From" numbers. It's best to test system.twilio.sendWhatsAppTemplate() first since sending a free form message requires the user to send a message to the Twilio application to open up a 24-hour window. Can you set twilio.RpcHandler and twilio.ConnectedTwilioAccount to TRACE when testing out template messages as well?

1 Like

Alternatively, you can shoot your Twilio account a WhatsApp message which will open up the 24-hour session window. From there, system.twilio.sendFreeformMessage() should then work.