我使用 Bot Framework SDK(C#、.Net)創建了一個機器人。我已經在 Azure 中發布了它。它在 WebChat 和 Teams 頻道中運行良好。現在我想創建一個 Winform 并嘗試使用 Directline Api 將 Winform UI 連接到我的機器人。
這是我的代碼:
公共部分類Form1:Form {
private static string directLineSecret = ConfigurationSettings.AppSettings["DirectLineSecret"];
private static string botId = ConfigurationSettings.AppSettings["BotId"];
private static string fromUser = "User";
private static string id = "default-user";
private Conversation conversation;
DirectLineClient directLineClient = null;
public Form1()
{
InitializeComponent();
InitClientAsync();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private async Task InitClientAsync()
{
directLineClient = new DirectLineClient($"{directLineSecret}");
directLineClient.BaseUri = new Uri($"https://directline.botframework.com/");
//directLineClient = new DirectLineClient(directLineSecret);
conversation = await directLineClient.Conversations.StartConversationAsync().ConfigureAwait(false);
new System.Threading.Thread(async () => await ReadBotMessageAsync(directLineClient, conversation.ConversationId)).Start();
}
private async Task ReadBotMessageAsync(DirectLineClient client, string conversationId)
{
string watermark = null;
while(true)
{
var activitySet = await client.Conversations.GetActivitiesAsync(conversationId, watermark);
watermark = activitySet?.Watermark;
var activities = from x in activitySet.Activities where x.From.Id == botId select x;
foreach(Activity activity in activities)
{
if(activity.Text != null)
{
string message = activity.Text;
if(InvokeRequired)
{
BeginInvoke(new MethodInvoker(delegate
{
textBox.AppendText("Bot : " message "\r\n");
}));
}
}
}
}
}
private async void btn_Send_Click(object sender, EventArgs e)
{
string input = txt_Send.Text;
txt_Send.Clear();
if(input.Length>0)
{
Activity userMessage = new Activity
{
From = new ChannelAccount(id, fromUser),
Text = input,
Type = ActivityTypes.Message,
TextFormat = "plain"
};
textBox.AppendText("You : " input "\r\n");
await directLineClient.Conversations.PostActivityAsync(this.conversation.ConversationId, userMessage);
}
}
}
但是,當我執行程式時,它在嘗試獲取對話以及對話 ID 時由于 Null 參考例外而停止。
您可以在此處檢查錯誤影像。
誰能告訴我我在這里缺少什么?任何幫助將不勝感激.....
uj5u.com熱心網友回復:
問題出在直線密鑰上。我重新生成了一個新密鑰并使用了它。現在開始對話,我可以看到對話 ID。
但在那之后我收到了狀態碼 429 錯誤。這基本上是多執行緒問題。它試圖同時創建多個執行緒。然后我使用 .Net Framework 4.6.2 版(以前使用 4.7)重新創建整個專案。現在這個問題也得到了解決。專案運行良好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/483104.html
標籤:C# 表格 机器人框架 天蓝色机器人服务 直线机器人框架
