[英]How to register IQ handler in Ejabberd elixir module?
我正在尝试在elixir模块中注册IQ处理程序(使用Ejabberds gen_iq_handler模块),但是无法使其工作。 似乎它注册了处理程序,但未调用函数。
挂钩的注册按预期方式工作(调用on_presence函数),但未使用处理程序。
:gen_iq_handler.add_iq_handler
返回:ok
我尝试传递函数的完全限定名称(原子)(例如:"Elixir.ModPresenceDemo.on_iq_received"
),但未成功传递名称空间参数作为字符列表,也未成功
这是start和on_iq_received函数:
def start(host, _opts) do
info("Starting ejabberd module Presence Demo #{host}")
Ejabberd.Hooks.add(:set_presence_hook, host, __MODULE__, :on_presence, 50)
result = :gen_iq_handler.add_iq_handler(:ejabberd_sm, host, "module:test", __MODULE__, :on_iq_received)
info(host)
info(__MODULE__)
info(result)
:ok
end
...
def on_iq_received(iq) do
info('Received data for IQ handler')
IO.inspect(iq)
iq
end
用iq节调用处理程序时:
<iq type="set" id="test" to="<user>@<host>">
<query xmlns="module:test"/>
</iq>
我收到错误代码为400的IQ错误节: Unknown tag <query/> qualified by namespace 'module:test'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.