(+84) 236.3827111 ex. 402

SMS Gateway - Gammu (Phần 2)


3. Thuộc tính RunOnReceive của gammu-smsd

a) Mô tả về RunOnReceive

- Gammu-smsd có thể được cấu hình thuộc tính RunOnReceive ở tập tin cấu hình để thực hiện nhiệm vụ chạy một chương trình được định nghĩa sẵn sau khi nhận được tin nhắn.

- Tiến trình này được thực hiện thông qua shell, vì thế bạn cần phải tránh một số kí tự đặc biệt và bạn có thể bao gồm nhiều số tham số. Ngoài ra, các thông số với id (identifier) của tin nhắn được nhận sẽ được nối vào các dòng lệnh. Các id này phụ thuộc vào việc sử dụng các dịch vụ phụ trợ. Thông thường nó là ID của một hàng được thêm vào dịch vụ cơ sở dữ liệu hoặc cũng có thể là tên một file của dịch vụ lưu trữ theo file.

- Gammu-smsd đợi cho kịch bản kết thúc. Nếu thực hiện một số đoạn mã lệnh tiêu tốn nhiều thời gian thì RunOnReceive sẽ làm cho SMSD không nhận được tin nhắn mới. Tuy nhiên, để hạn chế sự ngắt quãng từ tình trạng này, thì thời gian chờ đợi được giới hạn lại là 2 phút. Sau khoảng thời gian này, SMSD sẽ tiếp tục hoạt động lại bình thường và có thể thực thi kịch bản thêm 1 lần nữa nếu nhận được tin nhắn được gửi tới.

b) Một số biến toàn cục mà RunOnReceive hỗ trợ dùng với gammu-smsd

- SMS_MESSAGES: Số tin vật lý nhận được

- DECODED_PARTS: Số phần tin được giải mã

- SMS_n_CLASS: Class của tin

- SMS_n_NUMBER: Số điện thoại người gởi

- SMS_n_TEXT: Nội dung tin

- DECODED_n_TEXT: Giải mã tin nhắn dài

- DECODED_n_MMS_SENDER: Số điện thoại người gởi MMS

- DECODED_n_MMS_TITLE: Tiêu đề MMS

- DECODED_n_MMS_ADDRESS: URL của MMS

- DECODED_n_MMS_SIZE: Kích thước tin MMS

Trong đó, n được thay thế bởi số tin nhắn hiện tại

c) Các dịch vụ lưu trữ hỗ trợ

i. Files
*) Với tin nhắn nhận được

- Tin nhắn nhận được lưu trữ ở trong thư mục xác định và được cấu hình trong tập tin cấu hình gammu-smsd.

- Cấu trúc của tin nhắn nhận được khi lưu trữ trong thư mục hộp thư đến (inbox) sẽ có dạng:

IN_

- Trong đó:

: Có định dạng là YYYYMMDD

: Có định dạng là HHMMSS

: Số điện thoại của người gửi tin nhắn

: thứ tự của một tin nhắn trong trường hợp của nhiều tin nhắn được nhận cùng lúc. Định dạng của nó là NN

: Một thành phần của thông điệp dành cho tin nhắn nhiều thành phần. Nó có định dạng là NN

: với tin nhắn văn bản thì phần mở rộng là txt, với tin nhắn 8-bit thì được lưu với phần mở rộng là bin, còn smsbackup là phần mở rộng để sao lưu tin nhắn

Ví dụ : IN20160416_021531_00_+841267149998_00.txt

*) Với tin nhắn được gửi đi

- Tin nhắn truyền đi được đọc từ một thư mục xác định và được cấu hình trong tập tin cấu hình gammu-smsd.

- Cấu trúc của tin nhắn gửi đi được được tạo ra trong thư mục hộp thư đi (outbox) phải được định dạng theo một trong các định dạng sau:

OUT.

OUT__.

OUT_

- Trong đó:

: Số điện thoại người nhận

: Một kí tự trong bảng chữ cái (A-Z) với A có độ ưu tiên cao nhất

: Với tin nhắn SMS văn bản bình thường thì có phần mở rộng là txt, còn smsbackup là phần mở rộng để sao lưu tin nhắn

