Неужели в образце Core Bot отсутствует токен-сервер?Образец называется CORE BOT, и я думаю, каждому боту нужен токен-сервер?!
Нет, не совсем.Если вы создаете свой собственный клиент веб-чата, как в примерах веб-чатов, вы можете иметь сервер токенов для обмена секретом на токен.Но если вы не создаете свой собственный веб-чат, или вам не нужно обменивать секрет токеном или вы хотите использовать буквально любой другой канал, он вам не нужен.
сказал, у меня есть рабочий секрет-> токен обмена в C # здесь .Как и в случае версий узлов в репозитории веб-чатов.Это изменения, которые я сделал, чтобы перевести этот пример из узла в C #:
в моем html-файле:
<body>
<h2>Index??</h2>
<div id="webchat" role="main" />
<script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
<script>
(async function () {
const res = await fetch('/directline/token', { method: 'POST' });
const { token } = await res.json();
window.WebChat.renderWebChat({
directLine: window.WebChat.createDirectLine({ token }),
}, document.getElementById('webchat'));
})();
</script>
</body>
Чтобы перехватить этот запрос POST, мне пришлось добавить пару вещей вбот.В классе запуска мне нужно было убедиться, что моя модель токена была видна:
services.Configure<DLSModel>(Configuration.GetSection("DirectLine"));
Затем я добавил DSLModel в мои модели
Сама модель довольно проста:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace JJDirectLineBot.Models
{
public class DLSModel
{
public string DirectLineSecret { get; set; }
}
}
По сути, все, что говорит "искать ее прямой секрет в настройках своего приложения".Я уверен, что есть более простой способ добраться туда, но это тот, который я сделал.
Затем вам нужен контроллер, чтобы фактически сделать запрос:
namespace JJDirectLineBot.Controllers
{
public class TokenController : ControllerBase
{
private readonly IOptions<DLSModel> dlSecret;
public TokenController(IOptions<DLSModel> dls)
{
dlSecret = dls;
}
[Route("/directline/token")]
[HttpPost]
public async Task<string> TokenRequest()
{
var secret = dlSecret.Value.DirectLineSecret;
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(
HttpMethod.Post,
$"https://directline.botframework.com/v3/directline/tokens/generate");
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", secret);
var userId = $"dl_{Guid.NewGuid()}";
request.Content = new StringContent(
JsonConvert.SerializeObject(
new { User = new { Id = userId } }),
Encoding.UTF8,
"application/json");
var response = await client.SendAsync(request);
string token = string.Empty;
if (response.IsSuccessStatusCode)
{
var body = await response.Content.ReadAsStringAsync();
return body;
}
else
{
//Error();
return token;
}
}
}
}