首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ConversationUpdate在发布后不触发

ConversationUpdate在发布后不触发
EN

Stack Overflow用户
提问于 2017-08-21 08:42:02
回答 2查看 225关注 0票数 0

嗨,我用C#中的微软BotFramework创建了我的第一个测试机器人。在if (message.Type == ActivityTypes.ConversationUpdate)private async Task< Activity > HandleSystemMessage(Activity message)中,通常应该通知新成员加入群或有人在Telegram Messenger中点击了机器人的start按钮。当我使用BotFramework模拟器在调试模式下测试它时,一切都运行得很好,但是在我发布它之后,我发现在Telegram messenger中点击start按钮后,我的代码不能运行。我在ActivationType.ConversationUpdate中的代码

代码语言:javascript
代码运行次数:0
运行
复制
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)
{
}

那么,如何检测电报中的点击开始呢?问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-25 05:50:17

这是我在经过大量测试后找到的问题的答案:在BotFramework应用程序中默认定义的public async Task<HttpResponseMessage> Post([FromBody]Activity activity)函数的MessagesController类中,您必须执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
if (activity.Type == ActivityTypes.Message)
{
    if (activity.Text.StartsWith("/start"))
    {
        //This will return you the start parameter of a link like : http://telegram.me/botname?start=Parameter
        var Parameter = activity.Text.Replace("/start ", "");
    }
}

如果你想发送欢迎信息,那么你可以使用@JasonSowers告诉你的方式,并使用他的代码来发送你的信息。诚挚的问候

票数 0
EN

Stack Overflow用户

发布于 2017-08-22 04:00:13

我知道这不是一个完整的答案,但我想与您分享这段代码,以防对您有所帮助。下面是发送欢迎消息的推荐方式,您可以重新调整代码的用途以供使用。

代码语言:javascript
代码运行次数:0
运行
复制
else if (message.Type == ActivityTypes.ConversationUpdate || message.Type == ActivityTypes.Message)
            {
                IConversationUpdateActivity iConversationUpdated = message as IConversationUpdateActivity;
                if (iConversationUpdated != null)
                {
                    ConnectorClient connector = new ConnectorClient(new System.Uri(message.ServiceUrl));

                    foreach (var member in iConversationUpdated.MembersAdded ?? System.Array.Empty<ChannelAccount>())
                    {
                        // if the bot is added, then
                        if (member.Id == iConversationUpdated.Recipient.Id)
                        {
                            var reply = ((Activity)iConversationUpdated).CreateReply(
                            $"Hi! I'm Botty McBot.");
                            await connector.Conversations.ReplyToActivityAsync(reply);
                        }
                    }
                }
            }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45788067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档