Хранение UUID как base64 Строка

Вы можете начать новый разговор, используя соединитель Client в Botframework V4 и Teams Extensions V4. В nodejs вы найдете решение в одном из комментариев для этого выпуска Github . Для тех, кто ищет решение в C # , , есть подробное сообщение в блоге о том, как выполнить это в C # версии бот-фреймворка.

в nodejs:

var conversationReference = TurnContext.getConversationReference(context.activity)
connectorClient = await createConnectorClient(context)

var conversationParameters = {
isGroup: true,
bot: conversationReference.bot,
channelData: (await teamsCtx.getTeamsChannelData()),
tenantId: teamsCtx.tenant.id,
activity: MessageFactory.text("Queue Summary Placeholder") as Activity
} as ConversationParameters

await connectorClient.conversations.createConversation(conversationParameters)

В C #

ConnectorClient _client = new ConnectorClient(new Uri(turnContext.Activity.ServiceUrl), await GetMicrosoftAppCredentialsAsync(turnContext), new HttpClient());
            var channelData = turnContext.Activity.GetChannelData();

            var conversationParameter = new ConversationParameters
            {
                Bot = turnContext.Activity.Recipient,
                IsGroup = true,
                ChannelData = channelData,
                TenantId = channelData.Tenant.Id,
                Activity = MessageFactory.Text(message)
            };
            var response = await _client.Conversations.CreateConversationAsync(conversationParameter);

69
задан mainstringargs 21 April 2009 в 14:18
поделиться

3 ответа

Вы можете безопасно отбрасывать отступ "==" в этом приложении. Если бы вам нужно было декодировать текст base-64 обратно в байты, большинство библиотек ожидали бы его, но поскольку вы просто используете результирующую строку в качестве ключа, это не проблема.

Мне нравится Base-64, потому что его ограниченный набор символов менее похож на тарабарщину, но есть также Base-85 . Он использует больше символов и кодирует 4 байта как 5 символов, поэтому вы можете сократить текст до 20 символов.

29
ответ дан 24 November 2019 в 13:52
поделиться

У меня есть приложение, где я делаю почти именно это. UUID, закодированный в 22 символа Работает нормально. Тем не менее, основная причина, по которой я делаю это таким образом, заключается в том, что идентификаторы отображаются в URI веб-приложения, и 36 символов действительно достаточно велики для того, что появляется в URI. 22 символа по-прежнему довольно длинные, но мы справимся.

Вот код Ruby для этого:

  # Make an array of 64 URL-safe characters
  CHARS64 = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a + ["-", "_"]
  # Return a 22 byte URL-safe string, encoded six bits at a time using 64 characters
  def to_s22
    integer = self.to_i # UUID as a raw integer
    rval = ""
    22.times do
      c = (integer & 0x3F)
      rval += CHARS64[c]
      integer = integer >> 6
    end
    return rval.reverse
  end

Это не совсем то же самое, что и кодировка base64, потому что base64 использует символы, которые должны быть экранированы, если бы они появились в пути URI составная часть. Реализация Java, вероятно, будет совсем другой, так как вы

8
ответ дан 24 November 2019 в 13:52
поделиться

Вы не говорите, какую СУБД вы используете, но кажется, что RAW будет лучшим подходом, если вы заинтересованы в экономии места. Вам просто нужно помнить, что нужно конвертировать для всех запросов, иначе вы рискуете сильно снизить производительность.

Но я должен спросить: действительно ли байты так дороги в вашем регионе?

3
ответ дан 24 November 2019 в 13:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: