home | help
GAMMU-SMSD-TABLES(7)		      Gammu		    GAMMU-SMSD-TABLES(7)

NAME
     gammu-smsd-tables	-  description of tables for database backends of gammu-
     smsd(1)

     The backends themselves are described in their sections, this document  de-
     scribes general database structure and required tables.

     More  SMS	daemons can share single database. If you do not specify PhoneID
     in their configuration, all are treated equally and you have  no  guarantee
     which  one sends outgoing message. If you configure PhoneID and use it when
     inserting message to the outbox table (gammu-smsd-inject does  this),  each
     SMS daemon will have separate outbox queue. See also smsd-multi.

RECEIVING OF MESSAGES
     Received messages are stored in inbox table.

TRANSMITTING OF MESSAGES
     Transmitted  messages  are  read  from table outbox and possible subsequent
     parts of the same message from outbox_multipart.

DESCRIPTION OF TABLES
   gammu
     Table holding single field Version - version  of  a  database  schema.  See
     History of database structure for details what has changed.

   inbox
     Table where received messages will be stored.

     Fields description:

     UpdatedInDB (timestamp)
	    when somebody (daemon, user, etc.) updated it

     ReceivingDateTime (timestamp)
	    when SMS was received

     Text (text)
	    encoded SMS text (for all SMS)

     SenderNumber (varchar(20))
	    decoded SMS sender number

     Coding (enum('Default_No_Compression', 'Unicode_No_Compression', '8bit',
     'Default_Compression', 'Unicode_Compression'))
	    SMS text coding

     UDH (text)
	    encoded User Data Header text

     SMSCNumber (varchar(20))
	    decoded SMSC number

     Class (integer)
	    SMS class or -1 (0 is flash SMS, 1 is normal one, 127 is USSD)

     TextDecoded (varchar(160))
	    decoded SMS text (for Default Alphabet/Unicode SMS)

     ID (integer unsigned)
	    SMS identificator (for using with external applications)

     RecipientID (text)
	    which Gammu daemon has added it

     Processed (enum('false', 'true'))
	    you can use for marking, whether SMS was processed or not

     Status (integer)
	    Status of incoming message. Currently only used for Class 127 (USSD)
	    messages with following meaning:

	    1	   Unknown status.

	    2	   No action is needed, maybe network initiated USSD.

	    3	   Reply is expected.

	    4	   USSD dialog terminated.

	    5	   Another client replied.

	    6	   Operation not supported.

	    7	   Network timeout.

	    New in version 1.38.5.

   outbox
     Messages enqueued for sending should be placed in this table. If message is
     multipart, subsequent parts are stored in table outbox_multipart.

     Fields description:

     UpdatedInDB (timestamp)
	    when somebody (daemon, user, etc.) updated it

     InsertIntoDB (timestamp)
	    when message was inserted into database

     SendingDateTime (timestamp)
	    set  it to some value, when want to force sending after some planned
	    time

     SendBefore (time)
	    Send message before specified time, can be used  to  limit	messages
	    from being sent in night. Default value is 23:59:59

	    New in version 1.29.90.

     SendAfter (time)
	    Send  message  after  specified  time, can be used to limit messages
	    from being sent in night. Default value is 00:00:00

	    New in version 1.29.90.

     Text (text)
	    SMS text encoded using hex values in proper coding. If you	want  to
	    use TextDecoded field, keep this NULL (or empty).

     DestinationNumber (varchar(20))
	    recipient number

     Coding (enum('Default_No_Compression', 'Unicode_No_Compression', '8bit',
     'Default_Compression', 'Unicode_Compression'))
	    SMS text coding

     UDH (text)
	    User  Data	Header	encoded  using hex values which will be used for
	    constructing the message. Without this,  message  will  be	sent  as
	    plain text.

     Class (integer)
	    SMS class or -1 (0 is normal SMS, 1 is flash one, 127 is USSD)

     TextDecoded (varchar(160))
	    SMS text in "human readable" form

     ID (integer unsigned)
	    SMS/SMS sequence ID

	    Please note that this number has to be unique also for sentitems ta-
	    ble, so reusing message IDs might not be a good idea.

     MultiPart (enum('false','true'))
	    info, whether there are more SMS from this sequence in outbox_multi-
	    part

     RelativeValidity (integer)
	    SMS relative validity like encoded using GSM specs

     SenderID (text)
	    which  SMSD  instance should send this one sequence, see PhoneID and
	    smsd-multi. If blank, first SMSD who sees this  message  first  will
	    process it.

     SendingTimeOut (timestamp)
	    used by SMSD instance for own targets

     DeliveryReport (enum('default','yes','no'))
	    when  default  is  used, Delivery Report is used or not according to
	    SMSD instance settings; yes forces Delivery Report.

     CreatorID (text)
	    identification of program created the message

     Retries (integer)
	    number of attempted retries when sending this message

     Priority (integer)
	    priority of message, messages with	higher	priority  are  processed
	    first

     Status (enum('SendingOK', 'SendingOKNoReport', 'SendingError', 'Deliv-
     eryOK', 'DeliveryFailed', 'DeliveryPending', 'DeliveryUnknown', 'Error',
     'Reserved'))
	    Status  of	message sending. SendingError means that phone failed to
	    send the message, Error indicates some other error while  processing
	    message.

	    SendingOK
		   Message has been sent, waiting for delivery report.

	    SendingOKNoReport
		   Message has been sent without asking for delivery report.

	    SendingError
		   Sending has failed.

	    DeliveryOK
		   Delivery report arrived and reported success.

	    DeliveryFailed
		   Delivery report arrived and reports failure.

	    DeliveryPending
		   Delivery report announced pending deliver.

	    DeliveryUnknown
		   Delivery report reported unknown status.

	    Error  Some  other	error  happened  during  sending (usually bug in
		   SMSD).

	    Reserved
		   Initial value, meaning the status has not been set.

	    New in version 1.38.5.

     StatusCode (integer)
	    GSM status code

	    New in version 1.38.5.

   outbox_multipart
     Data for outgoing multipart messages.

     Fields description:

     ID (integer unsigned)
	    the same meaning as values in outbox table

     Text (text)
	    the same meaning as values in outbox table

     Coding (enum('Default_No_Compression', 'Unicode_No_Compression', '8bit',
     'Default_Compression', 'Unicode_Compression'))
	    the same meaning as values in outbox table

     UDH (text)
	    the same meaning as values in outbox table

     Class (integer)
	    the same meaning as values in outbox table

     TextDecoded (varchar(160))
	    the same meaning as values in outbox table

     ID (integer unsigned)
	    the same meaning as values in outbox table

     SequencePosition (integer)
	    info, what is SMS number in SMS sequence (start at 2, first part  is
	    in outbox table).

     Status (enum('SendingOK', 'SendingOKNoReport', 'SendingError', 'Deliv-
     eryOK', 'DeliveryFailed', 'DeliveryPending', 'DeliveryUnknown', 'Error',
     'Reserved'))
	    Status  of	message sending. SendingError means that phone failed to
	    send the message, Error indicates some other error while  processing
	    message.

	    SendingOK
		   Message has been sent, waiting for delivery report.

	    SendingOKNoReport
		   Message has been sent without asking for delivery report.

	    SendingError
		   Sending has failed.

	    DeliveryOK
		   Delivery report arrived and reported success.

	    DeliveryFailed
		   Delivery report arrived and reports failure.

	    DeliveryPending
		   Delivery report announced pending deliver.

	    DeliveryUnknown
		   Delivery report reported unknown status.

	    Error  Some  other	error  happened  during  sending (usually bug in
		   SMSD).

	    Reserved
		   Initial value, meaning the status has not been set.

	    New in version 1.38.5.

     StatusCode (integer)
	    GSM status code

	    New in version 1.38.5.

   phones
     Information about connected phones. This table  is  periodically  refreshed
     and you can get information such as battery or signal level from here.

     Fields description:

     ID (text)
	    PhoneID value

     UpdatedInDB (timestamp)
	    when this record has been updated

     InsertIntoDB (timestamp)
	    when this record has been created (when phone has been connected)

     TimeOut (timestamp)
	    when this record expires

     Send (boolean)
	    indicates whether SMSD is sending messages, depends on configuration
	    directive Send

     Receive (boolean)
	    indicates  whether SMSD is receiving messages, depends on configura-
	    tion directive Receive

     IMEI (text)
	    IMEI of phone

     IMSI (text)
	    SIM IMSI

     Client (text)
	    client name, usually string Gammu with version

     Battery (integer)
	    battery level in percent (or -1 if unknown)

     Signal (integer)
	    signal level in percent (or -1 if unknown)

     Sent (integer)
	    Number of sent SMS messages (SMSD does not reset this counter, so it
	    might overflow).

     Received (integer)
	    Number of received SMS messages (SMSD does not reset  this	counter,
	    so it might overflow).

   sentitems
     Log  of  sent  messages (and unsent ones with error code). Also if delivery
     reports are enabled, message state is updated after receiving delivery  re-
     port.

     Fields description:

     UpdatedInDB (timestamp)
	    when somebody (daemon, user, etc.) updated it

     InsertIntoDB (timestamp)
	    when message was inserted into database

     SendingDateTime (timestamp)
	    when message has been sent

     DeliveryDateTime (timestamp)
	    Time of receiving delivery report (if it has been enabled).

     Status (enum('SendingOK', 'SendingOKNoReport', 'SendingError', 'Deliv-
     eryOK', 'DeliveryFailed', 'DeliveryPending', 'DeliveryUnknown', 'Error'))
	    Status  of	message sending. SendingError means that phone failed to
	    send the message, Error indicates some other error while  processing
	    message.

	    SendingOK
		   Message has been sent, waiting for delivery report.

	    SendingOKNoReport
		   Message has been sent without asking for delivery report.

	    SendingError
		   Sending has failed.

	    DeliveryOK
		   Delivery report arrived and reported success.

	    DeliveryFailed
		   Delivery report arrived and reports failure.

	    DeliveryPending
		   Delivery report announced pending deliver.

	    DeliveryUnknown
		   Delivery report reported unknown status.

	    Error  Some  other	error  happened  during  sending (usually bug in
		   SMSD).

     StatusError (integer)
	    Status of delivery from delivery report message, codes  are  defined
	    in GSM specification 03.40 section 9.2.3.15 (TP-Status).

     Text (text)
	    SMS text encoded using hex values

     DestinationNumber (varchar(20))
	    decoded destination number for SMS

     Coding (enum('Default_No_Compression', 'Unicode_No_Compression', '8bit',
     'Default_Compression', 'Unicode_Compression'))
	    SMS text coding

     UDH (text)
	    User Data Header encoded using hex values

     SMSCNumber (varchar(20))
	    decoded number of SMSC, which sent SMS

     Class (integer)
	    SMS class or -1 (0 is normal SMS, 1 is flash one, 127 is USSD)

     TextDecoded (varchar(160))
	    SMS text in "human readable" form

     ID (integer unsigned)
	    SMS ID

     SenderID (text)
	    which SMSD instance sent this one sequence, see PhoneID

     SequencePosition (integer)
	    SMS number in SMS sequence

     TPMR (integer)
	    Message Reference like in GSM specs

     RelativeValidity (integer)
	    SMS relative validity like encoded using GSM specs

     CreatorID (text)
	    copied from CreatorID from outbox table

     StatusCode (integer)
	    GSM status code

	    New in version 1.38.5.

HISTORY OF DATABASE STRUCTURE
     NOTE:
	Testing  versions (see versioning) do not have to keep same table struc-
	ture as final releases. Below mentioned versions are  for  informational
	purposes only, you should always use stable versions in production envi-
	ronment.

     History of schema versions:

     17

	    * Added Status field to outbox and outbox_multipart.

	    * Added StatusCode field to sentitems, outbox and outbox_multipart.

	    * Added Status field to inbox.

	Changed in version 1.38.5.

     16

	* Removed unused daemons, pbk and pbk_groups tables.

	* Added primary key to the gammu table.

	* Added Priority field to the outbox.

	* Added IMSI field to the phones.

	Changed in version 1.37.90.

     15
	Added Retries field to the outbox.

	Changed in version 1.36.7.

     14
	Added NetCode and NetName fields.

	Changed in version 1.34.0.

     13     Added SendBefore and SendAfter fields.

	    Changed in version 1.29.90.

	    Also  PostgreSQL  fields are now case sensitive (same as other back-
	    ends).

	    Changed in version 1.29.93.

     12     the changes only affect MySQL structure changing default values  for
	    timestamps	from 0000-00-00 00:00:00 to CURRENT_TIMESTAMP() by using
	    triggers, to update to this version, just execute  triggers  defini-
	    tion at the end of SQL file.

	    Changed in version 1.28.94.

     11     all  fields  for  storing  message text are no longer limited to 160
	    chars, but are arbitrary length text fields.

	    Changed in version 1.25.92.

     10     DeliveryDateTime is now NULL when message is  not  delivered,  added
	    several indexes

	    Changed in version 1.22.95.

     9	    added sent/received counters to phones table

	    Changed in version 1.22.93.

     8	    Signal and battery state are now stored in database.

	    Changed in version 1.20.94.

     7	    Added CreatorID to several tables.

	    Changed in version 1.07.00.

     6	    Many fields in outbox can now be NULL.

	    Changed in version 1.06.00.

     5	    Introduced daemons table and various other changes.

	    Changed in version 1.03.00.

     3	    Introduced phones table and various other changes.

	    Changed in version 0.98.0.

EXAMPLES
   Creating tables
     SQL  scripts to create all needed tables for most databases are included in
     Gammu documentation (docs/sql). As well as  some  PHP  scripts  interacting
     with the database.

     For example to create SQLite tables, issue following command:

	sqlite3 smsd.db < docs/sql/sqlite.sql

   Injecting a message using SQL
     To send a message, you can either use gammu-smsd-inject, which does all the
     magic for you, or you can insert the message manually. The simplest example
     is short text message:

	INSERT INTO outbox (
	    DestinationNumber,
	    TextDecoded,
	    CreatorID,
	    Coding
	) VALUES (
	    '800123465',
	    'This is a SQL test message',
	    'Program',
	    'Default_No_Compression'
	);

     Please  note  usage of TextDecoded field, for Text field, you would have to
     hex encode the unicode text:

	INSERT INTO outbox (
	    DestinationNumber,
	    Text,
	    CreatorID,
	    Coding
	) VALUES (
	    '800123465',
	    '005400680069007300200069007300200061002000530051004c002000740065007300740020006d006500730073006100670065',
	    'Program',
	    'Default_No_Compression'
	);

   Injecting long message using SQL
     Inserting multipart messages is a bit more tricky, you  need  to  construct
     also  UDH	header and store it hexadecimally written into UDH field. Unless
     you have a good reason to do this manually, use  gammu-smsd-inject,  C  li-
     brary (SMSD_InjectSMS()) or Python library (gammu.smsd.SMSD.InjectSMS()).

     For  long	text  message,	the UDH starts with 050003 followed by byte as a
     message reference (you can put any hex value there, but it should	be  dif-
     ferent  for each message, D3 in following example), byte for number of mes-
     sages (02 in example, it should be unique for each message you send to same
     phone number) and byte for number of current message (01 for first message,
     02 for second, etc.).

     I most cases, the mutlipart message has to be class 1.

     For example long text message of two parts could look like following:

	INSERT INTO outbox (
	    CreatorID,
	    MultiPart,
	    DestinationNumber,
	    UDH,
	    TextDecoded,
	    Coding,
	    Class
	) VALUES (
	    'Gammu 1.23.91',
	    'true',
	    '123465',
	    '050003D30201',
	    'Mqukqirip ya konej eqniu rejropocejor hugiygydewl tfej nrupxujob xuemymiyliralj. Te tvyjuh qaxumur ibewfoiws zuucoz tdygu gelum L ejqigqesykl kya jdytbez',
	    'Default_No_Compression',
	    1
	)

	INSERT INTO outbox_multipart (
	    SequencePosition,
	    UDH,
	    Class,
	    TextDecoded,
	    ID,
	    Coding,
	    Class
	) VALUES (
	    2,
	    '050003D30202',
	    'u xewz qisubevumxyzk ufuylehyzc. Nse xobq dfolizygqysj t bvowsyhyhyemim ovutpapeaempye giuuwbib.',
	    <ID_OF_INSERTED_RECORD_IN_OUBOX_TABLE>,
	    'Default_No_Compression',
	    1
	)

     NOTE:
	Adding UDH means that you have less space for text, in above example you
	can use only 153 characters in single message.

AUTHOR
     Michal AihaA <michal@cihar.com>

COPYRIGHT
     2009-2015, Michal AihaA <michal@cihar.com>

1.42.0				  Oct 03, 2020		    GAMMU-SMSD-TABLES(7)

home | help