亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

作為對話框提示選擇的結果發送主動消息

作為對話框提示選擇的結果發送主動消息

C#
慕容森 2023-07-09 15:05:59
我對 Microsoft Bot Framework 還很陌生。我有一個機器人,它接收來自一個用戶的消息,并且可以被另一個用戶查看。我想添加一項功能,讓查看者可以回復發件人。我認為最好的方法是向原始發件人發送主動消息。但是,我無法理解 Microsoft 提供的文檔,而且其他來源也相當過時。現在這就是我所擁有的。MessageDetails.RelatesTo 包含 ConversationReference:private async Task<DialogTurnResult> FinalStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken){    var messageDetails = (MessageDetails)stepContext.Options;    var replyText = (string)stepContext.Result;    var messageactivity = messageDetails.RelatesTo.GetContinuationActivity();    await stepContext.Context.SendActivityAsync($"{messageDetails.RelatesTo}");    var client = new ConnectorClient(new Uri(messageactivity.ServiceUrl));    if (messageDetails.IsTrustedServiceUrl)    {        MicrosoftAppCredentials.TrustServiceUrl(messageactivity.ServiceUrl);    }    var triggerReply = messageactivity.CreateReply();    triggerReply.Text = $"NoReply from {stepContext.Context.Activity.Name}: {replyText}";    await client.Conversations.ReplyToActivityAsync(triggerReply);    await stepContext.Context.SendActivityAsync($"Your reply has been sent to {messageDetails.RelatesTo.User.Name}.");    return await stepContext.EndDialogAsync(messageDetails, cancellationToken);}這段代碼不起作用,我不完全確定為什么。(我也很感激任何有關如何解決問題的建議)。我意識到這并沒有利用微軟提供的示例代碼中顯示的控制器。老實說,我不明白通知控制器是如何工作的。因此,如果解決方案涉及到這一點,最好能得到一些細節的解釋。
查看完整描述

1 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

解決你的問題

我的猜測是您收到此錯誤:


System.ArgumentNullException: '值不能為空。參數名稱:clientId'


這是因為您沒有指定appIdin new ConnectorClient。您可以忽略這一點,因為您最好做一些類似的事情:


await stepContext.Context.Adapter.ContinueConversationAsync("<yourAppId>", messageDetails.RelatesTo, async (ITurnContext turnContext, CancellationToken cancel) =>

{

? ? await turnContext.SendActivityAsync(triggerReply);

}, cancellationToken);

關鍵是確保您擁有ConversationReference需要向其發送主動消息的用戶。如果您沒有,您應該能夠CreateConversation建立一個

請注意,您還擁有:

if?(messageDetails.IsTrustedServiceUrl)
{
????MicrosoftAppCredentials.TrustServiceUrl(messageactivity.ServiceUrl);
}

這基本上是說,“如果我們已經信任 serviceUrl,請再次信任它”。相反,您需要:if (!messageDetails.IsTrustedServiceUrl)


主動機器人如何工作

以下是主動示例如何工作的簡要說明。我建議下載并使用它以更好地理解。

  1. 機器人在api/messages(所有機器人都執行此操作)和api/notify(只有此機器人執行此操作)上建立偵聽器。

  2. 當用戶向機器人發送消息時,它會api/messages通過.ActivityHandler

  3. 對于任何消息,機器人都會保存對話參考

  4. 當有人訪問時<theBotUrl>/api/notify,它會循環訪問每個保存的對話引用,調用ContinueConversation,并將消息發送給保存的對話引用中的所有用戶。


查看完整回答
反對 回復 2023-07-09
  • 1 回答
  • 0 關注
  • 153 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號