殭屍程序框架入門,並試圖「推」一條消息給用戶。我在這裏使用SendToConversationAsync從模擬器複製了一些代碼,然後粘貼到模擬器中,但是它沒有發送。我粘貼了下面的代碼。任何幫助讚賞。試圖推動使用殭屍程序框架
namespace Bot
{
[BotAuthentication]
public class MessagesController : ApiController
{
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
// calculate something for us to return
int length = (activity.Text ?? string.Empty).Length;
//create reply here
// return our reply to the user
Activity reply = activity.CreateReply($"You sent **{activity.Text}** which was {length} characters");
await connector.Conversations.ReplyToActivityAsync(reply);
SendMessage("Blah!");
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
private void SendMessage(string msg)
{
var userAccount = new ChannelAccount(name: "", id: "default-user");
var botAccount = new ChannelAccount(name: "Bot", id: "m374hm6j2b474lei9");
var connector = new ConnectorClient(new Uri("http://localhost:3979/"));
// conversationId for Real Bot
//var conversationId = connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount).Result;
// conversationId for Bot Emulator
//var conversationId = _activityHistory.Conversation;
IMessageActivity message = Activity.CreateMessageActivity();
message.From = botAccount;
message.Recipient = userAccount;
message.Conversation = new ConversationAccount(id: "0dkmb2e3lf1dn2g69");
message.Text = msg;
message.Locale = "en-Us";
connector.Conversations.SendToConversationAsync((Activity)message);
}
}
}
更多信息:
JSON
{
"type": "message",
"text": "test",
"from": {
"id": "default-user",
"name": "User"
},
"locale": "en-US",
"textFormat": "plain",
"timestamp": "2017-06-02T21:33:24.737Z",
"channelData": {
"clientActivityId": "1496437792941.9667812978932935.10"
},
"id": "hfncb55l7j7ea0c26",
"channelId": "emulator",
"localTimestamp": "2017-06-02T14:33:24-07:00",
"recipient": {
"id": "m374hm6j2b474lei9",
"name": "Bot"
},
"conversation": {
"id": "icn5ed433edc0kh99"
},
"serviceUrl": "http://127.0.0.1:56303"
}
SendMessage函數:
private void SendMessage(string msg)
{
var userAccount = new ChannelAccount(name: "User", id: "default-user");
var botAccount = new ChannelAccount(name: "Bot", id: "m374hm6j2b474lei9");
var connector = new ConnectorClient(new Uri("http://localhost:3979/"));
// conversationId for Real Bot
//var conversationId = connector.Conversations.CreateDirectConversationAsync(botAccount, userAccount).Result;
// conversationId for Bot Emulator
//var conversationId = _activityHistory.Conversation;
IMessageActivity message = Activity.CreateMessageActivity();
message.From = botAccount;
message.Recipient = userAccount;
message.Conversation = new ConversationAccount(id: "icn5ed433edc0kh99");
message.Text = msg;
message.Locale = "en-Us";
//message.Type = "message";
//message.ChannelId = "emulator";
//message.ReplyToId = "62ehe9jk6kn2eg23i";
message.ServiceUrl = "http://127.0.0.1:56303";
connector.Conversations.SendToConversationAsync((Activity)message);
}
我並不是說所有這些都是需要的,但我確實將它們設置在我自己的工作版本中,而不是設置它們:'message.Type','message.ChannelId','message.ReplyToId '和'message.ServiceUrl'。 – stuartd
還要注意,您可能需要明確信任該URL - 「MicrosoftAppCredentials.TrustServiceUrl(botServiceURL);' – stuartd
聽起來像您正在尋找」主動消息「。文檔:https://docs.microsoft.com/en-us/bot-framework/azure/azure-bot-service-template-proactive - 代碼示例:https://github.com/MicrosoftDX/botFramework-proactiveMessages - - [發送主動消息](https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-proactive-messages) – nilsw