用bot框架在facebook上赞助的消息

时间:2016-09-08 16:00:51

标签: botframework

如果用户没有向我发送消息,如何向用户发送消息?例如,CNN机器人每天早上都会自己发送消息。我怎么能在机器人框架中做到这一点?

3 个答案:

答案 0 :(得分:1)

请参阅this

事实上,您并不需要首先接收来自用户的消息,但手动寻址可能容易出错(您必须知道用户和机器人的频道帐户,该服务网址等。)

答案 1 :(得分:0)

反过来(根据@thegaram的消息),这仅适用于某些频道。例如,Skype要求用户在机器人向用户发送消息之前联系机器人。

联系后,您可以在用户联系您时存储用户的channelAccount数据,然后使用该数据向他们发送主动消息。例如,如果用户已经订阅了特定团队随时间的体育比分。

Bot Framework(以及大多数频道)的政策当然禁止任何类型的未经请求的垃圾邮件。

答案 2 :(得分:0)

是的,你可以这样做。我们称之为Bot的问候。我已经完成了并与您共享示例代码。

将此代码写入messageController或bot中使用的第一个对话框。

if (activity.Text == null)
            {
                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
                Activity isActivityTyping = activity.CreateReply();
                isActivityTyping.Type = ActivityTypes.Typing;
                await connector.Conversations.ReplyToActivityAsync(isActivityTyping);
                await Conversation.SendAsync(activity, () => new Dialogs.GreetDialog());

            }

在此代码之后,您需要创建一个对话框 GreetDialog 。以下是cs文件代码供您参考。

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Connector;

namespace GPP.Bot.Dialogs
{
    [Serializable]
    internal class GreetDialog : IDialog<object>
    {
        public async Task StartAsync(IDialogContext context)
        {
           context.Wait(Greeting);
        }
        private async Task Greeting(IDialogContext context, IAwaitable<IMessageActivity> argument)
        {
            var message = await argument;
            if (string.IsNullOrEmpty(message.Text))
            {

                // Hero Card
                var cardMsg = context.MakeMessage();
                var attachment = BotWelcomeCard("Hello, I am a bot. Right now I am on training and in a prototype state", "");
                cardMsg.Attachments.Add(attachment);
                await context.PostAsync(cardMsg);
                context.Call<object>(new ActionDialog(), AfterGreetingDialogCompleted);
            }
            else
            {             
               context.Call<object>(new ActionDialog(), AfterGreetingDialogCompleted);
            }
        }
        private static Attachment BotWelcomeCard(string responseFromQNAMaker, string userQuery)
        {
            var heroCard = new HeroCard
            {
                Title = userQuery,
                Subtitle = "",
                Text = responseFromQNAMaker,
                Images = new List<CardImage> { new CardImage("https://i2.wp.com/lawyerist.com/lawyerist/wp-content/uploads/2016/08/docubot.gif?fit=322%2C294&ssl=1") },
                Buttons = new List<CardAction> { new CardAction(ActionTypes.ImBack, "Show Menu", value: "Show Bot Menu") }
            };

            return heroCard.ToAttachment();
        }
        private async Task AfterGreetingDialogCompleted(IDialogContext context, IAwaitable<object> result)
        {
            context.Done<object>(new object());
        }
    }
} 

这是一个有效的代码。如果你遇到蚂蚁问题,请告诉我。 〜欢呼:)