Я использую Gammu на своем сервере для настройки шлюза SMS, но у меня возникла проблема, когда я переходил от получения идентификаторов, чтобы просто получить необработанные SMS-сообщения из БД Gammu (в MySQL)Часть таблицы входящих сообщений выглядит следующим образом:
| UDH | TextDecoded | ID | Processed |
| 0500034A0201 | Some long text (156 l.) | 1 | false |
| 0500034A0202 | Some continuing text | 2 | false |
| | An SMS (less than 160 l) | 3 | false |
Если SMS содержит более 160 букв, оно разделяется на несколько записей, обозначенных UDH
.UDH
создается
- частью
UDH
(050003), указывающей, что это SMS. - часть
UDH
(4A02) является уникальным идентификатором. - часть
UDH
(01) является частью номера SMS.
Я могу проверить, полностью ли получено SMS, если TextDecoded
(последней записи с длинным SMS (с UDH
)) меньше 156 букв или TheRecevingDateTime
более 3 минут.
Мне нужно создать хранимые процедуры для получения SMS (здесь SMS может быть длиной более 160 писем) и получения всех новых SMS (если Processed
неверно).Я уже создал пример того, как получить SMS, которое выглядит как
DELIMITER €€
CREATE PROCEDURE `GetSMS`(IN smsid int(10))
BEGIN
DECLARE smsudh TEXT;
SELECT `UDH` INTO smsudh FROM `inbox` WHERE `ID`=smsid;
IF (STRCMP(smsudh, '') < 1) THEN
SELECT * FROM `inbox` WHERE `ID`=smsid;
ELSE
SELECT * FROM `inbox` WHERE `UDH` LIKE CONCAT(LEFT(smsudh, (LENGTH(smsudh)-2)), "%") GROUP BY `ID` ORDER BY `UDH`;
END IF;
END €€
DELIMITER ;
Но я не могу понять, как создать хранимую процедуру для получения всех новых SMS.
** РЕДАКТИРОВАТЬ **
- Должны быть получены все новые SMS
- Длинное SMS получено, когда последняя запись (с
UDH
) получена позже, чем через 3 минуты из-за TheReceivingDateTime
или TextDecoded
короче 156 букв - SMS-сообщение без
UDH
только что получено (его нельзя сочетать с другими SMS-сообщениями без UDH
)
Iнадеюсь, вы понимаете мой вопрос