问题是当在电报中按下按钮时,机器人控制器没有任何活动。或者我没有抓住它们。 +点击机器人后显示消息"抱歉,我的机器人代码出现问题"。
用于在Microsoft Bot Framework上获取活动的标准类控制器。
[BotAuthentication]
public class MessagesController : ApiController
{
[ResponseType(typeof(void))]
public virtual async Task<HttpResponseMessage> Post([FromBody] Activity activity)
{
if (activity != null && activity.GetActivityType() == ActivityTypes.Message)
{
await Conversation.SendAsync(activity, () => new finder_worker());
}
else
{
HandleSystemMessage(activity);
}
return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
}
private Activity HandleSystemMessage(Activity message)
{
if (message.Type == ActivityTypes.DeleteUserData)
{
// Implement user deletion here
// If we handle user deletion, return a real message
}
else if (message.Type == ActivityTypes.ConversationUpdate)
{
// Handle conversation state changes, like members being added and removed
// Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
// Not available in all channels
}
else if (message.Type == ActivityTypes.ContactRelationUpdate)
{
// Handle add/remove from contact lists
// Activity.From + Activity.Action represent what happened
}
else if (message.Type == ActivityTypes.Typing)
{
// Handle knowing tha the user is typing
}
else if (message.Type == ActivityTypes.Ping)
{
//message.p
}
return null;
}
}
这是我作为活动处理程序编写的类。它使用HeroCard创建按钮。
[Serializable]
public class finder_worker : IDialog<object>
{
private const string mark = "sad";
private const string st_message = "start";
private const string empty_message = "";
public async Task StartAsync(IDialogContext context)
{
//тут их отлавливает
context.Wait(MessageReceivedAsync);
}
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
try
{
var message = await argument;
var message_to_send = context.MakeMessage();
workers.json_worker m = new workers.json_worker(message.ChannelData.ToString());
await context.PostAsync($"сообщение: {m.message_text}");
switch (m.message_text)
{
case st_message:
await context.PostAsync($"инициация знакомства");
break;
case empty_message:
await context.PostAsync($"пустое сообщение");
break;
case mark:
message_to_send.Attachments.Add(create_button());
await context.PostAsync(message_to_send);
await context.PostAsync($"тестовое сообщение");
//create_button();
break;
default:
await context.PostAsync($"прочее сообщение");
break;
}
context.Wait(MessageReceivedAsync);
}
catch(SqlException e)
{
await context.PostAsync($"упс... что то не получилось записать на сервер{e.ToString()}");
}
}
public Attachment create_button()
{
var card = new HeroCard("Some Text");
card.Buttons = new List<CardAction>()
{
new CardAction()
{
Title = "button1",
Type=ActionTypes.MessageBack,
Value="button1"
},
new CardAction()
{
Title = "button2",
Type=ActionTypes.MessageBack,
Value="button2"
}
};
Attachment cardAttachment = card.ToAttachment();
return cardAttachment;
}
}
作为测试,我发送机器人sad
并等待启动按钮。这部分进展顺利。但点击机器人后没有收到任何消息或其他活动。我希望收到可以使用Microsoft Bot Framework工具处理的消息或其他活动。
尝试:
MessageBack
,PostBack
,ImBack
activity.CreateReply
谢谢!
答案 0 :(得分:0)
ActionTypes.MessageBack 不是电报的有效卡片操作类型(适用于MS团队)。请尝试 PostBack 或 ImBack
public Attachment create_button()
{
var card = new HeroCard("Some Text");
card.Buttons = new List<CardAction>()
{
new CardAction()
{
Title = "button1",
Type=ActionTypes.ImBack,
Value="button1"
},
new CardAction()
{
Title = "button2",
Type=ActionTypes.PostBack,
Value="button2"
}
};
Attachment cardAttachment = card.ToAttachment();
return cardAttachment;
}