1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Vcard + Sms + Lotusscript

Тема в разделе "Lotus - Программирование", создана пользователем NickProstoNick, 24 июл 2012.

  1. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Всем привет!
    Вопрос наверное не совсем по теме.... но все же..
    Кто-то пробовал формировать vCard для отправки на мобильник через СМС.
    СМС - посылка письма почтой на определенный адрес средствами Lotus.
    СМС в принципе доставляются... интересует доставка vCard.
    Есть какой-нибудь универсальный формат vCard, понятный для большинства телефонов?
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    чтож тут сложного то?
    обычный текст
    Код (Text):
    BEGIN:VCARD
    VERSION:3.0
    FN:к.м.н., пр. Василий Иванович Пупкин
    N:Пупкин;Василий;Иванович;пр.,к.м.н.
    ORG:Рога и Копыта
    URL:http://ru.wikipedia.org/
    EMAIL;TYPE=INTERNET:vasya.pupkin@example.com
    END:VCARD
     
  3. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Да в том-то и дело что не совсем обычный.
    Пробовал я это... приходит обычное текстовое СМС.
    А хочется полноценное сообщение, с возможностью сохранения карточки.
    Думаю кроме тела СМС надо еще что-то указывать... возможно в теме письма
     
  4. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    скинь со своего телефона контакт на емейл и глянь что пришло
    может это файл .vcf а может это сообщенение в MIME
     
  5. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    ну скорее всего придет вложение. Но не уверен что в СМС это сработает :(

    Добавлено: проверил... Да.... с мобильного отсылается файл.
     
  6. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Всем спасибо. Вопрос решен
     
  7. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    как решили то? :(
     
  8. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Не уверен что решено правильно, но у меня работает :)
    Формируется vCard как указывали выше.
    Затем сообщение кодируется в HEX и отправляется. HEX длинной 4 символа. В начало дописывается недостающее кол-во "0"
    Ну и собственно отправляется.
    Протестировал на HTC - карточка принимается нормально.
    Думаю на всех смартах будет работать.
    На обычных телефонах - не получается :(
     
  9. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Пример можете привести - если не секрет
     
  10. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    "причесанного" кода нет.. так.. наброски

    Код (Text):
        txt = _
    {BEGIN:VCARD} + Chr(13) + Chr(10) +_
    {VERSION:2.1} + Chr(13) + Chr(10) +_
    {FN:J. Doe} + Chr(13) + Chr(10) +_
    {N:Doe; J;;;} + Chr(13) + Chr(10) +_
    {TEL;CELL;WORK:+440444555666} + Chr(13) + Chr(10) +_
    {ORG:Рога и копыта} + Chr(13) + Chr(10) +_
    {END:VCARD}


    '   дополняем пробелами до кратности 60.
    '   чтоб получить максимальное количество пачек
    While (Len(txt) Mod 60 ) <> 0
    txt = txt & " "
    Wend

    ' подготавливаем пачки
    ReDim rez( ( Len(txt) / 60 ) - 1 ) 

    '   заполняем пачки
    For i = 0 To UBound(rez)

    s = ""
    tmp = FullTrim( Mid( txt, (60*i + 1), 60 ) )

    ' Конвертируем текст посылки в HEX
    For j =1 To Len( tmp )

    h = Mid$(tmp, j, 1)
    h = Hex$( Uni( h ) )
    h = Right$("0000" & h , 4)
    s = s & h

    Next

    s = <идентификатор пачки> & <количество сообщений в пачке> & <номер сообщения в пачке> & s

    rez( i ) = s

    Next
    <идентификатор пачки>, <количество сообщений в пачке> , <номер сообщения в пачке> - формат этих параметров нужно узнавать у мобильного оператора
    Длинна 60 символов - вычислял опытным путем
    Если в карточке не планируется русских символов - думаю переводить в HEX не обязательно

    Теперь собственно отсылка.
    Все пачки сообщений отсылаются как обычные письма.
    Код (Text):
        Set docSMS = db.Createdocument()

    Call docSMS.Replaceitemvalue("Form", "Memo" )
    Call docSMS.ReplaceItemValue( "From", Principal )
    Call docSMS.ReplaceItemValue( "Principal", Principal ) 
    Call docSMS.ReplaceItemValue( "InetFrom", Principal )
    Call docSMS.ReplaceItemValue( "SMTPOriginator", Principal )

    docSMS.SendTo = ArrayAppend(docSMS.SendTo, <адресаты> )

    Call docSMS.ReplaceItemValue( "Subject", "SMS:VCARD" )

    ' ТУТ код формирования посылок. Результат в tmp
    Set rt = docSMS.Createrichtextitem("body")

    For i = 0 To UBound(tmp)

    rt.Values =     tmp(i)

    Call docSMS.Send(False)

    Next
    Principal - это псевдоним либо номер, короткий номер который увидит адресат.
    <адресат> - <полный номер телефона>@<шлюз мобильного оператора>

    Ну вот как-то так
     
  11. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    While (Len(txt) Mod 60 ) <> 0

    улыбнуло
     
  12. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    И что веселого?
     
  13. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    возможно, в связи с наличием function Space проще подсчитать кол-во необходимых пробелов, а не вычислять в цикле остаток от деления на 60.
     
  14. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Это конечно хорошая функция, но не известно сколько надо добавить пробелов.
    Длинна сообщения может быть 30 символов, 10, 50, 110 и т.д.
    Конечно можно заложиться на символов 500, но зачем?
    А так я точно знаю сколько пачек получу и не важно сколько символов на входе. Лишнего не будет точно.
     
  15. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Имеется ввиду, что проще
    Код (LotusScript):
    txt = txt & Space(Len(txt) Mod 60)
     
  16. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    :) я тоже так думал, но это не правильно

    Потому как при 50 символах получается клеить будем 84, а надо 10

    Правильно так:
    Код (LotusScript):
    txt = txt & Space( Fix( (100 - (Len(txt) Mod 60) ) * (60/100) ) )
    Ну это так.. на вскидку... и как по мне - не очень читабельно
     
  17. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    А если так?
    Код (LotusScript):
    txt = txt & Space(60 - Len(txt) Mod 60)
     
  18. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Пример:
    Код (Text):
    60-(50 mod 60) = -23
    круто
     
  19. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Ну, не знаю. У меня такой агент выводит 10
    Код (LotusScript):
    Sub Initialize
    MsgBox CStr(60 - 50 Mod 60)
    End Sub
    Добавлено
    Результат операции A Mod B по определению не должен превышать B.
    Чтобы не добавлять 60 пробелов можно так:
    Код (LotusScript):
    rest = Len(txt) Mod 60
    If rest > 0 Then txt = txt & Space(60 - rest)
     
  20. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Да... что-то я тупонул.
    Ну в общем если уж на то пошло - то можно написать так... чтоб всем нравилось
    Это
    Код (LotusScript):
        While (Len(txt) Mod 60 ) <> 0
    txt = txt & " "
    Wend

    ' подготавливаем пачки
    ReDim rez( ( Len(txt) / 60 ) - 1 )
    заменить на это
    Код (LotusScript):
    txt = txt & Space(60)
    ReDim rez( ( Len(txt) \ 60 ) + 1 )
    А вообще - я сразу написал, что "причесанного" кода нет.. так.. наброски
    Не нравится - не пользуйтесь
     
Загрузка...

Поделиться этой страницей