【发布时间】:2018-01-28 23:52:30
【问题描述】:
您好,我使用 C# 中的 Microsoft BotFramework 创建了我的第一个测试机器人。
在private async Task< Activity > HandleSystemMessage(Activity message) 在if (message.Type == ActivityTypes.ConversationUpdate) 通常它应该通知添加到组的新成员或有人在 Telegram Messenger 中点击机器人的开始按钮。当我使用 BotFramework 模拟器在调试模式下对其进行测试时,一切正常,但是在我发布它之后,我看到在 Telegram Messenger 中点击开始按钮后,我的代码没有运行。
我在 ActivationType.ConversationUpdate 中的代码
foreach (var item in message.MembersAdded)
{
try
{
using (var dbcontext = new WatermarkBotDBEntities())
{
dbcontext.BotUsers.Add(new BotUser()
{
AddedFriends = 0,
ConversationID = message.Conversation.Id,
ServiceUrl = message.ServiceUrl,
UserID = message.From.Id
});
dbcontext.SaveChanges();
if (Request.RequestUri.Query != "")
{
var u = dbcontext.BotUsers.Where(x => x.BotSalCode == Request.RequestUri.Query.Replace("?start=", string.Empty)).FirstOrDefault();
u.AddedFriends++;
dbcontext.Entry(u).State = System.Data.Entity.EntityState.Modified;
if (u != null)
{
var connector = new ConnectorClient(new Uri(u.ServiceUrl));
IMessageActivity newMessage = Activity.CreateMessageActivity();
newMessage.Type = ActivityTypes.Message;
//newMessage.From = new ChannelAccount("<BotId>", "<BotName>");
newMessage.From = new ChannelAccount("c3e7mhdafcecn7ng3", "Bot");
newMessage.Conversation = new ConversationAccount(false, u.ConversationID);
newMessage.Recipient = new ChannelAccount(u.UserID);
if (u.AddedFriends <= 2)
newMessage.Text = $"SomeText.";
else newMessage.Text = "SomeTex";
await connector.Conversations.SendToConversationAsync((Activity)newMessage);
dbcontext.SaveChanges();
}
}
}
}
catch (Exception ex)
{
}
那么如何检测电报中的点击开始? 问候
【问题讨论】:
-
能否将您的整个代码发布到
if (message.Type == ActivityTypes.ConversationUpdate) -
@JasonSowers 我在
if (message.Type == ActivityTypes.ConversationUpdate)中添加了代码 -
您是否尝试过此处描述的解决方法:github.com/Microsoft/BotBuilder/issues/1832?
-
我没有看到这个链接,但我自己解决了。
if (activity.Type == ActivityTypes.Message){if (activity.Text.StartsWith("/start")){...}}。如果您还在 /start 和空格之后使用深度链接,它将在 start= 之后返回您的参数,因此var actteaxt = activity.Text.Replace("/start ", "");将轻松获取 start 参数。
标签: c# botframework telegram telegram-bot