首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建定制的IQ模块

创建定制的IQ模块
EN

Stack Overflow用户
提问于 2018-05-30 13:34:21
回答 1查看 108关注 0票数 0

我有样本模块,

代码语言:javascript
复制
-module(mod_iq_test).
-behaviour(gen_mod).
-export([start/2,
         init/2,
         stop/1,
         process_sm_iq/3
    ]).

-define(PROCNAME, ?MODULE).

-include("ejabberd.hrl").
-include("jlib.hrl").
-include("logger.hrl").

-define(NS_TEST, <<"http://jabber.org/protocol/test">>).

start(Host, Opts) ->
    ?INFO_MSG("Loading module 'mod_iqtest' v.01", []),
    ok.

init(Host, _Opts) ->
    IQDisc = gen_mod:get_opt(iqdisc, _Opts, fun(A) -> A end, one_queue),
    gen_iq_handler:add_iq_handler(ejabberd_sm, Host, ?NS_TEST, ?MODULE, process_sm_iq, IQDisc),
    ?INFO_MSG("added iq handlers 'mod_iqtest' v.01", []),
    ok.

stop(Host) ->
    gen_iq_handler:remove_iq_handler(ejabberd_sm, Host, ?NS_TEST),
    ?INFO_MSG("Stoping module 'mod_iqtest' ", []),
    ok.

process_sm_iq(_From, _To, IQ) ->
    ?INFO_MSG("Processing IQ Get query:~n ~p", [IQ]),
    IQ#iq{type = result, sub_el = [{xmlel, <<"value">>, [], [{xmlcdata, <<"Hello World of Testing.">>}]}]}.

在发送智商的同时,

代码语言:javascript
复制
<iq type='get'>
  <query xmlns='http://jabber.org/protocol/test'/>
</iq>
<r xmlns="urn:xmpp:sm:3"/>

它抛出一个错误,

代码语言:javascript
复制
<iq type="error">
  <query xmlns="http://jabber.org/protocol/test"/>
<error code="400" type="modify">
<bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
<text xmlns="urn:ietf:params:xml:ns:xmpp-stanzas" xml:lang="en">Missing attribute 'id' in tag &lt;iq/&gt; qualified by namespace 'jabber:client'</text>
</error>
</iq>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-30 16:14:04

尝试提供id属性,如错误响应中所解释的那样:

代码语言:javascript
复制
<iq type='get' id='aaa8821'>
  <query xmlns='http://jabber.org/protocol/test'/>
</iq>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50606103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档