a11de4a3bd50dbbe9cb94504bc5c4a77f9d9a8bd
[asterisk/asterisk.git] / doc / tex / app-sms.tex
1 \section{Introduction}
2
3    The SMS module for Asterisk was developed by Adrian Kennard, and is an
4    implementation of the ETSI specification for landline SMS, ETSI ES 201
5    912, which is available from \url{www.etsi.org}. Landline SMS is starting to
6    be available in various parts of Europe, and is available from BT in
7    the UK. However, Asterisk would allow gateways to be created in other
8    locations such as the US, and use of SMS capable phones such as the
9    Magic Messenger. SMS works using analogue or ISDN lines.
10
11 \section{Background}
12
13    Short Message Service (SMS), or texting is very popular between mobile
14    phones. A message can be sent between two phones, and normally
15    contains 160 characters. There are ways in which various types of data
16    can be encoded in a text message such as ring tones, and small
17    graphic, etc. Text messaging is being used for voting and
18    competitions, and also SPAM...
19
20    Sending a message involves the mobile phone contacting a message
21    centre (SMSC) and passing the message to it. The message centre then
22    contacts the destination mobile to deliver the message. The SMSC is
23    responsible for storing the message and trying to send it until the
24    destination mobile is available, or a timeout.
25
26    Landline SMS works in basically the same way. You would normally have
27    a suitable text capable landline phone, or a separate texting box such
28    as a Magic Messenger on your phone line. This sends a message to a
29    message centre your telco provides by making a normal call and sending
30    the data using 1200 Baud FSK signaling according to the ETSI spec. To
31    receive a message the message centre calls the line with a specific
32    calling number, and the text capable phone answers the call and
33    receives the data using 1200 Baud FSK signaling. This works
34    particularly well in the UK as the calling line identity is sent
35    before the first ring, so no phones in the house would ring when a
36    message arrives.
37
38 \section{Typical use with Asterisk}
39
40    Sending messages from an Asterisk box can be used for a variety of
41    reasons, including notification from any monitoring systems, email
42    subject lines, etc.
43
44    Receiving messages to an Asterisk box is typically used just to email
45    the messages to someone appropriate - we email and texts that are
46    received to our direct numbers to the appropriate person. Received
47    messages could also be used to control applications, manage
48    competitions, votes, post items to IRC, anything.
49
50    Using a terminal such as a magic messenger, an Asterisk box could ask
51    as a message centre sending messages to the terminal, which will beep
52    and pop up the message (and remember 100 or so messages in its
53    memory).
54
55 \section{Terminology}
56
57 \begin{itemize}
58    \item SMS -
59    Short Message Service
60    i.e. text messages
61
62    \item SMSC -
63    Short Message Service Centre
64    The system responsible for storing and forwarding messages
65
66    \item MO -
67    Mobile Originated
68    A message on its way from a mobile or landline device to the SMSC
69
70    \item MT -
71    Mobile Terminated
72    A message on its way from the SMSC to the mobile or landline device
73
74    \item RX -
75    Receive
76    A message coming in to the Asterisk box
77
78    \item TX -
79    Transmit
80    A message going out of the Asterisk box
81 \end{itemize}
82
83 \section{Sub address}
84
85    When sending a message to a landline, you simply send to the landline
86    number. In the UK, all of the mobile operators (bar one) understand
87    sending messages to landlines and pass the messages to the BTText
88    system for delivery to the landline.
89
90    The specification for landline SMS allows for the possibility of more
91    than one device on a single landline. These can be configured with Sub
92    addresses which are a single digit. To send a message to a specific
93    device the message is sent to the landline number with an extra digit
94    appended to the end. The telco can define a default sub address (9 in
95    the UK) which is used when the extra digit is not appended to the end.
96    When the call comes in, part of the calling line ID is the sub
97    address, so that only one device on the line answers the call and
98    receives the message.
99
100    Sub addresses also work for outgoing messages. Part of the number
101    called by the device to send a message is its sub address. Sending
102    from the default sub address (9 in the UK) means the message is
103    delivered with the sender being the normal landline number. Sending
104    from any other sub address makes the sender the landline number with
105    an extra digit on the end.
106
107    Using Asterisk, you can make use of the sub addresses for sending and
108    receiving messages. Using DDI (DID, i.e. multiple numbers on the line
109    on ISDN) you can also make use of many different numbers for SMS.
110
111 \section{extensions.conf}
112
113    The following contexts are recommended.
114
115 \begin{astlisting}
116 \begin{verbatim}
117 ; Mobile Terminated, RX. This is used when an incoming call from the SMS arrive
118 s, with the queue (called number and sub address) in ${EXTEN}
119 ; Running an app after receipt of the text allows the app to find all messages
120 in the queue and handle them, e.g. email them.
121 ; The app may be something like   smsq --process=somecommand --queue=${EXTEN}
122 to run a command for each received message
123 ; See below for usage
124 [smsmtrx]
125 exten = _X.,1, SMS(${EXTEN},a)
126 exten = _X.,2,System("someapptohandleincomingsms ${EXTEN}")
127 exten = _X.,3,Hangup
128 ; Mobile originated, RX. This is receiving a message from a device, e.g.
129 ; a Magic Messenger on a sip extension
130 ; Running an app after receipt of the text allows the app to find all messages
131 ; in the queue and handle then, e.g. sending them to the public SMSC
132 ; The app may be something like   smsq --process=somecommand --queue=${EXTEN}
133 ; to run a command for each received message
134 ; See below for example usage
135 [smsmorx]
136 exten = _X.,1, SMS(${EXTEN},sa)
137 exten = _X.,2,System("someapptohandlelocalsms ${EXTEN}")
138 exten = _X.,3,Hangup
139 \end{verbatim}
140 \end{astlisting}
141
142    smsmtrx is normally accessed by an incoming call from the SMSC. In the
143    UK this call is from a CLI of 080058752X0 where X is the sub address.
144    As such a typical usage in the extensions.conf at the point of
145    handling an incoming call is:
146
147 \begin{verbatim}
148 exten = _X./8005875290,1,Goto(smsmtrx,${EXTEN},1)
149 exten = _X./_80058752[0-8]0,1,Goto(smsmtrx,${EXTEN}-${CALLERID(num):8:1},1)
150 \end{verbatim}
151
152    Alternatively, if you have the correct national prefix on incoming
153    CLI, e.g. using zaphfc, you might use:
154
155 \begin{verbatim}
156 exten = _X./08005875290,1,Goto(smsmtrx,${EXTEN},1)
157 exten = _X./_080058752[0-8]0,1,Goto(smsmtrx,${EXTEN}-${CALLERID(num):9:1},1)
158 \end{verbatim}
159
160    smsmorx is normally accessed by a call from a local sip device
161    connected to a Magic Messenger. It could however by that you are
162    operating Asterisk as a message centre for calls from outside. Either
163    way, you look at the called number and goto smsmorx. In the UK, the
164    SMSC number that would be dialed is 1709400X where X is the caller sub
165    address. As such typical usage in extension.config at the point of
166    handling a call from a sip phone is:
167
168 \begin{verbatim}
169 exten = 17094009,1,Goto(smsmorx,${CALLERID(num)},1)
170 exten = _1709400[0-8],1,Goto(smsmorx,${CALLERID(num)}-{EXTEN:7:1},1)
171 \end{verbatim}
172
173 \section{Using smsq}
174
175    smsq is a simple helper application designed to make it easy to send
176    messages from a command line. it is intended to run on the Asterisk
177    box and have direct access to the queue directories for SMS and for
178    Asterisk.
179
180    In its simplest form you can send an SMS by a command such as
181    smsq 0123456789 This is a test to 0123456789
182    This would create a queue file for a mobile originated TX message in
183    queue 0 to send the text "This is a test to 0123456789" to 0123456789.
184    It would then place a file in the /var/spool/asterisk/outgoing
185    directory to initiate a call to 17094009 (the default message centre
186    in smsq) attached to application SMS with argument of the queue name
187    (0).
188
189    Normally smsq will queue a message ready to send, and will then create
190    a file in the Asterisk outgoing directory causing Asterisk to actually
191    connect to the message centre or device and actually send the pending
192    message(s).
193
194    Using --process, smsq can however be used on received queues to run a
195    command for each file (matching the queue if specified) with various
196    environment variables set based on the message (see below);
197    smsq options:-
198 \begin{verbatim}
199    --help
200    Show help text
201    --usage
202    Show usage
203    --queue
204    -q
205    Specify a specific queue
206    In no specified, messages are queued under queue "0"
207    --da
208    -d
209    Specify destination address
210    --oa
211    -o
212    Specify originating address
213    This also implies that we are generating a mobile terminated message
214    --ud
215    -m
216    Specify the actual message
217    --ud-file
218    -f
219    Specify a file to be read for the context of the message
220    A blank filename (e.g. --ud-file= on its own) means read stdin. Very
221    useful when using via ssh where command line parsing could mess up the
222    message.
223    --mt
224    -t
225    Mobile terminated message to be generated
226    --mo
227    Mobile originated message to be generated
228    Default
229    --tx
230    Transmit message
231    Default
232    --rx
233    -r
234    Generate a message in the receive queue
235    --UTF-8
236    Treat the file as UTF-8 encoded (default)
237    --UCS-1
238    Treat the file as raw 8 bit UCS-1 data, not UTF-8 encoded
239    --UCS-2
240    Treat the file as raw 16 bit bigendian USC-2 data
241    --process
242    Specific a command to process for each file in the queue
243    Implies --rx and --mt if not otherwise specified.
244    Sets environment variables for every possible variable, and also ud,
245    ud8 (USC-1 hex), and ud16 (USC-2 hex) for each call. Removes files.
246    --motx-channel
247    Specify the channel for motx calls
248    May contain X to use sub address based on queue name or may be full
249    number
250    Default is Local/1709400X
251    --motx-callerid
252    Specify the caller ID for motx calls
253    The default is the queue name without -X suffix
254    --motx-wait
255    Wait time for motx call
256    Default 10
257    --motx-delay
258    Retry time for motx call
259    Default 1
260    --motx-retries
261    Retries for motx call
262    Default 10
263    --mttx-channel
264    Specify the channel for mttx calls
265    Default is Local/ and the queue name without -X suffix
266    --mtttx-callerid
267    Specify the callerid for mttx calls
268    May include X to use sub address based on queue name or may be full
269    number
270    Default is 080058752X0
271    --mttx-wait
272    Wait time for mttx call
273    Default 10
274    --mttx-delay
275    Retry time for mttx call
276    Default 30
277    --mttx-retries
278    Retries for mttx call
279    Default 100
280    --default-sub-address
281    The default sub address assumed (e.g. for X in CLI and dialled numbers
282    as above) when none added (-X) to queue
283    Default 9
284    --no-dial
285    -x
286    Create queue, but do not dial to send message
287    --no-wait
288    Do not wait if a call appears to be in progress
289    This could have a small window where a message is queued but not
290    sent, so regular calls to smsq should be done to pick up any missed
291    messages
292    --concurrent
293    How many concurrent calls to allow (per queue), default 1
294    --mr
295    -n
296    Message reference
297    --pid
298    -p
299    Protocol ID
300    --dcs
301    Data coding scheme
302    --udh
303    Specific hex string of user data header specified (not including the
304    initial length byte)
305    May be a blank string to indicate header is included in the user data
306    already but user data header indication to be set.
307    --srr
308    Status report requested
309    --rp
310    Return path requested
311    --vp
312    Specify validity period (seconds)
313    --scts
314    Specify timestamp (YYYY-MM-DDTHH:MM:SS)
315    --spool-dir
316    Spool dir (in which sms and outgoing are found)
317    Default /var/spool/asterisk
318 \end{verbatim}
319
320    Other arguments starting '-' or '\verb!--!' are invalid and will cause an
321    error. Any trailing arguments are processed as follows:-
322
323 \begin{itemize}
324
325      \item If the message is mobile originating and no destination address
326        has been specified, then the first argument is assumed to be a
327        destination address
328
329      \item If the message is mobile terminating and no destination address
330        has been specified, then the first argument is assumed to be the
331        queue name
332
333      \item If there is no user data, or user data file specified, then any
334        following arguments are assumed to be the message, which are
335        concatenated.
336
337      \item If no user data is specified, then no message is sent. However,
338        unless \verb!--no-dial! is specified, smsq checks for pending messages
339        and generates an outgoing anyway
340 \end{itemize}
341
342
343    Note that when smsq attempts to make a file in
344    /var/spool/asterisk/outgoing, it checks if there is already a call
345    queued for that queue. It will try several filenames, up to the
346    --concurrent setting. If these files exist, then this means Asterisk
347    is already queued to send all messages for that queue, and so Asterisk
348    should pick up the message just queued. However, this alone could
349    create a race condition, so if the files exist then smsq will wait up
350    to 3 seconds to confirm it still exists or if the queued messages have
351    been sent already. The --no-wait turns off this behaviour. Basically,
352    this means that if you have a lot of messages to send all at once,
353    Asterisk will not make unlimited concurrent calls to the same message
354    centre or device for the same queue. This is because it is generally
355    more efficient to make one call and send all of the messages one after
356    the other.
357
358    smsq can be used with no arguments, or with a queue name only, and it
359    will check for any pending messages and cause an outgoing if there are
360    any. It only sets up one outgoing call at a time based on the first
361    queued message it finds. A outgoing call will normally send all queued
362    messages for that queue. One way to use smsq would be to run with no
363    queue name (so any queue) every minute or every few seconds to send
364    pending message. This is not normally necessary unless --no-dial is
365    selected. Note that smsq does only check motx or mttx depending on the
366    options selected, so it would need to be called twice as a general
367    check.
368
369    UTF-8 is used to parse command line arguments for user data, and is
370    the default when reading a file. If an invalid UTF-8 sequence is
371    found, it is treated as UCS-1 data (i.e, as is).
372    The --process option causes smsq to scan the specified queue (default
373    is mtrx) for messages (matching the queue specified, or any if queue
374    not specified) and run a command and delete the file. The command is
375    run with a number of environment variables set as follows. Note that
376    these are unset if not needed and not just taken from the calling
377    environment. This allows simple processing of incoming messages
378 \begin{verbatim}
379    $queue
380    Set if a queue specified
381    $?srr
382    srr is set (to blank) if srr defined and has value 1.
383    $?rp
384    rp is set (to blank) if rp defined and has value 1.
385    $ud
386    User data, UTF-8 encoding, including any control characters, but with
387    nulls stripped out
388    Useful for the content of emails, for example, as it includes any
389    newlines, etc.
390    $ude
391    User data, escaped UTF-8, including all characters, but control
392    characters \n, \r, \t, \f, \xxx and \ is escaped as \\
393    Useful guaranteed one line printable text, so useful in Subject lines
394    of emails, etc
395    $ud8
396    Hex UCS-1 coding of user data (2 hex digits per character)
397    Present only if all user data is in range U+0000 to U+00FF
398    $ud16
399    Hex UCS-2 coding of user data (4 hex digits per character)
400    other
401    Other fields set using their field name, e.g. mr, pid, dcs, etc. udh
402    is a hex byte string
403 \end{verbatim}
404
405 \section{File formats}
406
407    By default all queues are held in a director /var/spool/asterisk/sms.
408    Within this directory are sub directories mtrx, mttx, morx, motx which
409    hold the received messages and the messages ready to send. Also,
410    /var/log/asterisk/sms is a log file of all messages handled.
411
412    The file name in each queue directory starts with the queue parameter
413    to SMS which is normally the CLI used for an outgoing message or the
414    called number on an incoming message, and may have -X (X being sub
415    address) appended. If no queue ID is known, then 0 is used by smsq by
416    default. After this is a dot, and then any text. Files are scanned for
417    matching queue ID and a dot at the start. This means temporary files
418    being created can be given a different name not starting with a queue
419    (we recommend a . on the start of the file name for temp files).
420    Files in these queues are in the form of a simple text file where each
421    line starts with a keyword and an = and then data. udh and ud have
422    options for hex encoding, see below.
423
424    UTF-8. The user data (ud) field is treated as being UTF-8 encoded
425    unless the DCS is specified indicating 8 bit format. If 8 bit format
426    is specified then the user data is sent as is.
427    The keywords are as follows:-
428 \begin{verbatim}
429    oa Originating address
430    The phone number from which the message came
431    Present on mobile terminated messages and is the CLI for morx messages
432    da
433    Destination Address
434    The phone number to which the message is sent
435    Present on mobile originated messages
436    scts
437    The service centre time stamp
438    Format YYYY-MM-DDTHH:MM:SS
439    Present on mobile terminated messages
440    pid
441    One byte decimal protocol ID
442    See GSM specs for more details
443    Normally 0 or absent
444    dcs
445    One byte decimal data coding scheme
446    If omitted, a sensible default is used (see below)
447    See GSM specs for more details
448    mr
449    One byte decimal message reference
450    Present on mobile originated messages, added by default if absent
451    srr
452    0 or 1 for status report request
453    Does not work in UK yet, not implemented in app\_sms yet
454    rp
455    0 or 1 return path
456    See GSM specs for details
457    vp
458    Validity period in seconds
459    Does not work in UK yet
460    udh
461    Hex string of user data header prepended to the SMS contents,
462    excluding initial length byte.
463    Consistent with ud, this is specified as udh# rather than udh=
464    If blank, this means that the udhi flag will be set but any user data
465    header must be in the ud field
466    ud
467    User data, may be text, or hex, see below
468 \end{verbatim}
469
470    udh is specified as as udh\# followed by hex (2 hex digits per byte).
471    If present, then the user data header indicator bit is set, and the
472    length plus the user data header is added to the start of the user
473    data, with padding if necessary (to septet boundary in 7 bit format).
474    User data can hold an USC character codes U+0000 to U+FFFF. Any other
475    characters are coded as U+FEFF
476
477    ud can be specified as ud= followed by UTF-8 encoded text if it
478    contains no control characters, i.e. only (U+0020 to U+FFFF). Any
479    invalid UTF-8 sequences are treated as is (U+0080-U+00FF).
480
481    ud can also be specified as ud\# followed by hex (2 hex digits per
482    byte) containing characters U+0000 to U+00FF only.
483
484    ud can also be specified as ud\#\# followed by hex (4 hex digits per
485    byte) containing UCS-2 characters.
486
487    When written by app\_sms (e.g. incoming messages), the file is written
488    with ud= if it can be (no control characters). If it cannot, the a
489    comment line ;ud= is used to show the user data for human readability
490    and ud\# or ud\#\# is used.
491
492 \section{Delivery reports}
493
494    The SMS specification allows for delivery reports. These are requested
495    using the srr bit. However, as these do not work in the UK yet they
496    are not fully implemented in this application. If anyone has a telco
497    that does implement these, please let me know. BT in the UK have a non
498    standard way to do this by starting the message with *0\#, and so this
499    application may have a UK specific bodge in the near future to handle
500    these.
501
502    The main changes that are proposed for delivery report handling are :
503
504 \begin{itemize}
505      \item New queues for sent messages, one file for each destination
506        address and message reference.
507
508      \item New field in message format, user reference, allowing applications
509        to tie up their original message with a report.
510
511      \item Handling of the delivery confirmation/rejection and connecting to
512        the outgoing message - the received message file would then have
513        fields for the original outgoing message and user reference
514        allowing applications to handle confirmations better.
515 \end{itemize}