: Kí tự tùy ý mà được bỏ qua

Ví dụ: OUTG20160620_193810_123_+841267149998_xpq.txt

ii. SQL service

SQL service chứa tất cả các dữ liệu trong cơ sở dữ liệu. Nó có thể sử dụng một trong phần phụ trợ của SQL.

*) Các thông số kết nối SQL

- User: Tên người dùng kết nối tới cơ sở dữ liệu

- Password: Mật khẩu để kết nối tới cơ sở dữ liệu

- Host: Máy chủ cơ sở dữ liệu hoặc tên nguồn dữ liệu

- Database: Tên cơ sở dữ liệu

- Driver: native_mysql, native_pgsql, odbc…

- SQL: Ngôn ngữ SQL để sử dụng

*) SQL queries

Hầu như tất cả các đối tượng truy vấn đều có thể được cấu hình. Có thể chỉnh sửa chúng trong [sql] section. Có một số biến được sử dụng trong SQL queries. Có thể phân thành 3 nhóm:

- Thông số đặc trưng của điện thoại mà có thể sử dụng trong tất cả các truy vấn.

- Thông số đặc trưng của tin nhắn SMS có thể sử dụng trong các truy vấn mà làm việc với các tin nhắn SMS.

- Truy vấn cụ thể mà là các dữ liệu bằng số và đặc trưng là cho phép truy vấn cụ thể (hoặc có thể thiết lập các truy vấn).

  • Các thông số đặc trưng của điện thoại:

%I : IMEI của điện thoại

%P: ID của điện thoại

%N: Tên của máy khách

  • Các thông số đặc trưng của tin nhắn SMS

%R: Số điện thoại từ xa

%C: Thời gian gửi

%e: Trạng thái tiếp nhận của tin nhắn gửi đi hay trạng thái gửi lỗi

%t: Chuyển tiếp tin nhắn

%d: Thời gian nhận được của tin nhắn được gửi tới

%E: mã hóa nội dung tin nhắn SMS

%c: Lấy nội dung tin nhắn đã được mã hóa

%F: Số điện thoại của tổng đài SMS

%T: Giải mã nội dung tin nhắn SMS đã mã hóa

%A: Gửi tin nhắn

*) Cấu trúc cơ sở dữ liệu của SNMP

- Tin nhắn được nhận sẽ lưu trữ trong bảng hộp thư đến (inbox).

- Tin nhắn được gửi đi thì sẽ được đọc từ bảng hộp thư đi (outbox) và phần tiếp theo có thể có của cùng một tin nhắn tử hộp thư đi nhiều phần (outbox_multipart).

Bảng hộp thư đến (inbox)

- Bảng hộp thư đến là nơi các tin nhắn nhận được sẽ được lưu trữ.

- Mô tả về các trường:

UpdatedInDB (timestamp) : Sinh ra khi (daemon, user…) cập nhập bảng này

ReceivingDateTime (timestamp): Thời gian khi tin nhắn đến

Text (text): Tin nhắn văn bản được mã hóa

SenderNumber (varchar(20)): Số điện thoại người gửi tin nhắn được giải mã

Coding (enum(‘Default_No_Compression’, ‘Unicode_No_Compression’, ‘8bit’, ‘Default_Compression’, ‘Unicode_Compression’)): Tin nhắn văn bản đã mã hóa

UDH (text): Mã hóa phần User Data Header của tin nhắn

SMSCNumber (varchar(20)): Giải mã số SMSC

Class (integer): Class của tin nhắn SMS

TextDecoded (varchar(160)): Tin nhắn văn bản đã giải mã

ID (integer): ID của tin nhắn

RecipientID (text): ID của người nhận mà Gammu daemon đã được thêm vào nó

Processed (enum(‘false’, ‘true’)): Sử dụng để đánh dấu cho dù tin nhắn SMS đã được xử lý hay không

Bảng hộp thư đi (outbox)

- Tin nhắn đợi để gửi đi sẽ được lưu trong bảng này, nếu tin nhắn là nhiều phần, thì phần tiếp theo được lưu trữ trong bảng hộp thư đi nhiều phần (outbox_multipart).

- Mô tả về các trường:

