TLDR в конце
В настоящее время мне нужно отправить Activity
на DirectLine
, отправив сообщение со специальным символом, строка Menú principal
, обратите внимание на ú
. Все остальное работает нормально, но отправка специальных символов заставляет меня плакать.
Но когда я отправляю сериализованное действие, оно отображает ?
, так что вы можете видеть Menú principal != Men? principal
, который заставит бота отвечать по-другому.
Я пробовал несколько вещей, но, похоже, это не работает, это моя текущая функция для POST.
/// <summary>
/// Uploads to an URL and gets result
/// </summary>
/// <typeparam name="T">Type of object you are receiving</typeparam>
/// <param name="bearer">Token</param>
/// <param name="url">Url</param>
/// <param name="serializedJson">Serialized JSON to send</param>
/// <returns></returns>
public static T uploadString<T>(string bearer, string url, string serializedJson)
{
string serializedResult = "";
/// Webclient
using (var client = new WebClient())
{
/// Looks like it goes wrong when uplading UTF8 words
string ansistring = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(serializedJson));
try
{
/// Add headers
client.Headers.Add("Content-Type", "application/json");
client.Headers.Add("Authorization", $"Bearer {bearer}");
/// Upload string
serializedResult = client.UploadString(url, ansistring);
}
catch (Exception e)
{
string a = e.Message;
}
}
/// Get result and return it as an object
return JsonConvert.DeserializeObject<T>(serializedResult);
}
Параметр serializedJson
- это объект Activity
, сериализованный с использованием Json.NET, и он выглядит так, когда я пытаюсь отправить Menú principal
.
serializedJson = "{\"type\":\"message\",\"id\":\"c5908d50-5389-11e8-bd5c-45bb8f0ca339\",\"timestamp\":\"2018-05-09T13:06:22.49+00:00\",\"localTimestamp\":null,\"serviceUrl\":null,\"channelId\":null,\"from\":{\"id\":\"default-user\",\"name\":\"User\"},\"conversation\":null,\"recipient\":null,\"textFormat\":\"plain\",\"attachmentLayout\":null,\"membersAdded\":null,\"membersRemoved\":null,\"reactionsAdded\":null,\"reactionsRemoved\":null,\"topicName\":null,\"historyDisclosed\":null,\"locale\":\"es\",\"text\":\"Menú principal\",\"speak\":null,\"inputHint\":null,\"summary\":null,\"suggestedActions\":null,\"attachments\":[],\"entities\":[],\"channelData\":{\"clientActivityId\":\"1525870846394.1792692356311325.10\"},\"action\":null,\"replyToId\":null,\"value\":null,\"name\":null,\"relatesTo\":null,\"code\":null,\"expiration\":null,\"importance\":null,\"deliveryMode\":null,\"textHighlights\":null}"
Как видите, text
- это "text\":\"Menú principal\"
.
После просмотра журнала активности в диалоге он отображает ú
как ?
.
Вы можете найти весь код в этом репозитории, функция uploadString
- в этом классе, а тестовые примеры - в этом файле.
TLDR: мне нужно отправить Menú principal
на DirectLine, и когда он достигнет бота, он отобразится так: Men? principal