Updates for the MessageSend Dialplan App
Enhancements: * The MessageSend dialplan application now takes an optional third argument that can set the message's "To" field on outgoing messages. It's an alternative to using the MESSAGE(to) dialplan function. NOTE: No channel driver currently implements this field. A follow-on commit for res_pjsip_messaging will implement it for the chan_pjsip channel driver. * To prevent confusion with the first argument, currently named "to", it's been renamed to "destination". Its function, creating the request URI, hasn't changed. * The documentation for MessageSend was updated to be more clear about the parameters and how they interact the MESSAGE() dialplan function. * With the rename of MessageSend's first parameter, and the fact that message.c references <info> elements in chan_sip.c, res_pjsip_messaging.c and res_xmpp, they each needed documentation updates to use MessageDestinationInfo instead of MessageToInfo. * appdocsxml.dtd was updated to include a missing element declaration for "dataType". This was showing up as an error in Eclipse's dtd editor. * Despite the changes in this commit, there should be no impact to current users of MessageSend. Change-Id: I6fb5b569657a02866a66ea352fd53d30d8ac965a
This commit is contained in:
parent
78f518622d
commit
40bdfff73b
|
@ -618,13 +618,16 @@
|
||||||
for all of the sip peers will be retrieved.</para>
|
for all of the sip peers will be retrieved.</para>
|
||||||
</description>
|
</description>
|
||||||
</manager>
|
</manager>
|
||||||
|
<info name="MessageDestinationInfo" language="en_US" tech="SIP">
|
||||||
|
<para>Specifying a prefix of <literal>sip:</literal> will send the
|
||||||
|
message as a SIP MESSAGE request.</para>
|
||||||
|
</info>
|
||||||
<info name="MessageFromInfo" language="en_US" tech="SIP">
|
<info name="MessageFromInfo" language="en_US" tech="SIP">
|
||||||
<para>The <literal>from</literal> parameter can be a configured peer name
|
<para>The <literal>from</literal> parameter can be a configured peer name
|
||||||
or in the form of "display-name" <URI>.</para>
|
or in the form of "display-name" <URI>.</para>
|
||||||
</info>
|
</info>
|
||||||
<info name="MessageToInfo" language="en_US" tech="SIP">
|
<info name="MessageToInfo" language="en_US" tech="SIP">
|
||||||
<para>Specifying a prefix of <literal>sip:</literal> will send the
|
<para>Ignored</para>
|
||||||
message as a SIP MESSAGE request.</para>
|
|
||||||
</info>
|
</info>
|
||||||
<managerEvent language="en_US" name="SIPQualifyPeerDone">
|
<managerEvent language="en_US" name="SIPQualifyPeerDone">
|
||||||
<managerEventInstance class="EVENT_FLAG_CALL">
|
<managerEventInstance class="EVENT_FLAG_CALL">
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
Subject: MessageSend
|
||||||
|
|
||||||
|
The MessageSend dialplan application now takes an
|
||||||
|
optional third argument that can set the message's
|
||||||
|
"To" field on outgoing messages. It's an alternative
|
||||||
|
to using the MESSAGE(to) dialplan function.
|
||||||
|
|
||||||
|
To prevent confusion with the first argument, currently
|
||||||
|
named "to", it's been renamed to "destination".
|
||||||
|
Its function, creating the request URI, hasn't changed.
|
||||||
|
|
||||||
|
The online documentation has also been enhanced to
|
||||||
|
explain the behavior.
|
||||||
|
|
||||||
|
Despite the changes in this commit, there should be
|
||||||
|
no impact to current users of MessageSend.
|
|
@ -83,6 +83,8 @@
|
||||||
|
|
||||||
<!ELEMENT matchInfo (category|field?)>
|
<!ELEMENT matchInfo (category|field?)>
|
||||||
|
|
||||||
|
<!ELEMENT dataType (#PCDATA)>
|
||||||
|
|
||||||
<!ELEMENT category (#PCDATA)>
|
<!ELEMENT category (#PCDATA)>
|
||||||
<!ATTLIST category match (yes|no|true|false) #REQUIRED>
|
<!ATTLIST category match (yes|no|true|false) #REQUIRED>
|
||||||
|
|
||||||
|
|
|
@ -52,13 +52,25 @@
|
||||||
<para>Field of the message to get or set.</para>
|
<para>Field of the message to get or set.</para>
|
||||||
<enumlist>
|
<enumlist>
|
||||||
<enum name="to">
|
<enum name="to">
|
||||||
<para>Read-only. The destination of the message. When processing an
|
<para>When processing an
|
||||||
incoming message, this will be set to the destination listed as
|
incoming message, this will be set to the destination listed as
|
||||||
the recipient of the message that was received by Asterisk.</para>
|
the recipient of the message that was received by Asterisk.</para>
|
||||||
|
<para>
|
||||||
|
</para>
|
||||||
|
<para>For an outgoing message, this will set the To header in the
|
||||||
|
outgoing SIP message. This may be overridden by the "to" parameter
|
||||||
|
of MessageSend.
|
||||||
|
</para>
|
||||||
</enum>
|
</enum>
|
||||||
<enum name="from">
|
<enum name="from">
|
||||||
<para>Read-only. The source of the message. When processing an
|
<para>When processing an
|
||||||
incoming message, this will be set to the source of the message.</para>
|
incoming message, this will be set to the source of the message.</para>
|
||||||
|
<para>
|
||||||
|
</para>
|
||||||
|
<para>For an outgoing message, this will set the From header in the
|
||||||
|
outgoing SIP message. This may be overridden by the "from" parameter
|
||||||
|
of MessageSend.
|
||||||
|
</para>
|
||||||
</enum>
|
</enum>
|
||||||
<enum name="custom_data">
|
<enum name="custom_data">
|
||||||
<para>Write-only. Mark or unmark all message headers for an outgoing
|
<para>Write-only. Mark or unmark all message headers for an outgoing
|
||||||
|
@ -119,23 +131,39 @@
|
||||||
Send a text message.
|
Send a text message.
|
||||||
</synopsis>
|
</synopsis>
|
||||||
<syntax>
|
<syntax>
|
||||||
<parameter name="to" required="true">
|
<parameter name="destination" required="true">
|
||||||
<para>A To URI for the message.</para>
|
<para>A To URI for the message.</para>
|
||||||
<xi:include xpointer="xpointer(/docs/info[@name='MessageToInfo'])" />
|
<xi:include xpointer="xpointer(/docs/info[@name='MessageDestinationInfo'])" />
|
||||||
</parameter>
|
</parameter>
|
||||||
<parameter name="from" required="false">
|
<parameter name="from" required="false">
|
||||||
<para>A From URI for the message if needed for the
|
<para>A From URI for the message if needed for the
|
||||||
message technology being used to send this message. This can be a
|
message technology being used to send this message. This can be a
|
||||||
SIP(S) URI, such as <literal>Alice <sip:alice@atlanta.com></literal>,
|
SIP(S) URI, such as <literal>Alice <sip:alice@atlanta.com></literal>,
|
||||||
a string in the format <literal>alice@atlanta.com</literal>, or simply
|
or a string in the format <literal>alice@atlanta.com</literal>.
|
||||||
a username such as <literal>alice</literal>.</para>
|
This will override a <literal>from</literal>
|
||||||
|
specified using the MESSAGE dialplan function or the <literal>from</literal>
|
||||||
|
that may have been on an incoming message.
|
||||||
|
</para>
|
||||||
|
<xi:include xpointer="xpointer(/docs/info[@name='MessageFromInfo'])" />
|
||||||
|
</parameter>
|
||||||
|
<parameter name="to" required="false">
|
||||||
|
<para>A To URI for the message if needed for the
|
||||||
|
message technology being used to send this message. This can be a
|
||||||
|
SIP(S) URI, such as <literal>Alice <sip:alice@atlanta.com></literal>,
|
||||||
|
or a string in the format <literal>alice@atlanta.com</literal>.
|
||||||
|
This will override a <literal>to</literal>
|
||||||
|
specified using the MESSAGE dialplan function or the <literal>to</literal>
|
||||||
|
that may have been on an incoming message.
|
||||||
|
</para>
|
||||||
|
<xi:include xpointer="xpointer(/docs/info[@name='MessageToInfo'])" />
|
||||||
</parameter>
|
</parameter>
|
||||||
</syntax>
|
</syntax>
|
||||||
<description>
|
<description>
|
||||||
<para>Send a text message. The body of the message that will be
|
<para>Send a text message. The body of the message that will be
|
||||||
sent is what is currently set to <literal>MESSAGE(body)</literal>.
|
sent is what is currently set to <literal>MESSAGE(body)</literal>.
|
||||||
The technology chosen for sending the message is determined
|
This may he come from an incoming message.
|
||||||
based on a prefix to the <literal>to</literal> parameter.</para>
|
The technology chosen for sending the message is determined
|
||||||
|
based on a prefix to the <literal>destination</literal> parameter.</para>
|
||||||
<para>This application sets the following channel variables:</para>
|
<para>This application sets the following channel variables:</para>
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<variable name="MESSAGE_SEND_STATUS">
|
<variable name="MESSAGE_SEND_STATUS">
|
||||||
|
@ -1204,8 +1232,9 @@ static int msg_send_exec(struct ast_channel *chan, const char *data)
|
||||||
char *parse;
|
char *parse;
|
||||||
int res = -1;
|
int res = -1;
|
||||||
AST_DECLARE_APP_ARGS(args,
|
AST_DECLARE_APP_ARGS(args,
|
||||||
AST_APP_ARG(to);
|
AST_APP_ARG(destination);
|
||||||
AST_APP_ARG(from);
|
AST_APP_ARG(from);
|
||||||
|
AST_APP_ARG(to);
|
||||||
);
|
);
|
||||||
|
|
||||||
if (ast_strlen_zero(data)) {
|
if (ast_strlen_zero(data)) {
|
||||||
|
@ -1217,7 +1246,7 @@ static int msg_send_exec(struct ast_channel *chan, const char *data)
|
||||||
parse = ast_strdupa(data);
|
parse = ast_strdupa(data);
|
||||||
AST_STANDARD_APP_ARGS(args, parse);
|
AST_STANDARD_APP_ARGS(args, parse);
|
||||||
|
|
||||||
if (ast_strlen_zero(args.to)) {
|
if (ast_strlen_zero(args.destination)) {
|
||||||
ast_log(LOG_WARNING, "A 'to' URI is required for MessageSend()\n");
|
ast_log(LOG_WARNING, "A 'to' URI is required for MessageSend()\n");
|
||||||
pbx_builtin_setvar_helper(chan, "MESSAGE_SEND_STATUS", "INVALID_URI");
|
pbx_builtin_setvar_helper(chan, "MESSAGE_SEND_STATUS", "INVALID_URI");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1236,7 +1265,7 @@ static int msg_send_exec(struct ast_channel *chan, const char *data)
|
||||||
ao2_ref(msg, +1);
|
ao2_ref(msg, +1);
|
||||||
ast_channel_unlock(chan);
|
ast_channel_unlock(chan);
|
||||||
|
|
||||||
tech_name = ast_strdupa(args.to);
|
tech_name = ast_strdupa(args.destination);
|
||||||
tech_name = strsep(&tech_name, ":");
|
tech_name = strsep(&tech_name, ":");
|
||||||
|
|
||||||
ast_rwlock_rdlock(&msg_techs_lock);
|
ast_rwlock_rdlock(&msg_techs_lock);
|
||||||
|
@ -1248,13 +1277,21 @@ static int msg_send_exec(struct ast_channel *chan, const char *data)
|
||||||
goto exit_cleanup;
|
goto exit_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If there was a "to" in the call to MessageSend,
|
||||||
|
* replace the to already in the channel datastore.
|
||||||
|
*/
|
||||||
|
if (!ast_strlen_zero(args.to)) {
|
||||||
|
ast_string_field_set(msg, to, args.to);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The message lock is held here to safely allow the technology
|
* The message lock is held here to safely allow the technology
|
||||||
* implementation to access the message fields without worrying
|
* implementation to access the message fields without worrying
|
||||||
* that they could change.
|
* that they could change.
|
||||||
*/
|
*/
|
||||||
ao2_lock(msg);
|
ao2_lock(msg);
|
||||||
res = msg_tech->msg_send(msg, S_OR(args.to, ""), S_OR(args.from, ""));
|
res = msg_tech->msg_send(msg, S_OR(args.destination, ""), S_OR(args.from, ""));
|
||||||
ao2_unlock(msg);
|
ao2_unlock(msg);
|
||||||
|
|
||||||
pbx_builtin_setvar_helper(chan, "MESSAGE_SEND_STATUS", res ? "FAILURE" : "SUCCESS");
|
pbx_builtin_setvar_helper(chan, "MESSAGE_SEND_STATUS", res ? "FAILURE" : "SUCCESS");
|
||||||
|
|
|
@ -24,13 +24,16 @@
|
||||||
***/
|
***/
|
||||||
|
|
||||||
/*** DOCUMENTATION
|
/*** DOCUMENTATION
|
||||||
|
<info name="MessageDestinationInfo" language="en_US" tech="PJSIP">
|
||||||
|
<para>Specifying a prefix of <literal>pjsip:</literal> will send the
|
||||||
|
message as a SIP MESSAGE request.</para>
|
||||||
|
</info>
|
||||||
<info name="MessageFromInfo" language="en_US" tech="PJSIP">
|
<info name="MessageFromInfo" language="en_US" tech="PJSIP">
|
||||||
<para>The <literal>from</literal> parameter can be a configured endpoint
|
<para>The <literal>from</literal> parameter can be a configured endpoint
|
||||||
or in the form of "display-name" <URI>.</para>
|
or in the form of "display-name" <URI>.</para>
|
||||||
</info>
|
</info>
|
||||||
<info name="MessageToInfo" language="en_US" tech="PJSIP">
|
<info name="MessageToInfo" language="en_US" tech="PJSIP">
|
||||||
<para>Specifying a prefix of <literal>pjsip:</literal> will send the
|
<para>Ignored</para>
|
||||||
message as a SIP MESSAGE request.</para>
|
|
||||||
</info>
|
</info>
|
||||||
***/
|
***/
|
||||||
#include "asterisk.h"
|
#include "asterisk.h"
|
||||||
|
|
|
@ -251,7 +251,7 @@
|
||||||
<para>Sends a message to a Jabber Client.</para>
|
<para>Sends a message to a Jabber Client.</para>
|
||||||
</description>
|
</description>
|
||||||
</manager>
|
</manager>
|
||||||
<info name="MessageToInfo" language="en_US" tech="XMPP">
|
<info name="MessageDestinationInfo" language="en_US" tech="XMPP">
|
||||||
<para>Specifying a prefix of <literal>xmpp:</literal> will send the
|
<para>Specifying a prefix of <literal>xmpp:</literal> will send the
|
||||||
message as an XMPP chat message.</para>
|
message as an XMPP chat message.</para>
|
||||||
</info>
|
</info>
|
||||||
|
@ -260,6 +260,9 @@
|
||||||
account defined in <literal>xmpp.conf</literal> to send the message from.
|
account defined in <literal>xmpp.conf</literal> to send the message from.
|
||||||
Note that this field is required for XMPP messages.</para>
|
Note that this field is required for XMPP messages.</para>
|
||||||
</info>
|
</info>
|
||||||
|
<info name="MessageToInfo" language="en_US" tech="XMPP">
|
||||||
|
<para>Ignored</para>
|
||||||
|
</info>
|
||||||
<configInfo name="res_xmpp" language="en_US">
|
<configInfo name="res_xmpp" language="en_US">
|
||||||
<synopsis>XMPP Messaging</synopsis>
|
<synopsis>XMPP Messaging</synopsis>
|
||||||
<configFile name="xmpp.conf">
|
<configFile name="xmpp.conf">
|
||||||
|
|
Loading…
Reference in New Issue