Отправка СМС из "1С:Предприятие 8"
Вторая "несколько странная" статья для этого сайта родилась после просмотра материалов системы GSM охраны. Подумалось: формат команды, отправляемой в телефон известен, надо только код АТ команды "сляпать" и заслать его в СОМ порт. Вроде ничего сложного, но трудности были - о них в конце статьи.
Итак - берем ноутбук, платформу "1С:Предприятие 8.2", дата-кабель для телефона Siemens (USB-to-UART) и сам телефон (пробовал C60, CF62, AX75 - у всех один тип разъема и валяются они в "мусоре" уже больше пяти лет...)
Итак - берем ноутбук, платформу "1С:Предприятие 8.2", дата-кабель для телефона Siemens (USB-to-UART) и сам телефон (пробовал C60, CF62, AX75 - у всех один тип разъема и валяются они в "мусоре" уже больше пяти лет...)
Как выше отмечено, рассылка сообщений производится через телефон, подключенный к нашему компьютеру, а не через многочисленные web-сервисы, предоставляющие такие услуги.
Конфигурация для отправки коротких сообщений разработана на релизе платформы 8.2.18.102 в режиме управляемого приложения.
В представленной выгрузке есть несколько примеров отправляемых СМС, которые позволяют легко разобраться в программе.
Описание конфигурации
Справочник "Абоненты" - предназначен... понятно для чего - храним названия абонентов и их телефонный номер (без кода страны, предполагаем, что все происходит в одной стране), в дальнейшем, в АТ+С команду префиксом программа подставляет цифру "8". (Телефоны в примере вымышленные, извините, если на кого попал...)
Справочник "Настройки СОМ порта" - предназначен для хранения настроек используемого для связи с телефоном СОМ порта компьютера. Из всего набора параметров важен сам номер порта (если десятка Вам не хватит - придется в конфигураторе добавить значения в перечисление...) Остальные параметры не столь важны - телефон сам подстраивается... Но, учитывая нижеперечисленные проблемы, не стоит ставить высокую скорость.
Выбрав нужные параметры, не забудьте их "применить" на компьютере - по кнопке "Применить на компьютере". (Используется команда операционной системы: mode COMx)
Выбрав нужные параметры, не забудьте их "применить" на компьютере - по кнопке "Применить на компьютере". (Используется команда операционной системы: mode COMx)
Форма констант "Настройка параметров программы" - предназначена для хранения общих настроек программы. Их всего две:
"Параметры СОМ порта" - выбираем из вышеописанного справочника и
"Сообщение отправить..." - тут выбираем: то ли нам сразу отправлять сообщение абонентам, то ли записать его в "Черновики" телефона без отправки (это может понадобиться на этапе отладки/проверки, т.к. не влияет на баланс!!!)
После выбора настроек не забудьте сохранить значения констант!
"Параметры СОМ порта" - выбираем из вышеописанного справочника и
"Сообщение отправить..." - тут выбираем: то ли нам сразу отправлять сообщение абонентам, то ли записать его в "Черновики" телефона без отправки (это может понадобиться на этапе отладки/проверки, т.к. не влияет на баланс!!!)
После выбора настроек не забудьте сохранить значения констант!
Документ "Сообщение" - собственно, главный объект конфигурации, который и занимается отправкой сообщения в телефон с последующей его отсылкой абонентам.
В "шапке" документа пишем само сообщение в текстовом поле "Текст сообщения". Сразу отмечу, что с целью упрощения представления сообщения в АТ+С команде в режиме PDU (см туже статью) для набора текста надо использовать только латинские буквы и цифры (с кодами из диапазона 0х20 ... 0х7F). Транслитерацией было просто неинтересно заниматься, более того - никакой проверки на корректность текста в программе нет. Нет и подсчета количества введенных символов - лишь поле ввода ограничено 255-ю символами. В табличной части документа перечисляются абоненты, которым набранное сообщение нужно отправить. Абонентов выбираем/добавляем из вышеописанного справочника "Абоненты". Ниже, в поле "Комментарий" можно ввести любой текст - он ни на что не влияет. После заполнения документа его следует сохранить и по кнопке "Отправить" разослать сообщение выбранным абонентам. В процессе "отправки" сообщения в всплывающем окне "Состояние" индицируется номер отправляемой в телефон строки АТ команды (по две на каждый указанный в табличной части документа номер). В зависимости от выбранной настройки, сообщение "уйдет" абонентам или сохранится в памяти телефона. |
Как это работает
Подключаем телефон через кабель к компьютеру, смотрим в диспетчере номер появившегося СОМ порта.
Сначала настраиваем параметры программы: выбираем нужный СОМ порт и режим отправки сообщения.
Затем вносим нужных абонентов в соответствующий справочник.
Создаем новый (или открываем существующий) документ Сообщение. Заполняем список абонентов и вводим отправляемый текст. Сохраняем документ и, затем, отправляем сообщение по кнопке "Отправить".
Используемый Алгоритм
При отправке сообщения используются АТ команда: AT+CMGS= <length> <CR> ввод PDU <ctrl-Z / ESC >. Подробно команда и ее параметры рассмотрены в вышеупомянутой статье. Особенность использования команды в конфигурации заключается в применении однонаправленного потока данных в телефон (ответ не анализируется). В режиме сохранения СМС в памяти телефона используется сходная по синтаксису команда записи СМС в память телефона (AT+CMGW). В данных командах <length> - это длина сообщения PDU, десятичное число. После завершения ввода длины сообщения символом <CR>, телефон выдает символ приглашения к вводу: "> " (вот его-то мы и не проверяем). Далее необходимо передать в телефон сообщение PDU и завершить его символом <ctrl-Z> (1Ah) - сообщение будет отослано (либо записано в память, если используется команда AT+CMGW). Таким образом команда подается в телефон двумя посылками, между ними выдерживается двухсекундная пауза.
Проблемы...
Сразу скажу - программка получилась крайне непредсказуемой. Связано это с тем, что отправка данных через СОМ порт осуществляется с использованием объекта "ЗаписьТекста" - таким образом поток выстреливается сплошным пакетом и, видимо, телефон не всегда успевает с ним справиться... При сохранении в памяти телефона - "еще куда не шло", а вот при отправке - сообщение уходит, как правило, только последнему абоненту. Вылечить это, наверно, можно только используя "драйверную прослойку".
Но, тем не менее, эти наработки могут кому-либо пригодиться...
При отправке сообщения используются АТ команда: AT+CMGS= <length> <CR> ввод PDU <ctrl-Z / ESC >. Подробно команда и ее параметры рассмотрены в вышеупомянутой статье. Особенность использования команды в конфигурации заключается в применении однонаправленного потока данных в телефон (ответ не анализируется). В режиме сохранения СМС в памяти телефона используется сходная по синтаксису команда записи СМС в память телефона (AT+CMGW). В данных командах <length> - это длина сообщения PDU, десятичное число. После завершения ввода длины сообщения символом <CR>, телефон выдает символ приглашения к вводу: "> " (вот его-то мы и не проверяем). Далее необходимо передать в телефон сообщение PDU и завершить его символом <ctrl-Z> (1Ah) - сообщение будет отослано (либо записано в память, если используется команда AT+CMGW). Таким образом команда подается в телефон двумя посылками, между ними выдерживается двухсекундная пауза.
Проблемы...
Сразу скажу - программка получилась крайне непредсказуемой. Связано это с тем, что отправка данных через СОМ порт осуществляется с использованием объекта "ЗаписьТекста" - таким образом поток выстреливается сплошным пакетом и, видимо, телефон не всегда успевает с ним справиться... При сохранении в памяти телефона - "еще куда не шло", а вот при отправке - сообщение уходит, как правило, только последнему абоненту. Вылечить это, наверно, можно только используя "драйверную прослойку".
Но, тем не менее, эти наработки могут кому-либо пригодиться...