Как заставить KANNEL работать с кириллицей при передаче сообщения в message_payload?
Доброго времени суток. При имплементации SMSC на KANNEL столкнулся со следующей проблемой.
Все SMS с использованием киррилицы в теле сообщения ходят нормально - т.е. кириллица доходит до абонента при использовании charset=utf8 и coding=2.
Так как длина SMS увеличилась и SMSC Опсоса поддерживает message_payload - было принято решение использовать его.
Когда отправляется сообщение с использованием латиницы &meta-data=?smpp?message_payload=test1234 testtestetstrtst - оно доходит нормально. Все символы латинского алфавита отображаются нормально.
В том случае, когда происходит отправка текста с использованием кириллицы - прилетает примерно такое "залупа", coding и charset не используются.
При использовании параметров coding и charset результат - квадраты на экране телефона.
В конфиге на тему TLV:
group = smpp-tlv
name = message_payload
tag = 0x0424
type = octetstring
length = 200
В БД ( SQLBOX ) в поле meta-data при отправке SMS с кириллицей:
?smpp?message_payload=залупа
Версия KANNEL 1.5.0
Пример запроса:
/cgi-bin/sendsms?smsc=SMSC&username=test&password=test&from=666&to=123456789&meta-data=%3Fsmpp%3Fmessage_payload=%22%D1%82%D0%B5%D1%81%D1%82%D1%82%D1%82%D1%82%D1%82%D1%82%D1%82%22
Каким образом заставить KANNEL корректно передавать кириллицу через message_payload?
Вайладион Гогназдиак,
1. Можно чуть подробнее?
2. Нет ли проблемы, что при coding=2, utf-8 некоторые провайдеры будут тарифицировать сообщение, состоящее только из латинских символов (которое может содержать 160 символов) - по цене расширенного алфавита (80 символов)? Мы решили определением 0/1 или 2 на своей стороне, в зависимости от алфавита сообщения.
2naive,
1. Один раз сталкивался с тем, что из-за этого параметра ( который по идее ни на что не вилияет ) не устанавливалось соединение - пролечилось выставлением значения "system 34". Было это с казахским Билайном, со всякими Теле2/МТС/Мегафонами всё всегда было ок.
2. Подобной проблемы не было ( хотя теоретически она возможна ) так как сервисы были операторские. Но вообще в 90% случаев тарифицируется sms целиком, а не каждая его часть.
С тарификацией SMS по частям сталкивался ( очень давно ) на Теле2 до внедрения space.
Можно поподробней, когда начало работать и как.
Для меня не работает т.к. Kannel не понимает как правильно "encode" message payload.
Объясню на примере:
1) Отправляю сообщение "Проверка как работает coding 2 и charset utf8" обычным способом.
Прошу обратить внимание что например %D0 (буква П) должна передоваться как 04 1f
А message-payload попадает d0
Т.е. Kannel для message-payload игнорирует data_coding: 8 = 0x00000008 и использует почему-то data_coding: 0 = 0x00000000
Kannel bearerbox version `svn-r5303M'. Build `Nov 2 2020 03:03:24', compiler `8.3.0'.
System Linux, release 4.19.0-12-amd64, version #1 SMP Debian 4.19.152-1 (2020-10-18), machine x86_64. Libxml version 2.9.4. Using OpenSSL 1.1.1d 10 Sep 2019.
Compiled with MySQL 10.3.25-MariaDB, using MySQL 10.3.25.
Compiled with PostgreSQL 11.9 (Debian 11.9-0+deb10u1).
Using hiredis API 0.14.0
Using native malloc.