如果用户没有向我发送消息,如何向用户发送消息?例如,CNN机器人每天早上都会自己发送消息。我怎么能在机器人框架中做到这一点?
答案 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());
}
}
}
这是一个有效的代码。如果你遇到蚂蚁问题,请告诉我。 〜欢呼:)