Giới thiệu
Kannel là một phần mềm mó nguồn mở được khởi tạo bởi Wapit Ltd vào thỏng 6 năm 1999 và được tiếp tục phỏt triển cho đến nay bởi Kannel Group. Kannel hoạt động như là một SMS Gateway và WAP Gateway. Ngoài ra nú cũn cú thể hoạt động như một Push Proxy Gateway. Phiờn bản mới nhất tớnh tới thời điểm hiện tại là 1.4.0. Thỏng 7 năm 2001, Kannel là phần mềm đầu tiờn được WAP Forum chứng nhận là WAP 1.1 gateway và đến thỏng 10 năm 2004 thỡ WAP Forum chứng nhận là WAP 2.0 gateway. Một điều vụ cựng quan trọng là Kannel hỗ trợ rất nhiều chuẩn kết nối tới SMS Center trong đú cú SMPP – chuẩn giao thức kết nối được dựng bởi hầu hết cỏc nhà cung cấp dịch vụ ở Việt Nam (Vinaphone, Mobiphone, Viettel mobile).
Kannel được phỏt triển chớnh cho mụi trường Linux và cú thể khỏ dễ dàng chuyển sang dựng trờn cỏc hệ thống Unix. Để cài đặt và sử dụng Kannel cần phải cú cỏc phần mềm sau trong hệ thống:
Trỡnh biờn dịch C và cỏc thư viện phỏt triển phần mềm cựng cỏc cụng cụ liờn quan.
Gnome-xml (khuyến cỏo dựng libxml 2.2.5). GNU Make
POSIX threads (pthread.h). Cài đặt Kannel
Đầu tiờn cần tải về mó nguồn của Kannel tại http://www.kannel.org/download/
1.4.0/gateway-1.4.0.tar.bz2
Sau đú chuyển tới thư mục mà bạn lưu file và thực hiện cỏc lệnh sau: bzip2 -cd gateway-1.4.0.tar.bz2 | tar xf –
cd gateway-1.4.0
./configure --prefix=$install_dir --enable-start-stop-daemon make
make install
Với $install_dir là thư mục mà bạn sẽ cài kannel vào.
Sau khi thực hiện thành cụng, trong thư mục $install_dir/sbin sẽ cú cỏc file sau: bearerbox, smsbox, wapbox …. File bearerbox là file thực thi chớnh cho hệ thống
của Kannel, nú sẽ kết nối cỏc thành phần khỏc của Kannel và phụ trỏch việc kết nối tới cỏc SMS Center. File smsbox chớnh là file đảm nhiệm chức năng gửi nhận tin nhắn SMS. File wapbox đảm nhiệm chức năng của WAP Gateway.
Sử dụng Kannel
Để sử dụng Kannel, cần phải tạo ra file cấu hỡnh cho hệ thống. File này thực ra là một file văn bản chứa cỏc nhúm của cỏc biến cấu hỡnh của hệ thống. Cỏc nhúm được chia ra bởi cỏc dũng khụng cú gỡ. Nhúm cấu hỡnh sẽ được biểu lộ bởi biến group. Cỏc dũng chỳ thớch cú thể đặt sau dấu # và cỏc dũng này sẽ bị bỏ qua.
Cỏc dũng định nghĩa cỏc biến cấu hỡnh cú tờn của biến đú, dấu bằng ( = ) và giỏ trị tương ứng được gỏn cho biến đú. Tờn của biến cú thể chứa bất kỳ ký tự nào ngoại trừ dấu trắng và dấu bằng ( = ). Giỏ trị của biến là một xõu cú thể cú cặp dấu “” bao quanh chỳng. Cặp dấu “” cú tỏc dụng khi mà giỏ trị của biến đú cú cỏc dấu trắng ở đầu hay cuối (bỡnh thường cỏc dấu này sẽ bị bỏ đi). Sau đõy là một vớ dụ:
# A do-nothing service. group = sms-service keyword = nop
text = "You asked nothing and I did it!" # Default service.
group = sms-service keyword = default
text = "No services defined"
Cũng cú thể dựng include để ghộp cỏc file cấu hỡnh nhỏ vào vị trớ dựng include. Điều này giỳp việc quản trị file cấu hỡnh trong những hệ thống lớn dễ dàng và hiệu quả hơn. Chỳng ta cú thể ghộp một file hay tất cả cỏc file trong một thư mục. Vớ dụ:
#include one file include = "file.conf" #include one directory include = "conf_dir"
Sau đõy là cỏch thiết lập cấu hỡnh cho cỏc nhúm cần thiết để Kannel cú thể hoạt động như một SMS Gateway và kết nối tới SMS Center thụng qua giao thức SMPP phiờn bản 3.4. Để đơn giản chỳng ta sẽ chỉ nờu ra những thành phần cần thiết
Nhúm core
Đõy là nhúm bắt buộc phải cú và thường là nhúm đầu tiờn trong tệp cấu hỡnh. Nhúm này chứa cỏc cấu hỡnh chung cho hoạt động của toàn hệ thống.
Sau đõy là danh sỏch cỏc biến cấu hỡnh trong nhúm này và ý nghĩa của chỳng:
group: Bắt buộc phải là “core”.
admin-port: Cổng mà bearerbox đợi cỏc lệnh điều khiển thụng qua giao thức HTTP. Cỏc lệnh điều khiển này bao gồm cỏc lệnh như tạm dừng hệ thống (suspend), cho hệ thống tiếp tục chạy (resume), khởi động lại hệ thống (restart), tắt hệ thống (shutdown), xem trạng thỏi của hệ thống (status) …
admin-password: Mật khẩu cần khi thực hiện cỏc lệnh điều khiển.
smsbox-port: Đõy là cổng mà bearerbox sẽ mở ra để đợi kết nối từ cỏc smsbox. Tham số này giỳp cho nhiều smsbox cú thể kết nối tới một bearerbox và smsbox khụng nhất thiết phải chạy trờn cựng một mỏy tớnh với bearerbox. Nếu khụng chỉ định tham số này thỡ bearerbox sẽ khụng mở cổng để đợi kết nối từ smsbox và vỡ vậy Kannel sẽ khụng xử lý bất kỳ một tin SMS nào. Trong trường hợp này cỏc chức năng của SMS Gateway sẽ khụng được sử dụng.
wapbox-port:Cũng giống như smsbox-port, nhưng là cho cỏc kết nối từ wapbox. Trong trường hợp khụng chỉ định cỏc chức năng của WAP Gateway sẽ khụng được sử dụng.
box-deny-ip: Danh sỏch cỏc địa chỉ IP khụng được phộp kết nối tới bearerbox. Cú thể dựng dấu ‘*’ để đại diện cho một số bất kỳ. Cỏc địa chỉ được phõn cỏch bởi dấu ‘;’.
box-allow-ip: Danh sỏch cỏc địa chỉ IP được phộp kết nối tới bearerbox, ngay cả khi nú nằm trong danh sỏch box-deny-ip.
access-log: Tờn của tệp sẽ ghi lại cỏc thụng tin về việc gửi nhận tin nhắn SMS qua hệ thống.
Nhúm smsc
Nhúm này chứa cỏc cấu hỡnh cho việc kết nối tới SMS Center. Nú bao gồm một số cỏc biến cấu hỡnh chung cho tất cả cỏc loại SMS Center và một số biến cấu hỡnh đặc thự cho từng loại SMS Center.
Cỏc biến cấu hỡnh chung:
group: Bắt buộc phải là “smsc”.
smsc: Là xõu chỉ định loại SMS Center. Với cỏc SMS Center dựng giao thức SMPP thỡ nú là “smpp”.
smsc trựng với bớ danh của SMS Center nào thỡ tin nhắn sẽ được gửi tới SMS Center đú. Điều này giỳp cho việc gửi tin nhắn hiệu quả hơn. Vớ dụ khi cần gửi tới 1 thuờ bao trong mạng Vinaphone thỡ việc gửi qua SMS Center của Vinaphone sẽ nhanh hơn nhiều so với việc gửi tin qua SMS Center của Viettel Mobile.
denied-smsc-id: Nếu như khụng tỡm thấy SMS Center cú bớ danh được chỉ định hay hiện tại khụng kết nối được tới SMS Center đú thỡ Kannel tiến hành quỏ trỡnh chọn đường đi cho tin nhắn. Với những tin cú smsc chỉ định nằm trong danh sỏch này sẽ khụng bao giờ được đi qua SMS Center này. Cỏc phần tử được phõn cỏch bởi dấu trắng.
allowed-smsc-id: Chỉ cỏc tin nhắn cú smsc chỉ định nằm trong danh sỏch này mới đi qua được SMS Center này.
allowed-prefix: Danh sỏch cỏc tiền tố của số điện thoại nhận tin được cho phộp qua SMS Center này. Vớ dụ nếu là SMS Center của Vinaphone thỡ chỳng ta cú thể đặt biến này bằng “+8491;8491;091”.
denied-prefix: Danh sỏch cỏc tiền tố của số điện thoại nhận tin khụng cho phộp qua SMS Center này. Vớ dụ nếu là SMS Center của Vinaphone thỡ chỳng ta cú thể đặt biến này bằng “+8490;8490;090;+8498;8498;098”.
reconnect-delay: Số lượng giõy đợi giữa hai lần cố gắng tạo lại kết nối.Mặc định là 10s.
Cỏc biến cấu hỡnh cho cỏc SMS Center dựng giao thức SMPP phiờn bản 3.4: host: Địa chỉ IP của mỏy đang thực thi SMS Center.
port: Cổng dựng để kết nối tới SMS Center.
transceiver-mode: Là giỏ trị logic, nếu là true thỡ sẽ cố gắng sử dụng chế độ TRANSCEIVER để kết nối tới SMS Center. Đõy là tớnh năng mới của giao thức SMPP phiờn bản 3.4. Cỏc phiờn bản trước sẽ khụng hỗ trợ tớnh năng này. Khi dựng nú thỡ việc gửi và nhận tin nhắn sẽ trờn cựng một kết nối và sẽ khụng cần thiết phải đặt receive-port.
receive-port: Cổng sẽ thực hiện cỏc kết nối RECEIVER tới SMS Center. Cỏc kết nối này phụ trỏch việc kiểm tra tin nhắn mới và lấy về. Nú cú thể cú cựng giỏ trị với port.
smsc-username: Tài khoản mà nhà cung cấp dịch vụ cung cấp để kết nối tới SMS Center của họ.
smsc-password: Mật khẩu tương ứng với tài khoản được cung cấp. system-type: Thường là VMA (viết tắt cho Voice Mail Activation).
Mặc định sẽ là “34” (phiờn bản 3.4). Với phiờn bản 3.3 sẽ là “33”.
address-range: Là dải số mà nhà cung cấp dịch vụ cấp cho. Vớ dụ với cụng ty VMG là 8xxx (8009 - 8709).
source-addr-ton: Giỏ trị của TON (Type of number) của địa chỉ gửi tin. Bằng 0 cho Unknown (SMS Center sẽ tự xỏc định) hoặc bằng 1 cho mạng ISDN (Integrated Services Digital Network - mạng được dựng bởi điện thoại số).
source-addr-npi: Giỏ trị của NPI (Numbering plan indicator). í nghĩa cũng giống như TON. Việc kết hợp hai giỏ trị TON và NPI sẽ lựa chọn ra kiểu của địa chỉ là chữ hay số, cú phải là số điện thoại theo kiểu toàn cầu (cú mó nước hay khụng), ….Thường thỡ cỏc thụng số này phụ thuộc vào SMS Center của nhà cung cấp dịch vụ.
source-addr-autodetect: Nếu đặt bằng yes Kannel sẽ cố gắng thử cỏc giỏ trị cú thể của source-addr-ton và source-addr-npi.
dest-addr-ton: Tương tự như trờn nhưng là cho số điện thoại nhận tin. dest-addr-npi: Tương tự như trờn nhưng là cho số điện thoại nhận tin.
connection-timeout: Thời gian tối đa giữa hai lần cú trao đổi với SMS Center, mặc định là 300s. Nếu vượt quỏ thời gian này Kannel sẽ coi rằng kết nối đú khụng cũn hoạt động và sẽ tạo lại kết nối. Đặt bằng 0 để tắt chức năng này.
Nhúm smsbox
Nhúm này bắt buộc phải được thờm vào tệp cấu hỡnh thỡ mới cú thể sử dụng Kannel như một SMS Gateway. Nhúm này chứa cỏc tham số cấu hỡnh cho smsbox. Module smsbox khi được thực thi sẽ kết nối tới bearerbox và nhận cỏc tin nhắn từ SMS Center đồng thời cung cấp một giao diện để gửi tin nhắn qua giao thức HTTP.
Sau đõy là cỏc biến cấu hỡnh cho nhúm này:
group: Bắt buộc phải là “smsbox”
bearerbox-host: Địa chỉ của mỏy chạy bearerbox
sendsms-port: Cổng dựng để gửi tin nhắn thụng qua giao thức HTTP.
sendsms-url: Địa chỉ URL của dịch vụ gửi tin nhắn. Mặc định là /cgi- bin/sendsms
global-sender: Nếu như được đặt thỡ tất cả cỏc tin nhắn gửi ra ngoài sẽ được tự động đặt số điện thoại gửi tin là số này.
access-log: Tờn file ghi cỏc thụng tin về việc gửi nhận cỏc tin thụng qua smsbox này.
được nội dung tin nhắn trả về.
reply-couldnotrepresent: Tin nhắn trả về cho điện thoại nếu như khụng thể đúng gúi kết quả trả về thành tin nhắn SMS.
reply-requestfailed: Tin nhắn trả về cho điện thoại nếu như khi khụng thể kết nối đến dịch vụ HTTP.
reply-emptymessage: Tin nhắn trả về khi nội dung trả về là rỗng. http-request-retry: Số lần cố gắng làm lại khi gọi yờu cầu HTTP bị lỗi. http-queue-delay: Thời gian dừng để đợi giữa hai lần làm lại.
Nhúm sms-service
Nhúm này sẽ cấu hỡnh việc xử lý tin nhắn tới hệ thống. Mỗi khi cú một tin nhắn tới Kannel sẽ truyền nội dung của tin nhắn tới thành phần khỏc để xử lý tin. Việc truyền này cú thể là gọi trực tiếp tệp thực thi của thành phần đú hay một yờu cầu HTTP.
Sau đõy cỏc biến cấu hỡnh của nhúm này:
group: Bắt buộc phải là “sms-service”
keyword: Là một từ. Từ này sẽ được dựng để phõn biệt giữa cỏc dịch vụ
với nhau. Một tin nhắn sẽ được phõn tỏch bởi nhiều từ. Từ đầu tiờn trong nội dung tin sẽ được coi là từ khoỏ. Tin nhắn nào cú từ đầu tiờn trựng với biến cấu hỡnh này sẽ được xử lý bởi dịch vụ này. Ngoài ra việc chỉ định số tham số để truyền cho module xử lý tin nhắn cũng ảnh hưởng đến việc chọn dịch vụ sẽ xử lý tin. Nếu cú nhiều nhúm sms-service cú cựng từ khoỏ thỡ Kannel sẽ chọn dịch vụ cú số tham số phự hợp đầu tiờn với số từ trong tin nhắn đến. Nếu như khụng tỡm thấy nú sẽ dựng dịch vụ cú từ khoỏ là default.
name: Tờn để phõn biệt dịch vụ trong tệp ghi nhật ký (log file).
get-url: URL sẽ được Kannel gọi để xử lý tin nhắn cho dịch vụ này. Nú
cú thể bao gồm một danh sỏch cỏc tham số (sẽ núi rừ về cỏc tham số này ở phần sau). Phương thức gọi yờu cầu HTTP ở đõy là phương thức GET. Nội dung trả về sẽ được coi là tin nhắn sẽ trả về cho người sử dụng.
post-url: Tương tự như biến get-url nhưng phương thức gọi yờu cầu
HTTP ở đõy là phương thức POST.
file: Đọc nội dung từ file này và coi đú là nội dung trả về. Tờn file cũng cú
bao hàm cỏc tham số giống như đối với get-url.
text: Nội dung trả về định sẵn. Cỏc tham số cũng cú thể được sử dụng.
exec: Gọi một lệnh shell để xử lý tin nhắn này và coi nội dung của stdout chớnh là nội dung trả về. Cỏc tham số cũng cú thể được dựng ở đõy. Cỏch này khụng
được khuyến cỏo dựng do vấn đề bảo mật.
accepted-smsc: Chỉ chấp nhận cỏc tin nhắn tới từ smsc cú số hiệu (smsc-id) nằm trong danh sỏch này. Cỏc số hiệu cỏch nhau bởi dấu ‘;’.
catch-all: Nếu được đặt bằng true thỡ sẽ xử lý tất cả cỏc tin nhắn mà khụng quan tõm đến nội dung của tin. Thường chỉ được đặt bằng true với dịch vụ cú từ khoỏ là default.
max-messages: Nếu như tin nhắn trả về cú nội dung vượt quỏ 160 ký tự thỡ tin nhắn đú sẽ phải được chia thành nhiều tin nhắn nhỏ. Tham số này sẽ quyết định số lượng tin nhắn tối đa cú thể gửi trả lại cho người dựng dịch vụ.
concatenation: Nếu được đặt bằng true thỡ khi gửi tin trả lại cú nội dung dài hơn 160 ký tự, tin trả lại sẽ được chia thành nhiều tin nhỏ và cỏc tin này sẽ được gửi đi như một tin nhắn dài. Với cỏc loại điện thoại cú hỗ trợ tin nhắn dài thỡ nú sẽ tự động ghộp cỏc tin nhắn ngắn lại và coi như là chỉ nhận được một tin nhắn. Hầu hết cỏc loại điện thoại ngày này đều hỗ trợ tớnh năng này.
accept-x-kannel-headers: Chấp nhận cỏc Kannel header (sẽ mụ tả chi tiết trong phần sau) trong nội dung trả về trong trường hợp dựng yờu cầu HTTP.
assume-plain-text: Trong trường hợp dựng yờu cầu HTTP, nếu như module xử lý tin khụng đặt Content-Type cho nội dung trả về thỡ nú sẽ được xử lý như là dữ liệu nhị phõn (kiểu application/octet-stream). Nếu đặt biến này bằng true thỡ trong trường hợp này dữ liệu trả về sẽ được coi là plain/text và được xử lý như là tin nhắn văn bản (text message).
omit-empty: Nếu biến này được đặt bằng true thỡ khi nội dung trả về là rỗng Kannel sẽ khụng gửi trả người dựng tin nhắn cú nội dung được đặt trong biến cấu hỡnh reply-emptymessage của nhúm smsbox. Người dựng sẽ khụng được gửi trả bất cứ tin nhắn nào. Thường được dựng nếu hệ thống muốn tự gửi tin nhắn (thụng qua giao diện gửi tin qua cỏc yờu cầu HTTP của Kannel) trả lại sau khi đó xử lý mà khụng trả lại ngay để cú thể đúng kết nối hiện tại.
Sau đõy là danh sỏch cỏc tham số cú thể truyền cho module xử lý tin nhắn: %k – Từ khoỏ trong tin nhắn SMS (là từ đầu tiờn trong tin nhắn)
%s – Từ tiếp theo trong tin nhắn SMS, bắt đầu từ từ thứ hai, mỗi lần dựng tham số này số thứ tự của từ trong tin sẽ được tăng thờm 1 (lần đầu tiờn dựng tham số này là từ thứ 2, lần thứ 2 dựng tham số này sẽ là từ thứ 3 …). Đó xử lý vấn đề cỏc ký tự khụng được cho phộp khi sử dụng URL (URL encoded, vớ dụ '+' trở thành '%2B').
%S – Giống như %s, nhưng '*' được chuyển thành '~' (cú ớch khi tự gừ URL). %r – Toàn bộ cỏc từ chưa được dựng bởi cỏc %s.
liờn tiếp sẽ được chuyển thành cũn 1 dấu trắng.