UpdatedInDB (timestamp): Sinh ra khi (daemon, user…) cập nhập bảng này

InsertIntoDB (timestamp): Sinh ra tin nhắn được đưa vào vào cơ sở dữ liệu

SendingDateTime (timestamp): Thiết lập một số giá trị khi muốn tin nhắn được đi sau một thời gian đã định trước

SendBefore (time): Gửi tin nhắn trước thời gian đã dự kiến

SendAfter (time): Gửi tin nhắn sau thời gian đã dự kiến

Text (text): tin nhắn SMS được mã hóa

DestinationNumber (varchar (20)): Số điện thoại của người nhận tin nhắn

Coding (enum(‘Default_No_Compression’, ‘Unicode_No_Compression’, ‘8bit’, ‘Default_Compression’, ‘Unicode_Compression’)): Tin nhắn văn bản đã mã hóa

UDH (text): Mã hóa phần User Data Header của tin nhắn

Class (integer): Class của tin nhắn SMS

TextDecoded (varchar (160)): Tin nhắn văn bản ở dạng con người có thể đọc được

ID (integer): ID của tin nhắn

MultiPart (enum(‘false’,’true’)): Khai báo thông tin có nhiều tin nhắn theo trình tự trong hộp thư đi nhiều thành phần

RelativeValidity (integer): Tin nhắn SMS có hiệu lực tương đối như mã hóa sử dụng kĩ thuật GSM

SendingTimeOut (timestamp): Được sử dụng bởi đối tượng SMSD cho các mục tiêu chính

DeliveryReport (enum(‘default’,’yes’,’no’)): Khi mặc định được sử dụng, báo cáo gửi sẽ được sử dụng hoặc không tùy theo các thiết lập của đối tượng SMSD

CreatorID (text): ID người gửi, nó phải phù hợp với PhoneID trong cấu hình SMSD

Hộp thư đi nhiều thành phần (outbox_multipart)

- Dữ liệu cho các tin nhắn đi nhiều thành phần sẽ được lưu ở đây

- Mô tả về các trường:

ID (integer): Có ý nghĩa tương tự như các giá trị trong bảng hộp thư đi

Text (text): Có ý nghĩa tương tự như các giá trị trong bảng hộp thư đi

Coding (enum(‘Default_No_Compression’, ‘Unicode_No_Compression’, ‘8bit’, ‘Default_Compression’, ‘Unicode_Compression’)): Có ý nghĩa tương tự như các giá trị trong bảng hộp thư đi

UDH (text): Có ý nghĩa tương tự như các giá trị trong bảng hộp thư đi

Class (integer): Có ý nghĩa tương tự như các giá trị trong bảng hộp thư đi

TextDecoded (varchar(160)): Có ý nghĩa tương tự như các giá trị trong bảng hộp thư đi

SequencePosition (integer): Cho biết thông tin số lượng tin nhắn theo thứ tự tin (bắt đầu với giá trị 2, giá trị đầu tiên là một phần trong bảng hộp thư đi)

Bảng thông tin thiết bị (phones)

- Bảng này cung cấp thông tin về kết nối thiết bị, nó được định kì làm mới và cung cấp các thông tin như (pin, cấp tín hiệu…).

ID (text): Giá trị ID của thiết bị

UpdatedInDB (timestamp): Khi hồ sơ được tạo ra (khi thiết bị đã được kết nối)

TimeOut (timestamp): Khi hồ sơ này hết hiệu lực (khi thiết bị kết thúc kết nối)

Send (boolean): Chỉ ra trạng thái được gửi tin nhắn

Receive (boolean): Chỉ ra trạng thái được nhận tin nhắn

IMEI (text): IMEI của thiết bị

Client (text): Tên chủ thiết bị

Battery (integer): Chỉ ra mức pin của thiết bị theo phần trăm

Signal (integer): Chỉ ra mức tín hiệu của thiết theo phần trăm

Sent (integer): Số lượng tin nhắn SMS đã được gửi

Received (integer): Số lượng tin nhắn SMS đã được nhận


Tham khảo:

[1] https://wammu.eu/docs/manual/quick/index.html#quick

[2] https://wammu.eu/docs/manual/quick/index.html#starting-with-smsd